source: trunk/thirds/otb2zcfg/otb2zcfg.cxx @ 550

Last change on this file since 550 was 550, checked in by djay, 10 years ago

Add otb2zcfg and OTB applications support without observer by now. Fix issue with maxOccurs and multiple downloaded value for the same input.

  • Property svn:keywords set to Id
File size: 14.4 KB
Line 
1#include "otbWrapperApplicationRegistry.h"
2#include "otbWrapperApplication.h"
3#include "otbImage.h"
4#include <iostream> 
5
6using namespace otb::Wrapper;
7
8std::string ReplaceAll(std::string str, const std::string& from, const std::string& to) {
9    size_t start_pos = 0;
10    while((start_pos = str.find(from, start_pos)) != std::string::npos) {
11        str.replace(start_pos, from.length(), to);
12        start_pos += to.length(); // Handles case where 'to' is a substring of 'from'
13    }
14    return str;
15}
16
17void printDefaultOutput(){
18  std::cout << "  [Result]" << std::endl;
19  std::cout << "   Title = the result message" << std::endl;
20  std::cout << "   Abstract = the result message" << std::endl;
21  std::cout << "   <LiteralData>" << std::endl;
22  std::cout << "    dataType = string" << std::endl;
23  std::cout << "    <Default />" << std::endl;
24  std::cout << "   </LiteralData>" << std::endl;
25}
26
27void printAscii(){
28  std::cout << "    <Default>" << std::endl;
29  std::cout << "     mimeType = text/plain" << std::endl;
30  std::cout << "     encoding = ascii" << std::endl;
31  std::cout << "    </Default>" << std::endl;
32}
33
34void printXml(){
35  std::cout << "    <Default>" << std::endl;
36  std::cout << "     mimeType = text/xml" << std::endl;
37  std::cout << "     encoding = utf-8" << std::endl;
38  std::cout << "    </Default>" << std::endl;
39}
40
41void printGeoid(){
42  std::cout << "    <Default>" << std::endl;
43  std::cout << "     mimeType = application/octet-stream" << std::endl;
44  std::cout << "    </Default>" << std::endl;
45}
46
47void printCSV(){
48  std::cout << "    <Default>" << std::endl;
49  std::cout << "     mimeType = text/csv" << std::endl;
50  std::cout << "     encoding = utf-8" << std::endl;
51  std::cout << "    </Default>" << std::endl;
52}
53
54void printUnknown(){
55  std::cout << "    <Default>" << std::endl;
56  std::cout << "     mimeType = text/xml" << std::endl;
57  std::cout << "     encoding = utf-8" << std::endl;
58  std::cout << "    </Default>" << std::endl;
59  std::cout << "    <Supported>" << std::endl;
60  std::cout << "     mimeType = text/plain" << std::endl;
61  std::cout << "     encoding = utf-8" << std::endl;
62  std::cout << "    </Supported>" << std::endl;
63}
64
65void printImages(){
66  std::cout << "    <Default>" << std::endl;
67  std::cout << "     mimeType = image/tiff" << std::endl;
68  std::cout << "    </Default>" << std::endl;
69#if defined(OTB_USE_JPEG2000)
70  std::cout << "    <Supported>" << std::endl;
71  std::cout << "     mimeType = image/jp2" << std::endl;
72  std::cout << "    </Supported>" << std::endl;
73#endif
74  std::cout << "    <Supported>" << std::endl;
75  std::cout << "     mimeType = image/jpeg" << std::endl;
76  std::cout << "    </Supported>" << std::endl;
77  std::cout << "    <Supported>" << std::endl;
78  std::cout << "     mimeType = image/png" << std::endl;
79  std::cout << "    </Supported>" << std::endl;
80}
81
82void printVector(){
83  std::cout << "    <Default>" << std::endl;
84  std::cout << "     mimeType = text/xml" << std::endl;
85  std::cout << "     encoding = utf-8" << std::endl;
86  std::cout << "    </Default>" << std::endl;
87  std::cout << "    <Supported>" << std::endl;
88  std::cout << "     mimeType = application/vnd.google-earth.kml+xml" << std::endl;
89  std::cout << "     encoding = utf-8" << std::endl;
90  std::cout << "    </Supported>" << std::endl;
91  std::cout << "    <Supported>" << std::endl;
92  std::cout << "     mimeType = application/zip" << std::endl;
93  std::cout << "    </Supported>" << std::endl;
94}
95
96void printOutputImage(){
97  std::cout << "   <LiteralData>" << std::endl;
98  std::cout << "    dataType = string" << std::endl;
99  std::cout << "    <Default>" << std::endl;
100  std::cout << "     value = float" << std::endl;
101  std::cout << "     AllowedValues = uint8,uint16,int16n,int32,int32,float,double" << std::endl;
102  std::cout << "    </Default>" << std::endl;
103  std::cout << "   </LiteralData>" << std::endl;
104}
105
106void printOutputComplexImage(){
107  std::cout << "   <LiteralData>" << std::endl;
108  std::cout << "    dataType = string" << std::endl;
109  std::cout << "    <Default>" << std::endl;
110  std::cout << "     value = cfloat" << std::endl;
111  std::cout << "     AllowedValues = cfloat,cdouble" << std::endl;
112  std::cout << "    </Default>" << std::endl;
113  std::cout << "   </LiteralData>" << std::endl;
114}
115
116int main(int itkNotUsed(argc), char * itkNotUsed(argv)[]) 
117{ 
118  typedef otb::Image<unsigned short, 2> ImageType; 
119 
120  ImageType::Pointer image = ImageType::New(); 
121 
122  const char * ITK_AUTOLOAD_PATH = itksys::SystemTools::GetEnv("ITK_AUTOLOAD_PATH");
123  std::cerr << "ERROR: Module search path: " << (ITK_AUTOLOAD_PATH ? ITK_AUTOLOAD_PATH : "none (check ITK_AUTOLOAD_PATH)") << std::endl;
124
125  std::vector<std::string> list = ApplicationRegistry::GetAvailableApplications();
126  if (list.size() == 0)
127    std::cerr << "ERROR: Available modules : none." << std::endl;
128  else{
129    std::cerr << "ERROR: Available modules :" << std::endl;
130    for (std::vector<std::string>::const_iterator it = list.begin(); it != list.end(); ++it){
131      std::string filename= *it + ".zcfg";
132      std::ofstream out(filename);
133      std::streambuf *coutbuf = std::cout.rdbuf();
134      std::cout.rdbuf(out.rdbuf());
135
136      std::cerr << *it << std::endl;
137      std::cout << "[" << *it << "]" << std::endl;
138      Application::Pointer m_Application=ApplicationRegistry::CreateApplication(*it);
139      std::string s0 = m_Application->GetDescription();
140      s0=ReplaceAll(ReplaceAll(s0,std::string("\n"),std::string("")),std::string("\t"),std::string(""));
141      std::cout << " Title = " << s0 << std::endl;
142      s0 = m_Application->GetDocLongDescription();
143      s0=ReplaceAll(ReplaceAll(s0,std::string("\n"),std::string("")),std::string("\t"),std::string(""));
144      std::cout << " Abstract = " << s0 << std::endl;
145      const std::vector<std::string> appKeyList = m_Application->GetParametersKeys(true);
146      std::cout << " storeSupported = true"<< std::endl;
147      std::cout << " statusSupported = true" << std::endl;
148      std::cout << " serviceProvider = " << *it << std::endl;
149      std::cout << " serviceType = OTB" << std::endl;
150      std::cout << " <DataInputs>" << std::endl;
151      for (unsigned int i = 0; i < appKeyList.size(); i++){
152        const std::string paramKey(appKeyList[i]);
153        Parameter::Pointer param = m_Application->GetParameterByKey(paramKey);
154        ParameterType type = m_Application->GetParameterType(paramKey);
155        Role role = m_Application->GetParameterRole(paramKey);
156     
157        if(paramKey!="inxml" && paramKey!="outxml" && role==0 && type!=17 
158           && type!=ParameterType_OutputFilename && type!=ParameterType_OutputVectorData){
159          std::vector<std::string> values;
160          std::string s = m_Application->GetParameterDescription(paramKey);
161          s=ReplaceAll(ReplaceAll(ReplaceAll(s,std::string("\n"),std::string("")),std::string("\t"),std::string("")),std::string("<"),std::string("&lt;"));
162          std::cout << "  [" << paramKey << "]" << std::endl;
163          if(s.length()>0){
164            std::cout << "   Title = " << s << std::endl;
165            std::cout << "   Abstract = " << s << std::endl;
166          }else{
167            std::cout << "   Title = " << paramKey << std::endl;
168            std::cout << "   Abstract = " << paramKey << std::endl;
169          }
170          std::cout << "   minOccurs = " << m_Application->IsMandatory(paramKey) << std::endl;
171          /* Bounded and unbounded parameters */
172          if(type == ParameterType_StringList || type == ParameterType_InputImageList
173             || type == ParameterType_InputVectorDataList || type == ParameterType_InputFilenameList)
174            std::cout << "   maxOccurs = 1024" << std::endl;
175          else
176            std::cout << "   maxOccurs = 1" << std::endl;
177          std::replace( s.begin(), s.end(), '\n', ' ');
178         
179          if(type == ParameterType_StringList || type == ParameterType_String || type == ParameterType_Float
180             || type == ParameterType_Int || type == ParameterType_Choice || type == ParameterType_ListView
181             || type == ParameterType_RAM || type == ParameterType_Empty || type == ParameterType_Directory){
182            std::cout << "   <LiteralData>" << std::endl;
183            std::string lt;
184            if(type == ParameterType_Int || type == ParameterType_RAM)
185              lt="integer";
186            if(type == ParameterType_Float)
187              lt="float";
188            if(type == ParameterType_String || type == ParameterType_StringList
189               || type == ParameterType_Choice || type == ParameterType_Directory
190               || type == ParameterType_ListView)
191              lt="string";
192            if(type == ParameterType_Empty)
193              lt="boolean";
194            std::cout << "    dataType = " << lt << std::endl;
195            if(type == ParameterType_Choice || type == ParameterType_ListView){
196              const std::vector<std::string> nList = m_Application->GetChoiceNames(paramKey);
197              const std::vector<std::string> keysList = m_Application->GetChoiceKeys(paramKey);
198              if(keysList.size()==0){
199                std::cout << "    <Default />" << std::endl;
200              }
201              for (unsigned int j = 0; j < keysList.size(); j++){
202                const std::string key(keysList[j]);
203                if(j==0){
204                  std::cout << "    <Default>" << std::endl;
205                  if(m_Application->HasValue(paramKey))
206                    std::cout << "    value = " << m_Application->GetParameterAsString(paramKey) << std::endl;
207                  else
208                    std::cout << "    value = " << key << std::endl;
209                }
210                else{
211                  if(j==1){
212                    std::cout << "    AllowedValues = "+keysList[0]+",";
213                  }
214                  std::cout << keysList[j];
215                  if(j+1>=keysList.size()){
216                    std::cout << std::endl;
217                    std::cout << "    </Default>" << std::endl;
218                  }
219                  else
220                    std::cout << ",";
221                }
222              }
223            }
224            else{
225              if(type!=17 && m_Application->HasValue(paramKey)){
226                std::cout << "    <Default>" << std::endl;
227                std::cout << "     value = " << m_Application->GetParameterAsString(paramKey) << std::endl;
228                std::cout << "    </Default>" << std::endl;
229              }
230              else
231                std::cout << "    <Default />" << std::endl;
232            }
233            std::cout << "   </LiteralData>" << std::endl;
234          }
235          else{
236            if(type == ParameterType_OutputImage)
237              printOutputImage();
238            else{
239              if(type == ParameterType_ComplexOutputImage){
240                printOutputComplexImage();
241              }else{
242                std::cout << "   <ComplexData>" << std::endl;
243                if(type == ParameterType_InputImage || type == ParameterType_InputImageList || type == ParameterType_ComplexInputImage){
244                  printImages();
245                }
246                else
247                  if(type == ParameterType_InputVectorData || type == ParameterType_InputVectorDataList){
248                    printVector();
249                  }
250                  else
251                    if(type == ParameterType_InputFilename || type == ParameterType_OutputFilename){
252                     
253                      std::string geoid("geoid");
254                      if(paramKey.find(geoid)!= std::string::npos)
255                        printGeoid();
256                      else{
257                        std::string dtype("vector");
258                        std::string descr(m_Application->GetParameterDescription(paramKey));
259                        if(descr.find(dtype)!= std::string::npos)
260                          printVector();
261                        else{
262                          std::string dtype1("ASCII");
263                          if(descr.find(dtype1)!= std::string::npos)
264                            printAscii();
265                          else{
266                            std::string dtype2("XML");
267                            std::string dtype3("xml");
268                            if(descr.find(dtype2)!= std::string::npos || descr.find(dtype3)!= std::string::npos)
269                              printXml();
270                            else
271                              printImages();
272                          }
273                        }
274                      }
275                    }
276                std::cout << "   </ComplexData>" << std::endl;
277              }
278            }
279          }
280
281
282        }
283      }
284      std::cout << " <DataInputs>" << std::endl;
285      std::cout << " <DataOutputs>" << std::endl;
286      int hasOutput=-1;
287      for (unsigned int i = 0; i < appKeyList.size(); i++){
288        const std::string paramKey(appKeyList[i]);
289        std::vector<std::string> values;
290        Parameter::Pointer param = m_Application->GetParameterByKey(paramKey);
291        ParameterType type = m_Application->GetParameterType(paramKey);
292        Role role = m_Application->GetParameterRole(paramKey);
293       
294        if(paramKey!="inxml" && paramKey!="outxml" &&
295           ((type == ParameterType_OutputVectorData || type == ParameterType_OutputImage
296             || type == ParameterType_OutputImage || type == ParameterType_ComplexOutputImage
297             || type == ParameterType_OutputFilename) || role==1) && type != ParameterType_Group){
298          hasOutput=1;
299          std::vector<std::string> values;
300          Parameter::Pointer param = m_Application->GetParameterByKey(paramKey);
301          ParameterType type = m_Application->GetParameterType(paramKey);
302          Role role = m_Application->GetParameterRole(paramKey);
303          std::cout << "  [" << paramKey << "]" << std::endl;
304          std::string s=m_Application->GetParameterDescription(paramKey);
305          if(s.length()>0){
306            std::cout << "   Title = " << s << std::endl;
307            std::cout << "   Abstract = " << s << std::endl;
308          }else{
309            std::cout << "   Title = " << paramKey << std::endl;
310            std::cout << "   Abstract = " << paramKey << std::endl;
311          }
312
313          if(type == ParameterType_OutputImage || type == ParameterType_ComplexOutputImage){
314            std::cout << "   <ComplexData>" << std::endl;
315            printImages();
316            std::cout << "   </ComplexData>" << std::endl;
317          }
318          else
319            if(type == ParameterType_OutputVectorData || type == ParameterType_OutputImage){
320              std::cout << "   <ComplexData>" << std::endl;
321              if(type == ParameterType_OutputImage)
322                printImages();
323              else
324                printVector();
325              std::cout << "   </ComplexData>" << std::endl;
326            }
327            else
328              if(type == ParameterType_String || type == ParameterType_StringList
329                 || type == ParameterType_Float || type == ParameterType_Int){
330                std::cout << "   <LiteralData>" << std::endl;
331                std::string lt;
332                if(type == ParameterType_Int)
333                  lt="integer";
334                if(type == ParameterType_Float)
335                  lt="float";
336                if(type == ParameterType_String || type == ParameterType_StringList)
337                  lt="string";
338                std::cout << "    dataType = " << lt << std::endl;
339                std::cout << "    <Default />" << std::endl;
340                std::cout << "   </LiteralData>" << std::endl;
341              }
342              else
343                if(type == ParameterType_OutputFilename){
344                  std::cout << "   <ComplexData>" << std::endl;
345                  std::string descr(m_Application->GetParameterDescription(paramKey));
346                  std::string dtype("csv");
347                  std::string dtype1("CSV");
348                  if(descr.find(dtype)!= std::string::npos || descr.find(dtype1)!= std::string::npos)
349                    printCSV();
350                  else{
351                    std::string dtype2("text file");
352                    if(descr.find(dtype2)!= std::string::npos)
353                      printAscii();
354                    else{
355                      std::string dtype2("XML");
356                      std::string dtype3("xml");
357                      if(descr.find(dtype2)!= std::string::npos || descr.find(dtype3)!= std::string::npos)
358                        printXml();
359                      else{
360                        std::string dtype4("vector");
361                        std::string dtype5("Vector");
362                        if(descr.find(dtype4)!= std::string::npos || descr.find(dtype5)!= std::string::npos)
363                          printVector();
364                        else
365                          printUnknown();
366                      }
367                    }
368                  }
369                  std::cout << "   </ComplexData>" << std::endl;
370                }
371        }
372      }
373      if(hasOutput<0)
374        printDefaultOutput();
375      std::cout << " </DataOutputs>" << std::endl;
376      std::cout.rdbuf(coutbuf);
377    }
378  }
379 
380  return EXIT_SUCCESS; 
381}
382
Note: See TracBrowser for help on using the repository browser.

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