source: trunk/thirds/saga2zcfg/saga2zcfg.c @ 637

Last change on this file since 637 was 637, checked in by djay, 9 years ago

Fixes in zcfg generator and fixes to build correctly on GNU/Linux.

  • Property svn:keywords set to Id
File size: 13.4 KB
RevLine 
[634]1#include <locale.h>
2
3#include <wx/app.h>
4#include <wx/utils.h>
5
6#include <api_core.h>
7#include <module_library.h>
8
9int Callback(TSG_UI_Callback_ID ID, CSG_UI_Parameter &Param_1, CSG_UI_Parameter &Param_2){
10  return( 1 );
11}
12
13TSG_PFNC_UI_Callback Get_Callback(void){
14  return( &Callback );
15}
16
17const char* cleanAbstract(CSG_String abstract){
18  char* tmp=strdup(abstract.b_str());
[637]19  CSG_String val=CSG_String(" ")+tmp;
[634]20  if(val.Contains("¸")){
21    val.Replace("¸"," ");
22  }
23  if(val.Contains("\n")){
24    val.Replace("\n","<br/>");
25  }
[637]26  if(val.Contains("\r")){
27    val.Replace("\r","");
28  }
[634]29  if(val.Contains("<")){
30    val.Replace("<","&lt;");
31  }
32  if(val.Contains(">")){
33    val.Replace(">","&gt;");
34    fprintf(stderr,"%s\n",val.b_str());
35  }
36  free(tmp);
37  fprintf(stderr,"%s\n",val.b_str());
38  return val.b_str();
39}
40
41void printBasicMetadata(FILE* stdout,CSG_Parameter* param,bool out=false,bool range=false,bool min=true,bool tin=false,char* tname=NULL,char* ttitle=NULL){
42  fprintf(stdout," [%s]\n",(CSG_String(param->Get_Identifier())+(range?(min?"_MIN":"_MAX"):(tin?CSG_String("_")+tname:""))).b_str());
43  fprintf(stdout,"  Title = %s\n",(CSG_String(param->Get_Name())+(range?(min?" (min value)":" (max value)"):(tin&&ttitle!=NULL?ttitle:""))).b_str());
44  if(CSG_String(param->Get_Description()).is_Empty())
45    fprintf(stdout,"  Abstract = %s\n",CSG_String(param->Get_Name()).b_str());
46  else{
[637]47    fprintf(stdout,"  Abstract = %s\n",cleanAbstract(CSG_String(param->Get_Description())));
[634]48  }
49  if(!out){
50    if(param->is_Option() || param->is_Optional()){
51      fprintf(stdout,"  minOccurs = 0\n");
52      if(param->is_Option())
53        fprintf(stdout,"  maxOccurs = 1\n");
54      else{
55        if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("_list")))
56          fprintf(stdout,"  maxOccurs = 1024\n");
57        else
58          fprintf(stdout,"  maxOccurs = 1\n");
59      }
60    }else{
61      if(param->is_Input())
62        fprintf(stdout,"  minOccurs = 1\n");
63      if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("_list")))
64        fprintf(stdout,"  maxOccurs = 1024\n");
65      else
66        fprintf(stdout,"  maxOccurs = 1\n");
67    }
68  }
69  if(range){
70   
71  }
72}
73
74void printGrids(FILE* stdout){
75  fprintf(stdout,"  <ComplexData>\n");
76  fprintf(stdout,"   <Default>\n");
77  fprintf(stdout,"    mimeType = image/tiff\n");
78  fprintf(stdout,"   </Default>\n");
79  fprintf(stdout,"   <Supported>\n");
80  fprintf(stdout,"    mimeType = application/x-ogc-envi\n");
81  fprintf(stdout,"   </Supported>\n");
82  fprintf(stdout,"   <Supported>\n");
83  fprintf(stdout,"    mimeType = application/x-ogc-aaigrid\n");
84  fprintf(stdout,"   </Supported>\n");
85  fprintf(stdout,"  </ComplexData>\n");
86}
87
88void printShapes(FILE* stdout){
89  fprintf(stdout,"  <ComplexData>\n");
90  fprintf(stdout,"   <Default>\n");
91  fprintf(stdout,"    mimeType = text/xml\n");
92  fprintf(stdout,"    encoding = utf-8\n");
93  fprintf(stdout,"   </Default>\n");
94  fprintf(stdout,"   <Supported>\n");
95  fprintf(stdout,"    mimeType = application/vnd.google-earth.kml+xml\n");
96  fprintf(stdout,"   </Supported>\n");
97  fprintf(stdout,"   <Supported>\n");
98  fprintf(stdout,"    mimeType = application/json\n");
99  fprintf(stdout,"   </Supported>\n");
100  fprintf(stdout,"  </ComplexData>\n");
101}
102
103void printTables(FILE* stdout){
104  fprintf(stdout,"  <ComplexData>\n");
105  fprintf(stdout,"   <Default>\n");
106  fprintf(stdout,"    mimeType = text/csv\n");
107  fprintf(stdout,"    encoding = utf-8\n");
108  fprintf(stdout,"   </Default>\n");
109  fprintf(stdout,"   <Supported>\n");
110  fprintf(stdout,"    mimeType = text/csv\n");
111  fprintf(stdout,"    encoding = base64\n");
112  fprintf(stdout,"   </Supported>\n");
113  fprintf(stdout,"  </ComplexData>\n");
114}
115
116void printPoints(FILE* stdout){
117  fprintf(stdout,"  <ComplexData>\n");
118  fprintf(stdout,"   <Default>\n");
119  fprintf(stdout,"    mimeType = application/x-ogc-lasf\n");
120  fprintf(stdout,"    extension = las\n");
121  fprintf(stdout,"   </Default>\n");
122  fprintf(stdout,"  </ComplexData>\n");
123}
124
125int main(int argc, char *argv[]) {
126  if( !wxInitialize() ){
127    fprintf(stderr,"initialisation failed");
128    return -1;
129  }
130  setlocale(LC_NUMERIC, "C");
131  static bool g_bShow_Messages = false;
132  SG_Set_UI_Callback(Get_Callback());
133  int n = SG_Get_Module_Library_Manager().Add_Directory(wxT(MODULE_LIBRARY_PATH),false);
134  if( SG_Get_Module_Library_Manager().Get_Count() <= 0 ){
135    fprintf(stderr,"could not load any tool library");
136    return -2;
137  }
138
139  for(int i=0;i<SG_Get_Module_Library_Manager().Get_Count();i++){
140   
141    CSG_Module_Library * library=SG_Get_Module_Library_Manager().Get_Library(i);
142    int lc=library->Get_Count();
143    if(!library->Get_Library_Name().Contains("io_")) {
144
145      for(int j=0;j<lc;j++){
146        CSG_Module * module=library->Get_Module(j);
147        if(module!=NULL && !module->needs_GUI() /*&& !module->is_Interactive()*/ ){
148
149          mkdir(library->Get_Library_Name().b_str(),0755);
[637]150          fprintf(stderr,"%s %s \n",library->Get_Library_Name().b_str(),CSG_String(module->Get_ID()).b_str());
[634]151          FILE *stdout1=fopen((library->Get_Library_Name()+"/"+module->Get_ID()+".zcfg").b_str(),"w+");
152          fprintf(stdout1,"[%d]\n",j);
153          fprintf(stdout1," Title = %s\n",module->Get_Name().b_str());
[637]154          if(CSG_String(module->Get_Description()).is_Empty() ||
155             module->Get_Description().Length()<module->Get_Name().Length() )
[634]156            fprintf(stdout1," Abstract = %s\n",module->Get_Name().b_str());
[637]157          else{
158            const char *tmp=cleanAbstract(module->Get_Description());
159            if(tmp==NULL || strlen(tmp)<7 ){
160              fprintf(stdout1," Abstract = %s\n",module->Get_Name().b_str());
161            }
162            else{
163              fprintf(stdout1," Abstract = %s\n",tmp);
164            }
165          }
[634]166          fprintf(stdout1," storeSupported = true\n");
167          fprintf(stdout1," statusSupported = true\n");
168          fprintf(stdout1," serviceType = SAGA\n");
169          fprintf(stdout1," serviceProvider = %s\n",library->Get_Library_Name().b_str());
170          CSG_Parameters * params=module->Get_Parameters();
171          int pc=params->Get_Count();
172
173          fprintf(stdout1," <DataInputs>\n");
174          for(int k=0;k<pc;k++){
175            CSG_Parameter * param=params->Get_Parameter(k);
176         
177            // Node should be used for defining Complex ComplexData
178            if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("color"))){
179             
180            }
181            else if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("range"),true)){
182
183              param->Restore_Default();
184
185              printBasicMetadata(stdout1,param,false,true,true);
186              fprintf(stdout1,"  <LiteralData>\n");
187              fprintf(stdout1,"   dataType = float\n");
188              CSG_Parameter_Range *range=param->asRange();
189              fprintf(stdout1,"   <Default>\n");
190              fprintf(stdout1,"    value = %f\n",((CSG_Parameter_Range*)param->Get_Data())->Get_LoVal());
191              fprintf(stdout1,"   </Default>\n");
192              fprintf(stdout1,"  </LiteralData>\n");
193
194              printBasicMetadata(stdout1,param,false,true,false);
195              fprintf(stdout1,"  <LiteralData>\n");
196              fprintf(stdout1,"   dataType = float\n");
197              fprintf(stdout1,"   <Default>\n");
198              fprintf(stdout1,"    value = %f\n",((CSG_Parameter_Range*)param->Get_Data())->Get_HiVal());
199              fprintf(stdout1,"   </Default>\n");
200              fprintf(stdout1,"  </LiteralData>\n");
201
202            }
203            else if(param!=NULL && !param->is_Output() 
204                    && 
205                    !CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("parameters"),true)
206                    && 
207                    !CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("grid_system"),true)
208                    && 
209                    !CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("node"),true)){
210           
211              printBasicMetadata(stdout1,param);
212
213              if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("file"),true)){
214                if(CSG_String(param->Get_Description()).Contains(CSG_String("HTML"))){
215                  fprintf(stdout1,"  <ComplexData>\n");       
216                  fprintf(stdout1,"   <Default>\n");
217                  fprintf(stdout1,"    mimeType = text/html\n");
218                  fprintf(stdout1,"    encoding = utf-8\n");
219                  fprintf(stdout1,"   </Default>\n");
220                  fprintf(stdout1,"  <ComplexData>\n");
221                }
222                else{
223                  fprintf(stdout1,"  <ComplexData>\n");       
224                  fprintf(stdout1,"   <Default>\n");
225                  if(CSG_String(param->Get_Description()).Contains(CSG_String("HTML"))){
226                    fprintf(stdout1,"    mimeType = text/html\n");
227                  }else
228                    if(CSG_String(param->Get_Description()).Contains(CSG_String("SVG"))){
229                      fprintf(stdout1,"    mimeType = image/svg+xml\n");
230                    }else
231                      fprintf(stdout1,"    mimeType = text/plain\n");
232                  if(CSG_String(param->Get_Description()).Contains(CSG_String("ASCII"))){
233                    fprintf(stdout1,"    encoding = ascii\n");
234                  }else
235                    fprintf(stdout1,"    encoding = utf-8\n");
236                  fprintf(stdout1,"   </Default>\n");
237                  fprintf(stdout1,"  </ComplexData>\n");
238                }
239              }
240              if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("shapes")) ||
241                 CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("tin")) ){
242                printShapes(stdout1);
243              }
244              if(CSG_String(param->Get_Type_Identifier()).Contains("points")){
245                printPoints(stdout1);
246              }
247              if(CSG_String(param->Get_Type_Identifier()).Contains("grid") ||
248                 CSG_String(param->Get_Type_Identifier()).Contains("data_")){
249                printGrids(stdout1);
250              }
251              if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("table"))){
252                printTables(stdout1);
253              }
254              if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("text"))){
255                fprintf(stdout1,"  <LiteralData>\n");
256                fprintf(stdout1,"   dataType = string\n");
257                fprintf(stdout1,"   <Default>\n");
258                if( !param->Get_Data()->Get_Default().is_Empty() ){
259                  fprintf(stdout1,"    value = %s\n",param->Get_Data()->Get_Default().b_str());
260                }
261                fprintf(stdout1,"   </Default>\n");
262                fprintf(stdout1,"  </LiteralData>\n");
263              }
264              if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("double"),true)
265                 || 
266                 CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("degree"),true)
267                 || 
268                 CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("integer"),true)){
269                fprintf(stdout1,"  <LiteralData>\n");
270                if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("double"),true) || 
271                 CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("degree"),true))
272                  fprintf(stdout1,"   dataType = float\n");
273                else
274                  fprintf(stdout1,"   dataType = integer\n");
275
276                fprintf(stdout1,"   <Default>\n");
277                if( !param->Get_Data()->Get_Default().is_Empty() ){
278                  fprintf(stdout1,"    value = %s\n",param->Get_Data()->Get_Default().b_str());
279                }
280                if(param->asValue()->has_Minimum() && param->asValue()->has_Maximum()){
281                  fprintf(stdout1,"    rangeMin = %f\n",param->asValue()->Get_Minimum());
282                  fprintf(stdout1,"    rangeMax = %f\n",param->asValue()->Get_Maximum());
283                  fprintf(stdout1,"    rangeClosure = c\n");
284                }
285                fprintf(stdout1,"   </Default>\n");
286                fprintf(stdout1,"  </LiteralData>\n");
287              }
288              if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("boolean"),true)){
289                fprintf(stdout1,"  <LiteralData>\n");
290                fprintf(stdout1,"   dataType = bool\n");
291                fprintf(stdout1,"   <Default>\n");
292                if( !param->Get_Data()->Get_Default().is_Empty() ){
293                  fprintf(stdout1,"    value = %s\n",(param->Get_Data()->Get_Default().Contains("0")?"false":"true"));
294                }
295                fprintf(stdout1,"   </Default>\n");
296                fprintf(stdout1,"  </LiteralData>\n"); 
297              }
298              if(CSG_String(param->Get_Type_Identifier()).is_Same_As(CSG_String("choice"),true)){
299                CSG_Parameter_Choice* choice=param->asChoice();
300                if(choice!=NULL){
301                  fprintf(stdout1,"  <LiteralData>\n");
302                  fprintf(stdout1,"   dataType = string\n");
303                  fprintf(stdout1,"   AllowedValues = ");
304                  int clen=choice->Get_Count();
305                  if(clen>0){
306                    for(int l=0;l<clen;l++){
307                      //fprintf(stdout1,"%d",l);
[637]308                      fprintf(stdout1,"%s",(CSG_String(choice->Get_Item(l))).b_str());
[634]309                      if(l+1<clen)
310                        fprintf(stdout1,",");
311                    }
312                    fprintf(stdout1,"\n");
313                  }
314                  fprintf(stdout1,"   <Default>\n");
315                  if( !param->Get_Data()->Get_Default().is_Empty() ){
[637]316                    fprintf(stdout1,"    value = %s\n",CSG_String(choice->Get_Item(atoi(param->Get_Data()->Get_Default()))).b_str());
[634]317                  }
318                  fprintf(stdout1,"   </Default>\n");
319                  fprintf(stdout1,"  </LiteralData>\n");
320                }
321              }
322            }
323          }
324          fprintf(stdout1," </DataInputs>\n");
325          fprintf(stdout1," <DataOutputs>\n");
326
327          bool hasOutput=false;
328
329          for(int k=0;k<pc;k++){
330            CSG_Parameter * param=params->Get_Parameter(k);
331            if(param!=NULL && param->is_Output()){
332              hasOutput=true;
333              if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("tin"))){
334                char* tinOut[5]={
335                  (char*)"POINTS",
336                  (char*)"CENTER",
337                  (char*)"EDGES",
338                  (char*)"TRIANGLES",
339                  (char*)"POLYGONS"
340                };
341                for(int l=0;l<5;l++){
342                  char *ttitle=(char*)malloc((strlen(tinOut[l])+8)*sizeof(char));
343                  sprintf(ttitle,"%s Shapes",tinOut[l]);
344                  printBasicMetadata(stdout1,param,true,false,true,true,tinOut[l],ttitle);
345                  printShapes(stdout1);
346                }
347              }
348              else {
349                printBasicMetadata(stdout1,param,true);
350
351                if(CSG_String(param->Get_Type_Identifier()).Contains("points")){
352                  printPoints(stdout1);
353                }
354                if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("shapes"))){
355                  printShapes(stdout1);
356                }
357                if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("grid")) ||
358                   CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("data_object"))){
359                  printGrids(stdout1);
360                }
361                if(CSG_String(param->Get_Type_Identifier()).Contains(CSG_String("table"))){
362                  printTables(stdout1);
363                }
364
365              }
366            }
367          }
368          fprintf(stdout1,"</DataOutputs>\n");
369          fclose(stdout1);
370          if(!hasOutput)
371            unlink((library->Get_Library_Name()+"/"+module->Get_ID()+".zcfg").b_str());
372        }
373      }
374    }
375  }
376  wxUninitialize();
377
378  return 0;
379}
Note: See TracBrowser for help on using the repository browser.

Search

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