static rc_t CC _KartCollectionNodeConstructorEx ( const struct XFSModel * Model, const struct XFSModelNode * Template, const char * Alias, XFSNType Type, const struct XFSNode ** Node ) { rc_t RCt; struct XFSNode * TheNode; const char * NodeName; const char * Path; RCt = 0; TheNode = NULL; NodeName = NULL; Path = NULL; if ( Model == NULL || Template == NULL || Node == NULL ) { return XFS_RC ( rcNull ); } * Node = NULL; NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias; Path = XFSModelNodeProperty ( Template, XFS_MODEL_SOURCE ); if ( Path != NULL ) { RCt = XFSKartCollectionNodeMake ( NodeName, Path, XFSModelNodeSecurity ( Template ), & TheNode ); } else { RCt = _KartCollectionNodeMakeFromModel ( NodeName, Model, Template, & TheNode ); } if ( RCt == 0 ) { * Node = TheNode; } else { * Node = NULL; if ( TheNode != NULL ) { XFSNodeDispose ( TheNode ); } } return RCt; } /* _KartCollectionNodeConstructorEx () */
static rc_t CC _KartNodeConstructorEx ( const struct XFSModel * Model, const struct XFSModelNode * Template, const char * Alias, XFSNType Type, const struct XFSNode ** Node ) { rc_t RCt; struct XFSNode * TheNode; const char * NodeName; uint32_t ProjectId; const char * Var; RCt = 0; TheNode = NULL; NodeName = NULL; ProjectId = 0; Var = NULL; XFS_CSAN ( Node ) XFS_CAN ( Model ) XFS_CAN ( Template ) XFS_CAN ( Node ) NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias; Var = XFSModelNodeProperty ( Template, XFS_MODEL_PROJECTID ); if ( Var == NULL ) { return XFS_RC ( rcInvalid ); } ProjectId = atol ( Var ); RCt = XFSGapKartNodeMake ( & TheNode, NodeName, ProjectId, XFSModelNodeSecurity ( Template ) ); if ( RCt == 0 ) { * Node = TheNode; } else { * Node = NULL; if ( TheNode != NULL ) { XFSNodeDispose ( TheNode ); } } return RCt; } /* _KartNodeConstructorEx () */
static rc_t CC _KartCollectionNodeMakeFromModel ( const char * Name, const struct XFSModel * Model, const struct XFSModelNode * Template, struct XFSNode ** Node ) { rc_t RCt; struct XFSKartCollectionNode * KartNode; RCt = 0; KartNode = NULL; if ( Node != NULL ) { * Node = NULL; } if ( Name == NULL || Model == NULL || Template == NULL || Node == NULL ) { return XFS_RC ( rcNull ); } RCt = _KartCollectionNodeMake ( Name, "generic", XFSModelNodeSecurity ( Template ), & KartNode ); if ( RCt == 0 ) { RCt = _LoadKartScanChildren ( Model, Template, KartNode ); if ( RCt == 0 ) { * Node = & ( KartNode -> node . node ); } } if ( RCt != 0 ) { * Node = NULL; if ( KartNode != NULL ) { XFSNodeDispose ( & ( KartNode -> node . node ) ); KartNode = NULL; } } /* printf ( "KartNodeMakeFromModel ND[0x%p] NM[%s] TP[%d]\n", ( void * ) Node, Name, Type ); */ return RCt; } /* _KartCollectionNodeMakeFromModel () */
static rc_t CC _ReadMeNodeConstructor ( const struct XFSModel * Model, const struct XFSModelNode * Template, const char * Alias, const struct XFSNode ** Node ) { rc_t RCt; struct XFSNode * TheNode; const char * NodeName; const char * TextOrSource; struct XFSDoc * ReadMe; RCt = 0; TheNode = NULL; NodeName = NULL; TextOrSource = NULL; ReadMe = NULL; if ( Node != NULL ) { * Node = NULL; } if ( Model == NULL || Template == NULL || Node == NULL ) { return XFS_RC ( rcNull ); } NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias; /*) There could be "text" and "source" parameters, we will leave | source for a future development then, and will use it as text (*/ TextOrSource = XFSModelNodeProperty ( Template, XFS_MODEL_TEXT ); if ( TextOrSource == NULL ) { TextOrSource = XFSModelNodeProperty ( Template, XFS_MODEL_SOURCE ); } if ( TextOrSource == NULL ) { return XFS_RC ( rcInvalid ); } RCt = XFSTextDocMake ( & ReadMe ); if ( RCt == 0 ) { RCt = XFSTextDocAppend ( ReadMe, "README:\n%s\n", TextOrSource ); if ( RCt == 0 ) { RCt = XFSDocNodeMakeWithFlavor ( & TheNode, ReadMe, NodeName, XFSModelNodeSecurity ( Template ), _sFlavorOfReadMe ); if ( RCt == 0 ) { * Node = TheNode; } else { if ( TheNode != NULL ) { XFSNodeDispose ( TheNode ); } } } XFSDocRelease ( ReadMe ); } return RCt; } /* _ReadMeNodeConstructor () */