Ignore:
Timestamp:
May 10, 2014, 4:23:03 PM (10 years ago)
Author:
djay
Message:

Remove leaks from DescribeProcess? and JavaScript? support. Fix wrong ulinet update on previous commit. Use the new updateStatus/setOutputValue functions as described in #88 from longProcess. Add default value for QREncode service in ZCFG. Fix name of profile service in the ZCFG file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-project/zoo-kernel/service_internal.c

    r470 r471  
    7777static HANDLE hMapObjectG = NULL;  // handle to file mapping
    7878
    79 void updateStatus(maps *conf){
     79int _updateStatus(maps *conf){
    8080  LPWSTR lpszTmp;
    8181  BOOL fInit;
     
    9494  if (hMapObjectG == NULL){
    9595    fprintf(stderr,"Unable to create share memory segment %s !! \n",tmpMap->value);
    96     return ;
     96    return -2;
    9797  }
    9898  fInit = (GetLastError() != ERROR_ALREADY_EXISTS);
     
    106106  if (lpvMemG == NULL){
    107107    fprintf(stderr,"Unable to create or access the shared memory segment %s !! \n",tmpMap->value);
    108     return ;
     108    return -1;
    109109  }
    110110  memset(lpvMemG, '\0', SHMEMSIZE);
     
    120120  *lpszTmp++ = '\0';
    121121  free(final_string);
     122  return 0;
    122123}
    123124
     
    200201}
    201202
    202 void updateStatus(maps *conf){
     203int _updateStatus(maps *conf){
    203204  int shmid,i;
    204205  key_t key;
     
    212213      fprintf(stderr,"shmget failed to create new Shared memory segment\n");
    213214#endif
     215      return -2;
    214216    }else{
    215217      if ((shm = (char*) shmat(shmid, NULL, 0)) == (char *) -1) {
     
    217219        fprintf(stderr,"shmat failed to update value\n");
    218220#endif
     221        return -1;
    219222      }
    220223      else{
     
    235238    }
    236239  }
     240  return 0;
    237241}
    238242
     
    293297    else
    294298      setMapInMaps(conf,"lenv","status","15");
    295     updateStatus(conf);
     299    _updateStatus(conf);
    296300  }
    297301  freeMaps(&conf);
     
    904908  }
    905909
    906   nc1 = xmlNewNode(NULL, BAD_CAST "DataInputs");
    907   elements* e=serv->inputs;
    908   printFullDescription(e,"Input",ns_ows,nc1);
    909   xmlAddChild(nc,nc1);
     910  if(serv->inputs!=NULL){
     911    nc1 = xmlNewNode(NULL, BAD_CAST "DataInputs");
     912    elements* e=serv->inputs;
     913    printFullDescription(e,"Input",ns_ows,nc1);
     914    xmlAddChild(nc,nc1);
     915  }
    910916
    911917  nc1 = xmlNewNode(NULL, BAD_CAST "ProcessOutputs");
    912   e=serv->outputs;
     918  elements* e=serv->outputs;
    913919  printFullDescription(e,"Output",ns_ows,nc1);
    914920  xmlAddChild(nc,nc1);
     
    934940  orderedFields[12]="rangeSpace";
    935941
    936   xmlNodePtr nc2,nc3,nc4,nc5,nc6,nc7,nc8;
     942  xmlNodePtr nc2,nc3,nc4,nc5,nc6,nc7,nc8,nc9;
    937943  elements* e=elem;
     944
    938945  map* tmp1=NULL;
    939946  while(e!=NULL){
     
    941948    int isAnyValue=1;
    942949    nc2 = xmlNewNode(NULL, BAD_CAST type);
    943     tmp1=getMap(e->content,"minOccurs");
    944     if(tmp1){
    945       xmlNewProp(nc2,BAD_CAST tmp1->name,BAD_CAST tmp1->value);
    946     }
    947     tmp1=getMap(e->content,"maxOccurs");
    948     if(tmp1){
    949       xmlNewProp(nc2,BAD_CAST tmp1->name,BAD_CAST tmp1->value);
     950    if(strncmp(type,"Input",5)==0){
     951      tmp1=getMap(e->content,"minOccurs");
     952      if(tmp1!=NULL){
     953        xmlNewProp(nc2,BAD_CAST tmp1->name,BAD_CAST tmp1->value);
     954      }else
     955        xmlNewProp(nc2,BAD_CAST "minOccurs",BAD_CAST "0");
     956      tmp1=getMap(e->content,"maxOccurs");
     957      if(tmp1!=NULL){
     958        if(strcasecmp(tmp1->value,"unbounded")!=0)
     959          xmlNewProp(nc2,BAD_CAST tmp1->name,BAD_CAST tmp1->value);
     960        else
     961          xmlNewProp(nc2,BAD_CAST "maxOccurs",BAD_CAST "1000");
     962      }else
     963        xmlNewProp(nc2,BAD_CAST "maxOccurs",BAD_CAST "1");
    950964    }
    951965
    952966    printDescription(nc2,ns_ows,e->name,e->content);
    953967
     968    /**
     969     * Build the (Literal/Complex/BoundingBox)Data node
     970     */
    954971    if(strncmp(type,"Output",6)==0){
    955972      if(strncasecmp(e->format,"LITERALDATA",strlen(e->format))==0)
     
    972989        nc3 = xmlNewNode(NULL, BAD_CAST e->format);
    973990    }
     991
    974992    iotype* _tmp0=NULL;
    975993    iotype* _tmp=e->defaults;
     
    977995    bool hasDefault=false;
    978996    bool hasUOM=false;
     997    bool hasUOM1=false;
    979998    if(_tmp!=NULL){
    980999      if(strcmp(e->format,"LiteralOutput")==0 ||
     
    9871006              strcmp(e->format,"BoundingBoxData")==0){
    9881007        datatype=2;
    989         //nc4 = xmlNewNode(NULL, BAD_CAST "BoundingBoxOutput");
    9901008        nc5 = xmlNewNode(NULL, BAD_CAST "Default");
    9911009      }
     
    9961014     
    9971015      tmp1=_tmp->content;
    998       int avcnt=0;
    999       int dcnt=0;
    1000       int oI=0;
    1001       for(oI=0;oI<13;oI++)
    1002         if((tmp1=getMap(_tmp->content,orderedFields[oI]))!=NULL){
    1003           //while(tmp1!=NULL){
    1004 #ifdef DEBUG
    1005           printf("DATATYPE DEFAULT ? %s\n",tmp1->name);
    1006 #endif
    1007           if(strncasecmp(tmp1->name,"DataType",8)==0){
    1008             nc6 = xmlNewNode(ns_ows, BAD_CAST "DataType");
    1009             xmlAddChild(nc6,xmlNewText(BAD_CAST tmp1->value));
    1010             char tmp[1024];
    1011             sprintf(tmp,"http://www.w3.org/TR/xmlschema-2/#%s",tmp1->value);
    1012             xmlNewNsProp(nc6,ns_ows,BAD_CAST "reference",BAD_CAST tmp);
    1013             xmlAddChild(nc3,nc6);
    1014             tmp1=tmp1->next;
    1015             datatype=1;
    1016             continue;
     1016
     1017      if((tmp1=getMap(_tmp->content,"DataType"))!=NULL){
     1018        nc8 = xmlNewNode(ns_ows, BAD_CAST "DataType");
     1019        xmlAddChild(nc8,xmlNewText(BAD_CAST tmp1->value));
     1020        char tmp[1024];
     1021        sprintf(tmp,"http://www.w3.org/TR/xmlschema-2/#%s",tmp1->value);
     1022        xmlNewNsProp(nc8,ns_ows,BAD_CAST "reference",BAD_CAST tmp);
     1023        xmlAddChild(nc3,nc8);
     1024        datatype=1;
     1025      }
     1026     
     1027      if(strncmp(type,"Input",5)==0){
     1028
     1029        if((tmp1=getMap(_tmp->content,"AllowedValues"))!=NULL){
     1030          nc6 = xmlNewNode(ns_ows, BAD_CAST "AllowedValues");
     1031          char *token,*saveptr1;
     1032          token=strtok_r(tmp1->value,",",&saveptr1);
     1033          while(token!=NULL){
     1034            nc7 = xmlNewNode(ns_ows, BAD_CAST "Value");
     1035            char *tmps=strdup(token);
     1036            tmps[strlen(tmps)]=0;
     1037            xmlAddChild(nc7,xmlNewText(BAD_CAST tmps));
     1038            free(tmps);
     1039            xmlAddChild(nc6,nc7);
     1040            token=strtok_r(NULL,",",&saveptr1);
    10171041          }
    1018           if(strcmp(tmp1->name,"asReference")!=0 &&
    1019              strncasecmp(tmp1->name,"DataType",8)!=0 &&
    1020              strcasecmp(tmp1->name,"extension")!=0 &&
    1021              strcasecmp(tmp1->name,"value")!=0 &&
    1022              strncasecmp(tmp1->name,"AllowedValues",13)!=0&&
    1023              strncasecmp(tmp1->name,"range",5)!=0){
    1024             if(datatype!=1){
    1025               char *tmp2=zCapitalize1(tmp1->name);
    1026               nc6 = xmlNewNode(NULL, BAD_CAST tmp2);
    1027               free(tmp2);
    1028             }
    1029             else{
    1030               char *tmp2=zCapitalize(tmp1->name);
    1031               nc6 = xmlNewNode(ns_ows, BAD_CAST tmp2);
    1032               free(tmp2);
    1033             }
    1034             xmlAddChild(nc6,xmlNewText(BAD_CAST tmp1->value));
    1035             xmlAddChild(nc5,nc6);
    1036             hasUOM=true;
    1037           }else
    1038             if(strncmp(type,"Input",5)==0){
    1039 
    1040               if(strcmp(tmp1->name,"value")==0){
    1041                 nc7 = xmlNewNode(NULL, BAD_CAST "DefaultValue");
    1042                 xmlAddChild(nc7,xmlNewText(BAD_CAST tmp1->value));
    1043                 default1=1;
    1044                 hasDefault=true;
    1045               }
    1046               if(strncasecmp(tmp1->name,"AllowedValues",13)==0){
    1047                 nc6 = xmlNewNode(ns_ows, BAD_CAST "AllowedValues");
    1048                 char *token,*saveptr1;
    1049                 token=strtok_r(tmp1->value,",",&saveptr1);
    1050                 while(token!=NULL){
    1051                   nc7 = xmlNewNode(ns_ows, BAD_CAST "Value");
    1052                   char *tmps=strdup(token);
    1053                   tmps[strlen(tmps)]=0;
    1054                   xmlAddChild(nc7,xmlNewText(BAD_CAST tmps));
    1055                   xmlAddChild(nc6,nc7);
    1056                   token=strtok_r(NULL,",",&saveptr1);
     1042          if(getMap(_tmp->content,"range")!=NULL ||
     1043             getMap(_tmp->content,"rangeMin")!=NULL ||
     1044             getMap(_tmp->content,"rangeMax")!=NULL ||
     1045             getMap(_tmp->content,"rangeClosure")!=NULL )
     1046            goto doRange;
     1047          xmlAddChild(nc3,nc6);
     1048          isAnyValue=-1;
     1049        }
     1050
     1051        tmp1=getMap(_tmp->content,"range");
     1052        if(tmp1==NULL)
     1053          tmp1=getMap(_tmp->content,"rangeMin");
     1054        if(tmp1==NULL)
     1055          tmp1=getMap(_tmp->content,"rangeMax");
     1056       
     1057        if(tmp1!=NULL && isAnyValue==1){
     1058          nc6 = xmlNewNode(ns_ows, BAD_CAST "AllowedValues");
     1059        doRange:
     1060         
     1061          /**
     1062           * Range: Table 46 OGC Web Services Common Standard
     1063           */
     1064          nc8 = xmlNewNode(ns_ows, BAD_CAST "Range");
     1065         
     1066          map* tmp0=getMap(tmp1,"range");
     1067          if(tmp0!=NULL){
     1068            char* pToken;
     1069            char* orig=zStrdup(tmp0->value);
     1070            /**
     1071             * RangeClosure: Table 47 OGC Web Services Common Standard
     1072             */
     1073            char *tmp="closed";
     1074            if(orig[0]=='[' && orig[strlen(orig)-1]=='[')
     1075              tmp="closed-open";
     1076            else
     1077              if(orig[0]==']' && orig[strlen(orig)-1]==']')
     1078                tmp="open-closed";
     1079              else
     1080                if(orig[0]==']' && orig[strlen(orig)-1]=='[')
     1081                  tmp="open";
     1082            xmlNewNsProp(nc8,ns_ows,BAD_CAST "rangeClosure",BAD_CAST tmp);
     1083            pToken=strtok(orig,",");
     1084            int nci0=0;
     1085            while(pToken!=NULL){
     1086              char *tmpStr=(char*) malloc((strlen(pToken))*sizeof(char));
     1087              if(nci0==0){
     1088                nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
     1089                int nci=1;
     1090                for(nci=1;nci<strlen(pToken);nci++){
     1091                  tmpStr[nci-1]=pToken[nci];
    10571092                }
    1058                 if(getMap(_tmp->content,"range")!=NULL ||
    1059                    getMap(_tmp->content,"rangeMin")!=NULL ||
    1060                    getMap(_tmp->content,"rangeMax")!=NULL ||
    1061                    getMap(_tmp->content,"rangeClosure")!=NULL )
    1062                   goto doRange;
    1063                 xmlAddChild(nc3,nc6);
    1064                 isAnyValue=-1;
    1065               }
    1066               if(strncasecmp(tmp1->name,"range",5)==0){
    1067                 if(isAnyValue==1){
    1068                   nc6 = xmlNewNode(ns_ows, BAD_CAST "AllowedValues");
    1069                 doRange:
    1070                  
    1071                   /**
    1072                    * Range: Table 46 OGC Web Services Common Standard
    1073                    */
    1074                   nc8 = xmlNewNode(ns_ows, BAD_CAST "Range");
    1075 
    1076                   map* tmp0=getMap(tmp1,"range");
    1077                   if(tmp0!=NULL){
    1078                     char* pToken;
    1079                     char* orig=zStrdup(tmp0->value);
    1080                     /**
    1081                      * RangeClosure: Table 47 OGC Web Services Common Standard
    1082                      */
    1083                     char *tmp="closed";
    1084                     if(orig[0]=='[' && orig[strlen(orig)-1]=='[')
    1085                       tmp="closed-open";
    1086                     else
    1087                       if(orig[0]==']' && orig[strlen(orig)-1]==']')
    1088                         tmp="open-closed";
    1089                       else
    1090                         if(orig[0]==']' && orig[strlen(orig)-1]=='[')
    1091                           tmp="open";
    1092                     xmlNewNsProp(nc8,ns_ows,BAD_CAST "rangeClosure",BAD_CAST tmp);
    1093                     pToken=strtok(orig,",");
    1094                     int nci0=0;
    1095                     while(pToken!=NULL){
    1096                       char *tmpStr=(char*) malloc((strlen(pToken))*sizeof(char));
    1097                       if(nci0==0){
    1098                         nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
    1099                         int nci=1;
    1100                         for(nci=1;nci<strlen(pToken);nci++){
    1101                           tmpStr[nci-1]=pToken[nci];
    1102                         }
    1103                       }else{
    1104                         nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
    1105                         int nci=0;
    1106                         for(nci=0;nci<strlen(pToken)-1;nci++){
    1107                           tmpStr[nci]=pToken[nci];
    1108                         }
    1109                       }
    1110                       xmlAddChild(nc7,xmlNewText(BAD_CAST tmpStr));
    1111                       xmlAddChild(nc8,nc7);
    1112                       nci0++;
    1113                       pToken = strtok(NULL,",");
    1114                     }               
    1115                     if(getMap(tmp1,"rangeSpacing")==NULL){
    1116                       nc7 = xmlNewNode(ns_ows, BAD_CAST "Spacing");
    1117                       xmlAddChild(nc7,xmlNewText(BAD_CAST "1"));
    1118                       xmlAddChild(nc8,nc7);
    1119                     }
    1120                   }else{
    1121 
    1122                   tmp0=getMap(tmp1,"rangeMin");
    1123                   if(tmp0!=NULL){
    1124                     nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
    1125                     xmlAddChild(nc7,xmlNewText(BAD_CAST tmp0->value));
    1126                     xmlAddChild(nc8,nc7);
    1127                   }else{
    1128                     nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
    1129                     xmlAddChild(nc8,nc7);
    1130                   }
    1131                   tmp0=getMap(tmp1,"rangeMax");
    1132                   if(tmp0!=NULL){
    1133                     nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
    1134                     xmlAddChild(nc7,xmlNewText(BAD_CAST tmp0->value));
    1135                     xmlAddChild(nc8,nc7);
    1136                   }else{
    1137                     nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
    1138                     xmlAddChild(nc8,nc7);
    1139                   }
    1140                   tmp0=getMap(tmp1,"rangeSpacing");
    1141                   if(tmp0!=NULL){
    1142                     nc7 = xmlNewNode(ns_ows, BAD_CAST "Spacing");
    1143                     xmlAddChild(nc7,xmlNewText(BAD_CAST tmp0->value));
    1144                     xmlAddChild(nc8,nc7);
    1145                   }
    1146                   tmp0=getMap(tmp1,"rangeClosure");
    1147                   if(tmp0!=NULL){
    1148                     char *tmp="closed";
    1149                     if(strcasecmp(tmp0->value,"co")==0)
    1150                       tmp="closed-open";
    1151                     else
    1152                       if(strcasecmp(tmp0->value,"oc")==0)
    1153                         tmp="open-closed";
    1154                       else
    1155                         if(strcasecmp(tmp0->value,"o")==0)
    1156                           tmp="open";
    1157                     xmlNewNsProp(nc8,ns_ows,BAD_CAST "rangeClosure",BAD_CAST tmp);
    1158                   }else
    1159                     xmlNewNsProp(nc8,ns_ows,BAD_CAST "rangeClosure",BAD_CAST "closed");
    1160                   }
    1161                   if(_tmp0==NULL){
    1162                     xmlAddChild(nc6,nc8);
    1163                     _tmp0=e->supported;
    1164                     tmp1=_tmp0->content;
    1165                     goto doRange;
    1166                   }else{
    1167                     _tmp0=_tmp0->next;
    1168                     if(_tmp0!=NULL){
    1169                       xmlAddChild(nc6,nc8);
    1170                       tmp1=_tmp0->content;
    1171                       goto doRange;
    1172                     }
    1173                  
    1174                   }
    1175                   xmlAddChild(nc6,nc8);
    1176                   xmlAddChild(nc3,nc6);
    1177                   isAnyValue=-1;
     1093                }else{
     1094                nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
     1095                int nci=0;
     1096                for(nci=0;nci<strlen(pToken)-1;nci++){
     1097                  tmpStr[nci]=pToken[nci];
    11781098                }
    11791099              }
     1100              xmlAddChild(nc7,xmlNewText(BAD_CAST tmpStr));
     1101              free(tmpStr);
     1102              xmlAddChild(nc8,nc7);
     1103              nci0++;
     1104              pToken = strtok(NULL,",");
     1105            }               
     1106            if(getMap(tmp1,"rangeSpacing")==NULL){
     1107              nc7 = xmlNewNode(ns_ows, BAD_CAST "Spacing");
     1108              xmlAddChild(nc7,xmlNewText(BAD_CAST "1"));
     1109              xmlAddChild(nc8,nc7);
    11801110            }
    1181           tmp1=tmp1->next;
    1182           if(datatype!=2){
    1183             if(hasUOM==true){
    1184               xmlAddChild(nc4,nc5);
    1185               xmlAddChild(nc3,nc4);
     1111            free(orig);
     1112          }else{
     1113           
     1114            tmp0=getMap(tmp1,"rangeMin");
     1115            if(tmp0!=NULL){
     1116              nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
     1117              xmlAddChild(nc7,xmlNewText(BAD_CAST tmp0->value));
     1118              xmlAddChild(nc8,nc7);
     1119            }else{
     1120              nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
     1121              xmlAddChild(nc8,nc7);
    11861122            }
     1123            tmp0=getMap(tmp1,"rangeMax");
     1124            if(tmp0!=NULL){
     1125              nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
     1126              xmlAddChild(nc7,xmlNewText(BAD_CAST tmp0->value));
     1127              xmlAddChild(nc8,nc7);
     1128            }else{
     1129              nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
     1130              xmlAddChild(nc8,nc7);
     1131            }
     1132            tmp0=getMap(tmp1,"rangeSpacing");
     1133            if(tmp0!=NULL){
     1134              nc7 = xmlNewNode(ns_ows, BAD_CAST "Spacing");
     1135              xmlAddChild(nc7,xmlNewText(BAD_CAST tmp0->value));
     1136              xmlAddChild(nc8,nc7);
     1137            }
     1138            tmp0=getMap(tmp1,"rangeClosure");
     1139            if(tmp0!=NULL){
     1140              char *tmp="closed";
     1141              if(strcasecmp(tmp0->value,"co")==0)
     1142                tmp="closed-open";
     1143              else
     1144                if(strcasecmp(tmp0->value,"oc")==0)
     1145                  tmp="open-closed";
     1146                else
     1147                  if(strcasecmp(tmp0->value,"o")==0)
     1148                    tmp="open";
     1149              xmlNewNsProp(nc8,ns_ows,BAD_CAST "rangeClosure",BAD_CAST tmp);
     1150            }else
     1151              xmlNewNsProp(nc8,ns_ows,BAD_CAST "rangeClosure",BAD_CAST "closed");
     1152          }
     1153          if(_tmp0==NULL){
     1154            xmlAddChild(nc6,nc8);
     1155            _tmp0=e->supported;
     1156            tmp1=_tmp0->content;
     1157            goto doRange;
    11871158          }else{
    1188             xmlAddChild(nc3,nc5);
    1189           }
    1190           if(strncmp(type,"Input",5)==0){
    1191             if(datatype==1 && isAnyValue==1 && default1>0){
    1192               xmlAddChild(nc3,nc7);
     1159            _tmp0=_tmp0->next;
     1160            if(_tmp0!=NULL){
     1161              xmlAddChild(nc6,nc8);
     1162              tmp1=_tmp0->content;
     1163              goto doRange;
    11931164            }
    11941165          }
    1195          
    1196         }
    1197       if(strncmp(type,"Input",5)==0){
    1198         if(datatype==1 && isAnyValue==1 && avcnt==0){
    1199           xmlAddChild(nc3,xmlNewNode(ns_ows, BAD_CAST "AnyValue"));
    1200           hasDefault=true;
    1201           avcnt++;
    1202         }
    1203       }
     1166          xmlAddChild(nc6,nc8);
     1167          xmlAddChild(nc3,nc6);
     1168          isAnyValue=-1;
     1169        }
     1170       
     1171      }
     1172   
    12041173     
     1174    int avcnt=0;
     1175    int dcnt=0;
     1176    int oI=0;
     1177    for(oI=0;oI<13;oI++)
     1178      if((tmp1=getMap(_tmp->content,orderedFields[oI]))!=NULL){
     1179#ifdef DEBUG
     1180        printf("DATATYPE DEFAULT ? %s\n",tmp1->name);
     1181#endif
     1182        if(strcmp(tmp1->name,"asReference")!=0 &&
     1183           strncasecmp(tmp1->name,"DataType",8)!=0 &&
     1184           strcasecmp(tmp1->name,"extension")!=0 &&
     1185           strcasecmp(tmp1->name,"value")!=0 &&
     1186           strcasecmp(tmp1->name,"AllowedValues")!=0 &&
     1187           strncasecmp(tmp1->name,"range",5)!=0){
     1188          if(datatype!=1){
     1189            char *tmp2=zCapitalize1(tmp1->name);
     1190            nc9 = xmlNewNode(NULL, BAD_CAST tmp2);
     1191            free(tmp2);
     1192          }
     1193          else{
     1194            char *tmp2=zCapitalize(tmp1->name);
     1195            nc9 = xmlNewNode(ns_ows, BAD_CAST tmp2);
     1196            free(tmp2);
     1197          }
     1198          xmlAddChild(nc9,xmlNewText(BAD_CAST tmp1->value));
     1199          xmlAddChild(nc5,nc9);
     1200          if(strcasecmp(tmp1->name,"uom")==0)
     1201            hasUOM1=true;
     1202          hasUOM=true;
     1203        }else
     1204         
     1205          tmp1=tmp1->next;
     1206      }
     1207   
     1208   
     1209      if(datatype!=2){
     1210        if(hasUOM==true){
     1211          xmlAddChild(nc4,nc5);
     1212          xmlAddChild(nc3,nc4);
     1213        }else{
     1214          if(hasUOM1==false){
     1215            xmlFreeNode(nc5);
     1216            if(datatype==1)
     1217              xmlFreeNode(nc4);
     1218          }
     1219        }
     1220      }else{
     1221        xmlAddChild(nc3,nc5);
     1222      }
     1223     
     1224      if(datatype!=1 && default1<0){
     1225        xmlFreeNode(nc5);
     1226        if(datatype!=2)
     1227          xmlFreeNode(nc4);
     1228      }
     1229
    12051230      map* metadata=e->metadata;
    12061231      xmlNodePtr n;
     
    12091234
    12101235      while(metadata!=NULL){
    1211         nc6=xmlNewNode(ns_ows, BAD_CAST "MetaData");
     1236        nc6=xmlNewNode(ns_ows, BAD_CAST "Metadata");
    12121237        xmlNewNsProp(nc6,ns_xlink,BAD_CAST metadata->name,BAD_CAST metadata->value);
    12131238        xmlAddChild(nc2,nc6);
    12141239        metadata=metadata->next;
    12151240      }
     1241
    12161242    }
    12171243
    12181244    _tmp=e->supported;
    1219     if(_tmp==NULL && (getMap(e->defaults->content,"uom")!=NULL || datatype!=1))
     1245    if(_tmp==NULL && datatype!=1)
    12201246      _tmp=e->defaults;
    12211247
    12221248    int hasSupported=-1;
     1249
    12231250    while(_tmp!=NULL){
    12241251      if(hasSupported<0){
     
    12411268#endif
    12421269          if(strcmp(tmp1->name,"asReference")!=0 &&
     1270             strcmp(tmp1->name,"value")!=0 &&
    12431271             strcmp(tmp1->name,"DataType")!=0 &&
    12441272             strcasecmp(tmp1->name,"extension")!=0){
     
    12581286              while(tmps){
    12591287                xmlAddChild(nc6,xmlNewText(BAD_CAST tmps));
    1260                 xmlAddChild(nc5,nc6);
    12611288                tmps=strtok_r(NULL,",",&tmpv);
    12621289                if(tmps){
     
    12691296            else{
    12701297              xmlAddChild(nc6,xmlNewText(BAD_CAST tmp1->value));
    1271               xmlAddChild(nc5,nc6);
    12721298            }
     1299            xmlAddChild(nc5,nc6);
    12731300          }
    12741301          tmp1=tmp1->next;
    12751302        }
    12761303      if(hasSupported<=0){
    1277         if(datatype!=2){
     1304        if(datatype==0){
    12781305          xmlAddChild(nc4,nc5);
    12791306          xmlAddChild(nc3,nc4);
    1280         }else
    1281           xmlAddChild(nc3,nc5);
     1307        }else{
     1308          if(datatype!=1)
     1309            xmlAddChild(nc3,nc5);
     1310        }
    12821311        hasSupported=1;
    12831312      }
    12841313      else
    1285         if(datatype!=2){
     1314        if(datatype==0){
    12861315          xmlAddChild(nc4,nc5);
     1316          xmlAddChild(nc3,nc4);
    12871317        }
    12881318        else
    1289           xmlAddChild(nc3,nc5);
     1319          if(datatype!=1)
     1320            xmlAddChild(nc3,nc5);
     1321
    12901322      _tmp=_tmp->next;
    12911323    }
     1324
     1325    if(hasSupported==0){
     1326      if(datatype==0)
     1327        xmlFreeNode(nc4);
     1328      xmlFreeNode(nc5);
     1329    }
     1330
     1331    _tmp=e->defaults;
     1332    if(datatype==1 && hasUOM1==true){
     1333      xmlAddChild(nc4,nc5);
     1334      xmlAddChild(nc3,nc4);
     1335    }
     1336
     1337    if(datatype==1 &&
     1338       getMap(_tmp->content,"AllowedValues")==NULL &&
     1339       getMap(_tmp->content,"range")==NULL &&
     1340       getMap(_tmp->content,"rangeMin")==NULL &&
     1341       getMap(_tmp->content,"rangeMax")==NULL &&
     1342       getMap(_tmp->content,"rangeClosure")==NULL ){
     1343      tmp1=getMap(_tmp->content,"dataType");
     1344      if(tmp1!=NULL)
     1345        if(strcasecmp(tmp1->value,"boolean")==0){
     1346          nc6 = xmlNewNode(ns_ows, BAD_CAST "AllowedValues");
     1347          nc7 = xmlNewNode(ns_ows, BAD_CAST "Value");
     1348          xmlAddChild(nc7,xmlNewText(BAD_CAST "true"));
     1349          xmlAddChild(nc6,nc7);
     1350          nc7 = xmlNewNode(ns_ows, BAD_CAST "Value");
     1351          xmlAddChild(nc7,xmlNewText(BAD_CAST "false"));
     1352          xmlAddChild(nc6,nc7);
     1353          xmlAddChild(nc3,nc6);
     1354        }
     1355      xmlAddChild(nc3,xmlNewNode(ns_ows, BAD_CAST "AnyValue"));
     1356    }
     1357   
     1358    if((tmp1=getMap(_tmp->content,"value"))!=NULL){
     1359      nc7 = xmlNewNode(NULL, BAD_CAST "DefaultValue");
     1360      xmlAddChild(nc7,xmlNewText(BAD_CAST tmp1->value));
     1361      xmlAddChild(nc3,nc7);
     1362    }
     1363   
    12921364    xmlAddChild(nc2,nc3);
    1293    
    1294     if(datatype!=2 && hasUOM==true){
    1295       xmlAddChild(nc3,nc4);
    1296       xmlAddChild(nc2,nc3);
    1297     }/*else if(datatype!=2){
    1298       if(hasDefault!=true && strncmp(type,"Input",5)==0 && isAnyValue==1)
    1299         xmlAddChild(nc3,xmlNewNode(ns_ows, BAD_CAST "AnyValue"));
    1300         }*/
    13011365   
    13021366    xmlAddChild(nc1,nc2);
     
    15681632      freeMap(&errormap);
    15691633      free(errormap);
     1634      xmlFreeDoc(doc);
    15701635      xmlCleanupParser();
    15711636      zooXmlCleanupNs();
     
    18001865                               NULL,NULL, 0);
    18011866        testMap=getMap(m->content,"Reference");
    1802         loadRemoteFile(m,m->content,hInternet,testMap->value);
     1867        loadRemoteFile(&m,&m->content,hInternet,testMap->value);
    18031868        InternetCloseHandle(hInternet);
    18041869      }
     
    19972062  xmlCleanupParser();
    19982063  zooXmlCleanupNs();
    1999   setMapInMaps(m,"lenv","hasPrinted","true");
     2064  if(m!=NULL)
     2065    setMapInMaps(m,"lenv","hasPrinted","true");
    20002066}
    20012067
     
    27662832#endif
    27672833    FILE* fo=fopen(fname,"w+");
     2834    if(fo==NULL){
     2835      fprintf (stderr, "Failed to open %s for writting: %s\n",fname, strerror(errno));
     2836      return;
     2837    }
    27682838    fwrite(content,sizeof(char),length,fo);
    27692839    fclose(fo);
     
    28072877 * Try to load file from cache or download a remote file if not in cache
    28082878 */
    2809 int loadRemoteFile(maps* m,map* content,HINTERNET hInternet,char *url){
     2879int loadRemoteFile(maps** m,map** content,HINTERNET hInternet,char *url){
    28102880  HINTERNET res;
    28112881  char* fcontent;
    2812   char* cached=isInCache(m,url);
     2882  char* cached=isInCache(*m,url);
    28132883  char *mimeType=NULL;
    28142884  int fsize;
     
    28382908    fcontent=(char*)malloc((res.nDataLen+1)*sizeof(char));
    28392909    if(fcontent == NULL){
    2840       return errorException(m, _("Unable to allocate memory."), "InternalError",NULL);
     2910      return errorException(*m, _("Unable to allocate memory."), "InternalError",NULL);
    28412911    }
    28422912    size_t dwRead;
     
    28472917  }
    28482918  if(fsize==0){
    2849     return errorException(m, _("Unable to download the file."), "InternalError",NULL);
     2919    return errorException(*m, _("Unable to download the file."), "InternalError",NULL);
    28502920  }
    28512921
    28522922  if(mimeType!=NULL){
    2853     addToMap(content,"fmimeType",mimeType);
     2923    addToMap(*content,"fmimeType",mimeType);
    28542924  }
    28552925
     
    28652935  char ltmp1[256];
    28662936  sprintf(ltmp1,"%d",fsize);
    2867   addToMap(content,"size",ltmp1);
     2937  addToMap(*content,"size",ltmp1);
    28682938  if(cached==NULL)
    2869     addToCache(m,url,fcontent,mimeType,fsize);
     2939    addToCache(*m,url,fcontent,mimeType,fsize);
    28702940  else{
    28712941    free(fcontent);
     
    29653035}
    29663036
     3037
     3038int updateStatus( maps* conf, const int percentCompleted, const char* message ){
     3039  char tmp[4];
     3040  snprintf(tmp,4,"%d",percentCompleted);
     3041  setMapInMaps( conf, "lenv", "status", tmp );
     3042  setMapInMaps( conf, "lenv", "message", message);
     3043  return _updateStatus( conf );
     3044}
     3045
     3046char* getInputValue( maps* inputs, const char* parameterName, size_t* numberOfBytes){
     3047  map* res=getMapFromMaps(inputs,parameterName,"value");
     3048  if(res!=NULL){
     3049    map* size=getMapFromMaps(inputs,parameterName,"size");
     3050    if(size!=NULL){
     3051      *numberOfBytes=(size_t)atoi(size->value);
     3052      return res->value;
     3053    }else{
     3054      *numberOfBytes=strlen(res->value);
     3055      return res->value;
     3056    }
     3057  }
     3058  return NULL;
     3059}
     3060
     3061int  setOutputValue( maps* outputs, const char* parameterName, char* data, size_t numberOfBytes ){
     3062  if(numberOfBytes==-1){
     3063    setMapInMaps(outputs,parameterName,"value",data);
     3064  }else{
     3065    char size[1024];
     3066    map* tmp=getMapFromMaps(outputs,parameterName,"value");
     3067    free(tmp->value);
     3068    tmp->value=(char*) malloc((numberOfBytes+1)*sizeof(char));
     3069    memcpy(tmp->value,data,numberOfBytes);
     3070    sprintf(size,"%d",numberOfBytes);
     3071    setMapInMaps(outputs,parameterName,"size",size);
     3072  }
     3073  return 0;
     3074}
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