| 1001 | } |
| 1002 | |
| 1003 | gmlGroupListObj *msGMLGetGroups(layerObj *layer, const char *metadata_namespaces) |
| 1004 | { |
| 1005 | int i; |
| 1006 | const char *value=NULL; |
| 1007 | char tag[64]; |
| 1008 | |
| 1009 | char **names=NULL; |
| 1010 | int numnames=0; |
| 1011 | |
| 1012 | gmlGroupListObj *groupList=NULL; |
| 1013 | gmlGroupObj *group=NULL; |
| 1014 | |
| 1015 | /* allocate the collection */ |
| 1016 | groupList = (gmlGroupListObj *) malloc(sizeof(gmlGroupListObj)); |
| 1017 | MS_CHECK_ALLOC(groupList, sizeof(gmlGroupListObj), NULL) ; |
| 1018 | groupList->groups = NULL; |
| 1019 | groupList->numgroups = 0; |
| 1020 | |
| 1021 | /* list of groups (TODO: make this automatic by parsing metadata) */ |
| 1022 | if((value = msOWSLookupMetadata(&(layer->metadata), metadata_namespaces, "groups")) != NULL) { |
| 1023 | names = msStringSplit(value, ',', &numnames); |
| 1024 | |
| 1025 | /* allocation an array of gmlGroupObj's */ |
| 1026 | groupList->numgroups = numnames; |
| 1027 | groupList->groups = (gmlGroupObj *) malloc(sizeof(gmlGroupObj)*groupList->numgroups); |
| 1028 | if (groupList->groups == NULL) |
| 1029 | { |
| 1030 | msSetError(MS_MEMERR, "Out of memory allocating %u bytes.\n", "msGMLGetGroups()", |
| 1031 | sizeof(gmlGroupObj)*groupList->numgroups); |
| 1032 | free(groupList); |
| 1033 | return NULL; |
| 1034 | } |
| 1035 | |
| 1036 | for(i=0; i<groupList->numgroups; i++) { |
| 1037 | group = &(groupList->groups[i]); |
| 1038 | |
| 1039 | group->name = msStrdup(names[i]); /* initialize a few things */ |
| 1040 | group->items = NULL; |
| 1041 | group->numitems = 0; |
| 1042 | group->type = NULL; |
| 1043 | |
| 1044 | snprintf(tag, 64, "%s_group", group->name); |
| 1045 | if((value = msOWSLookupMetadata(&(layer->metadata), metadata_namespaces, tag)) != NULL) |
| 1046 | group->items = msStringSplit(value, ',', &group->numitems); |
| 1047 | |
| 1048 | snprintf(tag, 64, "%s_type", group->name); |
| 1049 | if((value = msOWSLookupMetadata(&(layer->metadata), metadata_namespaces, tag)) != NULL) |
| 1050 | group->type = msStrdup(value); |
| 1051 | } |
| 1052 | |
| 1053 | msFreeCharArray(names, numnames); |
| 1054 | } |
| 1055 | |
| 1056 | return groupList; |
| 1057 | } |
| 1058 | |
| 1059 | void msGMLFreeGroups(gmlGroupListObj *groupList) |
| 1060 | { |
no test coverage detected