Ignore:
Timestamp:
Aug 7, 2017, 2:56:24 PM (7 years ago)
Author:
djay
Message:

Update the source code for HPC support. Automatically adding nested outputs for the HPC support (should this be available for every support?). Add capability to store the metadata in the Collection DataBase?. Addition of the zcfg2sql to import any existing ZCFG file into the Collection DB. Add the support to invoke a callback (for history purpose) in case a [callback] section contains at least one parameter defined (url). Add support to convert maps and map to JSON (for callback use only by now). Fix some memory leaks (some are still there).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/prototype-v0/zoo-project/zoo-kernel/response_print.c

    r822 r839  
    2323 */
    2424
     25#include "service.h"
    2526#include "response_print.h"
    2627#include "request_parser.h"
     
    644645 * @return the generated wps:ProcessOfferings xmlNodePtr
    645646 */
    646 void printGetCapabilitiesForProcess(registry *reg, maps* m,xmlNodePtr nc,service* serv){
     647void printGetCapabilitiesForProcess(registry *reg, maps* m,xmlDocPtr doc,xmlNodePtr nc,service* serv){
    647648  xmlNsPtr ns,ns_ows,ns_xml,ns_xlink;
    648649  xmlNodePtr n=NULL,nc1,nc2,nc3;
     
    692693    tmp1=serv->metadata;
    693694
    694     addMetadata(tmp1,nc1,ns_ows,ns_xlink);
    695 
    696     /*while(tmp1!=NULL){
    697       nc2 = xmlNewNode(ns_ows, BAD_CAST "Metadata");
    698       if(strcmp(tmp1->name,"title")==0 ||
    699          strcmp(tmp1->name,"href")==0 ||
    700          strcmp(tmp1->name,"role")==0 ||
    701          strcmp(tmp1->name,"link_type")==0){
    702         xmlNewNsProp(nc2,ns_xlink,BAD_CAST tmp1->name,BAD_CAST tmp1->value);
    703         xmlAddChild(nc1,nc2);
    704       }else{
    705         if(nc3==NULL)
    706           nc3 = xmlNewNode(ns_ows, BAD_CAST "AdditionalParameter");
    707         xmlNodePtr nc4 = xmlNewNode(ns_ows, BAD_CAST "Name");
    708         xmlAddChild(nc4,xmlNewText(BAD_CAST tmp1->name));
    709         xmlNodePtr nc5 = xmlNewNode(ns_ows, BAD_CAST "Value");
    710         xmlAddChild(nc5,xmlNewText(BAD_CAST tmp1->value));
    711         xmlAddChild(nc3,nc4);
    712         xmlAddChild(nc3,nc5);
    713       }
    714       tmp1=tmp1->next;
    715       }*/
     695    addMetadata(tmp1,doc,nc1,ns_ows,ns_xlink);
     696    tmp1=serv->additional_parameters;
     697    int fromDb=-1;
     698    map* test=getMap(serv->content,"fromDb");
     699    if(test!=NULL && strncasecmp(test->value,"true",4)==0)
     700      fromDb=1;
     701    addAdditionalParameters(tmp1,doc,nc1,ns_ows,ns_xlink,fromDb);
     702
    716703    if(nc3!=NULL)
    717704      xmlAddChild(nc1,nc3);
     
    756743}
    757744
    758 int addMetadata(map* meta,xmlNodePtr nc,xmlNsPtr ns_ows,xmlNsPtr ns_xlink){
     745int addMetadata(map* meta,xmlDocPtr doc,xmlNodePtr nc,xmlNsPtr ns_ows,xmlNsPtr ns_xlink){
    759746    int hasTitle=-1;
    760747    int hasValue=-1;
     
    830817}
    831818
     819
     820int addAdditionalParameters(map* meta,xmlDocPtr doc,xmlNodePtr nc,xmlNsPtr ns_ows,xmlNsPtr ns_xlink,int fromDb){
     821    int hasTitle=-1;
     822    int hasValue=-1;
     823    xmlNodePtr nc1;
     824    map* oMeta=meta;
     825    int isAdditionalParameters=-1;
     826    //if(count(oMeta)>=2){
     827    int level=0;
     828    map* test=getMap(meta,"title");
     829    if(test!=NULL)
     830      level+=1;
     831    test=getMap(meta,"href");
     832    if(test!=NULL)
     833      level+=1;
     834    test=getMap(meta,"role");
     835    if(test!=NULL)
     836      level+=1;
     837    if(count(oMeta)>level+1)
     838      isAdditionalParameters=1;
     839    //}
     840    char *ctitle=NULL;
     841    while(meta!=NULL){
     842      if(hasTitle<0)
     843        if(hasValue<0)
     844          nc1 = xmlNewNode(ns_ows, BAD_CAST "AdditionalParameters");
     845      if(strncasecmp(meta->name,"title",5)==0 ||
     846         strcasecmp(meta->name,"href")==0 ||
     847         strcasecmp(meta->name,"role")==0 ){
     848        int index=5;
     849        if(strncasecmp(meta->name,"title",5)==0){
     850          index=6;
     851          hasTitle=1;
     852          if(ctitle!=NULL && strcasecmp(meta->value,ctitle)!=0){
     853              xmlAddChild(nc,nc1);
     854              nc1 = xmlNewNode(ns_ows, BAD_CAST "AdditionalParameters");
     855              free(ctitle);
     856              ctitle=NULL;
     857          }
     858          if(ctitle==NULL){
     859            char *tmp=(char*)malloc((strlen(meta->name)+1)*sizeof(char));
     860            snprintf(tmp,index,"%s",meta->name);
     861            xmlNewNsProp(nc1,ns_xlink,BAD_CAST tmp,BAD_CAST meta->value);
     862            free(tmp);
     863          }       
     864          if(ctitle!=NULL)
     865            free(ctitle);
     866          ctitle=zStrdup(meta->value);
     867        }
     868      }else{
     869        xmlNodePtr nc2 = xmlNewNode(ns_ows, BAD_CAST "AdditionalParameter");
     870        xmlNodePtr nc3 = xmlNewNode(ns_ows, BAD_CAST "Name");
     871        xmlAddChild(nc3,xmlNewText(BAD_CAST meta->name));
     872        xmlAddChild(nc2,nc3);
     873        if(fromDb<0){
     874          char *mptr;
     875          char* meta_values=strtok_r(meta->value,",",&mptr);
     876          while(meta_values!=NULL){
     877            xmlNodePtr nc4 = xmlNewNode(ns_ows, BAD_CAST "Value");
     878            xmlAddChild(nc4,xmlNewText(BAD_CAST meta_values));
     879            xmlAddChild(nc2,nc4);
     880            meta_values=strtok_r(NULL,",",&mptr);
     881          }
     882        }else{
     883          xmlNodePtr nc4 = xmlNewNode(ns_ows, BAD_CAST "Value");
     884          xmlAddChild(nc4,xmlNewCDataBlock(doc,BAD_CAST meta->value,strlen(meta->value)));
     885          xmlAddChild(nc2,nc4);
     886        }
     887        xmlAddChild(nc1,nc2);
     888        hasTitle=-1;
     889      }
     890      meta=meta->next;
     891      if(hasTitle<0){
     892        xmlAddChild(nc,nc1);
     893        hasValue=1;
     894      }
     895    }
     896    if(oMeta!=NULL && hasValue<0 && nc1!=NULL){
     897      xmlAddChild(nc,nc1);
     898    }
     899}
     900
    832901/**
    833902 * Add the ows:Metadata nodes relative to the profile registry
     
    886955 * @return the generated wps:ProcessOfferings xmlNodePtr
    887956 */
    888 void printDescribeProcessForProcess(registry *reg, maps* m,xmlNodePtr nc,service* serv){
     957void printDescribeProcessForProcess(registry *reg, maps* m,xmlDocPtr doc,xmlNodePtr nc,service* serv){
    889958  xmlNsPtr ns,ns_ows,ns_xlink;
    890959  xmlNodePtr n,nc1;
     
    892961  map* version=getMapFromMaps(m,"main","rversion");
    893962  int vid=getVersionId(version->value);
     963  int fromDb=-1;
     964  map* serviceType=getMap(serv->content,"serviceType");
     965  map* test=getMap(serv->content,"fromDb");
     966  if(test!=NULL && strncasecmp(test->value,"true",4)==0)
     967    fromDb=1;
    894968
    895969  n=nc;
     
    9371011    tmp1=serv->metadata;
    9381012    while(tmp1!=NULL){
    939       addMetadata(tmp1,nc,ns_ows,ns_xlink);
     1013      addMetadata(tmp1,doc,nc,ns_ows,ns_xlink);
    9401014      /*nc1 = xmlNewNode(ns_ows, BAD_CAST "Metadata");
    9411015      xmlNewNsProp(nc1,ns_xlink,BAD_CAST tmp1->name,BAD_CAST tmp1->value);
     
    9511025  }else{
    9521026    tmp1=serv->metadata;
    953     addMetadata(tmp1,nc,ns_ows,ns_xlink);
     1027    addMetadata(tmp1,doc,nc,ns_ows,ns_xlink);
    9541028    addInheritedMetadata(nc,ns_ows,ns_xlink,reg,m,serv);
     1029    tmp1=serv->additional_parameters;
     1030    addAdditionalParameters(tmp1,doc,nc,ns_ows,ns_xlink,fromDb);
    9551031  }
    9561032
     
    9591035    if(vid==0){
    9601036      nc1 = xmlNewNode(NULL, BAD_CAST "DataInputs");
    961       printFullDescription(1,e,"Input",ns,ns_ows,nc1,vid);
     1037      printFullDescription(doc,1,e,"Input",ns,ns_ows,nc1,vid,fromDb,NULL);
    9621038      xmlAddChild(nc,nc1);
    9631039    }
    9641040    else{
    965       printFullDescription(1,e,"wps:Input",ns,ns_ows,nc,vid);
     1041      printFullDescription(doc,1,e,"wps:Input",ns,ns_ows,nc,vid,fromDb,NULL);
    9661042    }
    9671043  }
     
    9701046  if(vid==0){
    9711047    nc1 = xmlNewNode(NULL, BAD_CAST "ProcessOutputs");
    972     printFullDescription(0,e,"Output",ns,ns_ows,nc1,vid);
     1048    printFullDescription(doc,0,e,"Output",ns,ns_ows,nc1,vid,fromDb,NULL);
    9731049    xmlAddChild(nc,nc1);
    9741050  }
    9751051  else{
    976     printFullDescription(0,e,"wps:Output",ns,ns_ows,nc,vid);
     1052    printFullDescription(doc,0,e,"wps:Output",ns,ns_ows,nc,vid,fromDb,serviceType);
    9771053  }
    9781054  if(vid==0)
     
    9961072 * @param nc1 the XML node to use to add the created tree
    9971073 * @param vid the WPS version id (0 for 1.0.0, 1 for 2.0.0)
    998  */
    999 void printFullDescription(int in,elements *elem,const char* type,xmlNsPtr ns,xmlNsPtr ns_ows,xmlNodePtr nc1,int vid){
     1074 * @param fromDb 1 in case the metadata comes from the DB, -1 in other cases
     1075 * @param serviceType the serviceType found in the ZCFG file or the DB
     1076 */
     1077void printFullDescription(xmlDocPtr doc,int in,elements *elem,const char* type,xmlNsPtr ns,xmlNsPtr ns_ows,xmlNodePtr nc1,int vid,int fromDb,const map* serviceType){
    10001078  xmlNsPtr ns1=NULL;
    10011079  if(vid==1)
     
    10321110
    10331111    if(e->format!=NULL){
     1112#ifdef USE_HPC     
     1113    DEFAULT_OUT:
     1114#endif
    10341115      const char orderedFields[13][14]={
    10351116        "mimeType",
     
    11381219              char *tmps=strdup(token);
    11391220              tmps[strlen(tmps)]=0;
    1140               xmlAddChild(nc7,xmlNewText(BAD_CAST tmps));
     1221              nc8 = xmlNewText(BAD_CAST tmps);
     1222              xmlAddChild(nc7,nc8);
    11411223              free(tmps);
    11421224              xmlAddChild(nc6,nc7);
     
    14371519        xmlNsPtr ns_xlink=usedNs[xlinkId];
    14381520
    1439         dumpMap(metadata);
    1440         addMetadata(metadata,nc2,ns_ows,ns_xlink);
     1521        //dumpMap(metadata);
     1522        addMetadata(metadata,doc,nc2,ns_ows,ns_xlink);
     1523        addAdditionalParameters(e->additional_parameters,doc,nc2,ns_ows,ns_xlink,fromDb);
    14411524
    14421525      }
     
    15831666      xmlAddChild(nc2,nc3);
    15841667    }else{
    1585       if(e->child!=NULL && vid!=0){
    1586         printFullDescription(in,e->child,type,ns,ns_ows,nc2,vid);
    1587       }
    1588     }
    1589    
     1668      if(e->child!=NULL){
     1669        if(e->child!=NULL && vid!=0){
     1670          printFullDescription(doc,in,e->child,type,ns,ns_ows,nc2,vid,fromDb,NULL);
     1671        }
     1672      }
     1673    }
    15901674    if(e->child!=NULL && vid==0){
    15911675      elements* children=dupElements(e->child);
     
    15981682        cursor=cursor->next;
    15991683      }
    1600       printFullDescription(in,children,type,ns,ns_ows,nc2,vid);
     1684      printFullDescription(doc,in,children,type,ns,ns_ows,nc2,vid,fromDb,serviceType);
    16011685      xmlAddChild(nc1,nc2);
    16021686      freeElements(&children);
     
    16041688    }else
    16051689      xmlAddChild(nc1,nc2);
    1606    
    16071690    e=e->next;
    16081691  }
     
    25882671      toto=getMap(tmpI->content,"asReference");
    25892672#ifdef USE_MS
    2590       if(toto!=NULL && strcasecmp(toto->value,"true")==0 && testMap==NULL)
     2673      if(toto!=NULL && strcasecmp(toto->value,"true")==0 && (testMap==NULL || strncasecmp(testMap->value,"true",4)!=0) )
    25912674#else
    25922675      if(toto!=NULL && strcasecmp(toto->value,"true")==0)
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png