| 276 | } |
| 277 | |
| 278 | void msSOSAddPropertyNode(xmlNsPtr psNsSwe, xmlNsPtr psNsXLink, xmlNodePtr psParent, layerObj *lp, xmlNsPtr psNsGml, char *pszCompositePhenomenonId) |
| 279 | { |
| 280 | const char *pszValue = NULL; |
| 281 | char *pszTmpVal = NULL, *pszFullName = NULL; |
| 282 | xmlNodePtr psCompNode, psNode; |
| 283 | int i, j=0; |
| 284 | char szTmp[256]; |
| 285 | const char *pszComponentBase = "urn:ogc:def:property:"; |
| 286 | |
| 287 | if (psParent && lp) |
| 288 | { |
| 289 | psNode = xmlNewChild(psParent, NULL, BAD_CAST "observedProperty", NULL); |
| 290 | psCompNode = xmlNewChild(psNode, psNsSwe, BAD_CAST "CompositePhenomenon", NULL); |
| 291 | pszValue = msOWSLookupMetadata(&(lp->metadata), "S", |
| 292 | "observedproperty_id"); |
| 293 | pszTmpVal = msStrdup(pszValue); |
| 294 | |
| 295 | if (pszCompositePhenomenonId != NULL) { /* unique value needs to be constructed */ |
| 296 | pszTmpVal = msStringConcatenate(pszTmpVal, "_"); |
| 297 | pszTmpVal = msStringConcatenate(pszTmpVal, pszCompositePhenomenonId); |
| 298 | } |
| 299 | |
| 300 | if (pszTmpVal)/*should always be true */ { |
| 301 | xmlNewNsProp(psCompNode, psNsGml, BAD_CAST "id", BAD_CAST pszTmpVal); |
| 302 | msFree(pszTmpVal); |
| 303 | } |
| 304 | |
| 305 | pszValue = msOWSLookupMetadata(&(lp->metadata), "S", |
| 306 | "observedproperty_name"); |
| 307 | if (pszValue) |
| 308 | psNode = xmlNewChild(psCompNode, psNsGml, |
| 309 | BAD_CAST "name", BAD_CAST pszValue); |
| 310 | |
| 311 | /* add components */ |
| 312 | |
| 313 | /*assuming that the layer is opened and msLayerGetItems called*/ |
| 314 | for(i=0; i<lp->numitems; i++) |
| 315 | { |
| 316 | pszValue = msOWSLookupMetadata(&(lp->metadata), "S", "observedproperty_authority"); |
| 317 | |
| 318 | if (pszValue) |
| 319 | pszTmpVal = msStrdup(pszValue); |
| 320 | else |
| 321 | pszTmpVal = msStrdup("OGC-SWE"); |
| 322 | |
| 323 | pszFullName = msStrdup(pszComponentBase); |
| 324 | |
| 325 | pszFullName = msStringConcatenate(pszFullName, pszTmpVal); |
| 326 | |
| 327 | free(pszTmpVal); |
| 328 | |
| 329 | pszFullName = msStringConcatenate(pszFullName, ":"); |
| 330 | |
| 331 | pszValue = msOWSLookupMetadata(&(lp->metadata), "S", "observedproperty_version"); |
| 332 | |
| 333 | if (pszValue) |
| 334 | pszTmpVal = msStrdup(pszValue); |
| 335 | else |
no test coverage detected