GSAS/iRODSDescriptorProcessing: geni.re

File geni.re, 3.9 KB (added by Antoine de Torcy, 6 years ago)
Line 
1acPostProcForPut { ON( ($objPath like "/geniRenci/home/public/md_tests/*") && ($oprType == 1) &&
2                                                        (       ( $objPath like "*/Artifact1.xml" ) ||
3                                                                ( $objPath like "*/Experiment1.xml" ) ||
4                                                                ( $objPath like "*/Step1.xml" ) ||
5                                                                ( $objPath like "*/project1.xml" ) ||
6                                                                ( $objPath like "*/projectSerialized.xml" )     ))
7                                                               
8        {
9                acGeniMetadataExtract();
10        }
11}       
12
13
14acPostProcForCreate { ON( ($objPath like "/geniRenci/home/public/md_tests/*") &&
15                                                        (       ( $objPath like "*/Artifact1.xml" ) ||
16                                                                ( $objPath like "*/Experiment1.xml" ) ||
17                                                                ( $objPath like "*/Step1.xml" ) ||
18                                                                ( $objPath like "*/project1.xml" ) ||
19                                                                ( $objPath like "*/projectSerialized.xml" )     ))
20                                                               
21        {
22                # Flag object
23                msiAddKeyVal(*KVP, "geni_md_xtract", "1");
24                msiAssociateKeyValuePairsToObj(*KVP, $objPath, "-d");
25        }
26}       
27
28
29
30acPostProcForOpen { ON( ($objPath like "/geniRenci/home/public/md_tests/*") &&
31                                                        (       ( $objPath like "*/Artifact1.xml" ) ||
32                                                                ( $objPath like "*/Experiment1.xml" ) ||
33                                                                ( $objPath like "*/Step1.xml" ) ||
34                                                                ( $objPath like "*/project1.xml" ) ||
35                                                                ( $objPath like "*/projectSerialized.xml" )     ))
36                                                               
37        {
38                # Check if object is flagged for metadata extraction
39                if (hasFlag($dataId, "geni_md_xtract") >= 0) {
40                        # Debug
41                        #writeLine("serverLog","TEST:acPostProcForModifyDataObjMeta LOOKYHERE!!! "++$objPath);
42                       
43                        # Remove flag
44                        msiAddKeyVal(*KVP, "geni_md_xtract", "1");
45                        msiRemoveKeyValuePairsFromObj(*KVP, $objPath, "-d");
46                       
47                        # Extract GENI metadata
48                        acGeniMetadataExtract();
49                }
50        }
51}                                                       
52                                                               
53                                                               
54acGeniMetadataExtract() {
55        *xsltObjPath="/geniRenci/home/public/md_tests/files/geniObject.xsl";
56        *geniXmlObjPath=$objPath;
57       
58        # A few checks to get meaningful error messages
59        dataObjExists(*geniXmlObjPath);
60        dataObjExists(*xsltObjPath);
61        hasExtension(*geniXmlObjPath,"xml");
62        hasExtension(*xsltObjPath,"xsl");
63
64        # Apply stylesheet
65        msiXsltApply(*xsltObjPath, *geniXmlObjPath, *buffer);
66
67        # Generate path of formatted metadata object
68        msiSplitPath(*geniXmlObjPath, *collection, *filename);
69        *metadataObjPath=*collection++"/"++trimr(*filename,".")++"_formatted.xml";
70
71        # Create and write to metadata object
72        msiDataObjCreate(*metadataObjPath, "forceFlag=", *D_FD);
73        msiDataObjWrite(*D_FD, *buffer, *W_len);
74        msiDataObjClose(*D_FD, *status);
75
76        # Load metadata from formatted object
77        msiLoadMetadataFromXml(*geniXmlObjPath, *metadataObjPath);
78
79        # Remove formatted metadata object
80        msiDataObjUnlink(*metadataObjPath, *status);
81
82        # Done
83        writeLine("serverLog", "[acGeniMetadataExtract] Added metadata to "++*geniXmlObjPath);
84
85}
86
87
88dataObjExists(*objPath) {
89        # Split path to get obj and coll names
90        msiSplitPath(*objPath, *collection, *object);
91       
92        # Make query
93        msiAddSelectFieldToGenQuery("DATA_ID", "count", *genQInp);
94        msiAddConditionToGenQuery("DATA_NAME", "=", *object, *genQInp);
95        msiAddConditionToGenQuery("COLL_NAME", "=", *collection, *genQInp);
96       
97        # Run query
98        msiExecGenQuery(*genQInp, *genQOut);
99       
100        # Extract path from query result
101        foreach (*genQOut) {
102                msiGetValByKey(*genQOut, "DATA_ID", *count);
103        }
104
105        # Success?
106        if (int(*count) > 0) {
107                succeed;
108        }
109        else {
110                fail(-310000);  #USER_FILE_DOES_NOT_EXIST
111        }
112}
113
114
115hasFlag(*dataID, *flag) {
116        # Make query
117        msiAddSelectFieldToGenQuery("META_DATA_ATTR_NAME", "count", *genQInp);
118       
119        msiAddConditionToGenQuery("META_DATA_ATTR_NAME", "=", *flag, *genQInp);
120        msiAddConditionToGenQuery("META_DATA_ATTR_VALUE", "=", "1", *genQInp);
121       
122        msiAddConditionToGenQuery("DATA_ID", "=", *dataID, *genQInp);
123       
124        # Run query
125        msiExecGenQuery(*genQInp, *genQOut);
126       
127        # Extract path from query result
128        foreach (*genQOut) {
129                msiGetValByKey(*genQOut, "META_DATA_ATTR_NAME", *count);
130        }
131
132        # Success?
133        if (int(*count) > 0) {
134                succeed;
135        }
136        else {
137                fail(-808000);  #CAT_NO_ROWS_FOUND
138        }
139}
140
141
142hasExtension(*object,*extension) {
143        # Get object extension
144        *ext = triml(*object, ".");
145
146        # Match?       
147        if (*ext == *extension) {
148                succeed;
149        }
150        else {
151                fail(-815000);  #CAT_INVALID_DATA_TYPE
152        }
153}
154
155