Changeset 9921
- Timestamp:
- Nov 8, 2006, 6:51:54 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/types/psMetadataConfig.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadataConfig.c
r9920 r9921 10 10 * @author Eric Van Alst, MHPCC 11 11 * 12 * @version $Revision: 1.11 7$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-11-09 04: 06:16$12 * @version $Revision: 1.118 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-11-09 04:51:54 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 93 93 psArray* templateArray; ///< array of user type templates 94 94 psMetadata* metadata; ///< metadata container 95 char* name; ///< name of key96 95 } 97 96 p_psParseLevelInfo; … … 102 101 psFree(info->typeArray); 103 102 psFree(info->templateArray); 104 psFree(info->name);105 103 psFree(info->metadata); 106 104 } … … 116 114 info->templateArray = psArrayAllocEmpty(INITIAL_LENGTH); 117 115 info->metadata = NULL; 118 info->name = NULL;119 116 120 117 return info; … … 1060 1057 psFree(tempStr); 1061 1058 break; 1062 case PS_DATA_METADATA: 1063 // Create next level info 1064 nextLevelInfo = p_psParseLevelInfoAlloc(); 1065 // Create new metadata 1066 nextLevelInfo->metadata = psMetadataAlloc(); 1067 // Save name of metadata 1068 nextLevelInfo->name = psStringCopy(keyName); 1069 // Add next level to levelArray 1070 levelArray = psArrayAdd(levelArray,0,nextLevelInfo); 1071 psFree(nextLevelInfo); 1072 // Increment level counter 1073 addStatus = true; 1074 break; 1059 case PS_DATA_METADATA: { 1060 // create the nested metadata 1061 psMetadata *newScope = psMetadataAlloc(); 1062 1063 // Create next level info 1064 nextLevelInfo = p_psParseLevelInfoAlloc(); 1065 1066 // switch to the scope to the new metadata 1067 nextLevelInfo->metadata = newScope; 1068 1069 // Add next level to levelArray 1070 levelArray = psArrayAdd(levelArray, 0, nextLevelInfo); 1071 psFree(nextLevelInfo); 1072 1073 addStatus = psMetadataAdd(md, PS_LIST_TAIL, keyName, 1074 mdType | flags, 1075 strComment, newScope); 1076 break; 1077 } 1075 1078 default: 1076 1079 psError(PS_ERR_IO, true, … … 1266 1269 } 1267 1270 1268 p_psParseLevelInfo *upperLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[level - 1]));1269 p_psParseLevelInfo *lowerLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[level]));1270 1271 // Check name in nonunique list1272 for (psS32 k = 0; k < psArrayLength(upperLevelInfo->nonUniqueKeyArray); k++) {1273 if (strcmp(upperLevelInfo->nonUniqueKeyArray->data[k], lowerLevelInfo->name) == 0) {1274 flags = PS_META_DUPLICATE_OK;1275 break;1276 }1277 }1278 1279 char *strValue = NULL;1280 psS32 status = 0;1281 strValue = getToken(&linePtr, "#", &status, true);1282 char *strComment = NULL;1283 // XXX why is there a ~ here?1284 strComment = getToken(&linePtr, "~", &status, true);1285 1286 // Add metadata to upper level metadata1287 if (!psMetadataAdd(upperLevelInfo->metadata,1288 PS_LIST_TAIL, lowerLevelInfo->name,1289 PS_DATA_METADATA | flags,1290 strComment, //"",1291 lowerLevelInfo->metadata)) {1292 // This is pretty much a non-recoverable error - perhaps there1293 // should be a way of signalling non-recoverable parse errors1294 psError(PS_ERR_UNKNOWN, false, "failed to add metadata item");1295 psFree(strValue);1296 psFree(strComment);1297 return false;1298 }1299 1300 1271 // the END just moved us up one nesting level 1301 1272 // Remove lower info level 1302 1273 if(!psArrayRemoveIndex(levelArray, level)) { 1303 1274 psError(PS_ERR_UNKNOWN, false, "failed to remove array item"); 1304 psFree(strValue); 1305 psFree(strComment); 1306 } 1307 1308 psFree(strValue); 1309 psFree(strComment); 1275 return false; 1276 } 1310 1277 1311 1278 return true; … … 1576 1543 psStringAppend(&content, " \n"); 1577 1544 break; 1578 case PS_DATA_METADATA: 1579 psStringAppend(&content, "\n%s METADATA ", item->name); 1580 psString newStr = psMetadataConfigFormat(item->data.md); 1581 // XXX need to check for NULL return value, implying error 1582 // from a lower level 1583 1584 // add 3 extra spaces to each metadata folder item 1585 char *buffer2 = strtok(newStr, "\n"); 1586 while( buffer2 != NULL ) { 1587 psStringAppend(&content, "\n %s", buffer2); 1588 buffer2 = strtok(NULL, "\n"); 1589 } 1590 if ( strncmp(item->comment,"",2) ) { 1591 psStringAppend(&content, "\nEND # %s\n", item->comment); 1592 } else { 1545 case PS_DATA_METADATA: { 1546 if (item->comment) { 1547 psStringAppend(&content, "\n%s METADATA # %s", item->name, item->comment); 1548 } else { 1549 psStringAppend(&content, "\n%s METADATA ", item->name); 1550 } 1551 1552 psString newStr = psMetadataConfigFormat(item->data.md); 1553 if (newStr) { 1554 // add 3 extra spaces to each metadata folder item 1555 char *buf = strtok(newStr, "\n"); 1556 while (buf != NULL) { 1557 psStringAppend(&content, "\n %s", buf); 1558 buf = strtok(NULL, "\n"); 1559 } 1560 psFree(newStr); 1561 } 1562 1593 1563 psStringAppend(&content, "\nEND\n"); 1594 } 1595 psFree(newStr); 1596 break; 1564 break; 1565 } 1597 1566 case PS_DATA_TIME: 1598 1567 psStringAppend(&content, "%-15s ", item->name);
Note:
See TracChangeset
for help on using the changeset viewer.
