IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9921


Ignore:
Timestamp:
Nov 8, 2006, 6:51:54 PM (20 years ago)
Author:
jhoblitt
Message:

remove name from p_psParseLevelInfo
add 'nested' metadata's to the return MD instead parseMetadataItem() instead of parseMetadataEnd
move metadata comment formatting from the END tag to the METADATA tag
fix formatting of nested empty metadatas

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psMetadataConfig.c

    r9920 r9921  
    1010*  @author Eric Van Alst, MHPCC
    1111*
    12 *  @version $Revision: 1.117 $ $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 $
    1414*
    1515*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    9393    psArray*    templateArray;         ///< array of user type templates
    9494    psMetadata* metadata;              ///< metadata container
    95     char*       name;                  ///< name of key
    9695}
    9796p_psParseLevelInfo;
     
    102101    psFree(info->typeArray);
    103102    psFree(info->templateArray);
    104     psFree(info->name);
    105103    psFree(info->metadata);
    106104}
     
    116114    info->templateArray = psArrayAllocEmpty(INITIAL_LENGTH);
    117115    info->metadata = NULL;
    118     info->name = NULL;
    119116
    120117    return info;
     
    10601057        psFree(tempStr);
    10611058        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        }
    10751078    default:
    10761079        psError(PS_ERR_IO, true,
     
    12661269    }
    12671270
    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 list
    1272     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 metadata
    1287     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 there
    1293         // should be a way of signalling non-recoverable parse errors
    1294         psError(PS_ERR_UNKNOWN, false, "failed to add metadata item");
    1295         psFree(strValue);
    1296         psFree(strComment);
    1297         return false;
    1298     }
    1299 
    13001271    // the END just moved us up one nesting level
    13011272    // Remove lower info level
    13021273    if(!psArrayRemoveIndex(levelArray, level)) {
    13031274        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    }
    13101277
    13111278    return true;
     
    15761543        psStringAppend(&content, " \n");
    15771544        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
    15931563            psStringAppend(&content, "\nEND\n");
    1594         }
    1595         psFree(newStr);
    1596         break;
     1564            break;
     1565        }
    15971566    case PS_DATA_TIME:
    15981567        psStringAppend(&content, "%-15s  ", item->name);
Note: See TracChangeset for help on using the changeset viewer.