1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License:  See top level LICENSE.txt file.
5 //
6 // Author:  Garrett Potts
7 //
8 //*******************************************************************
9 //  $Id: igen.cpp 13025 2008-06-13 17:06:30Z sbortman $
10 
11 
12 
13 #include <ossim/base/ossimArgumentParser.h>
14 #include <ossim/base/ossimApplicationUsage.h>
15 #include <ossim/base/ossimException.h>
16 #include <ossim/base/ossimKeywordlist.h>
17 #include <ossim/base/ossimNotify.h>
18 #include <ossim/base/ossimRefPtr.h>
19 #include <ossim/base/ossimTrace.h>
20 #include <ossim/init/ossimInit.h>
21 #include <ossim/parallel/ossimIgen.h>
22 #include <ossim/parallel/ossimMpi.h>
23 #include <iostream>
24 #include <string>
25 using namespace std;
26 
27 static ossimTrace traceDebug("igen:debug");
28 
main(int argc,char * argv[])29 int main(int argc, char* argv[])
30 {
31    std::string tempString;
32    ossimArgumentParser::ossimParameter stringParam(tempString);
33    ossimArgumentParser argumentParser(&argc, argv);
34    ossimInit::instance()->addOptions(argumentParser);
35    ossimInit::instance()->initialize(argumentParser);
36 
37    if(traceDebug())
38    {
39       ossimNotify(ossimNotifyLevel_DEBUG) << "entered main" << std::endl;
40    }
41 
42    argumentParser.getApplicationUsage()->setApplicationName(argumentParser.getApplicationName());
43    argumentParser.getApplicationUsage()->setDescription(argumentParser.getApplicationName()+" takes a spec file as input and produces a product");
44    argumentParser.getApplicationUsage()->setCommandLineUsage(argumentParser.getApplicationName()+" [options] <spec_file>");
45    argumentParser.getApplicationUsage()->addCommandLineOption("-t or --thumbnail", "thumbnail resolution");
46    argumentParser.getApplicationUsage()->addCommandLineOption("-h or --help","Display this information");
47 
48 
49    if(argumentParser.read("-h") ||
50       argumentParser.read("--help")||
51       argumentParser.argc() <2)
52    {
53       argumentParser.getApplicationUsage()->write(std::cout);
54       exit(0);
55    }
56 
57    ossimRefPtr<ossimIgen> igen = new ossimIgen;
58    double start=0, stop=0;
59 
60    ossimMpi::instance()->initialize(&argc, &argv);
61    start = ossimMpi::instance()->getTime();
62 
63    ossimKeywordlist kwl;
64    kwl.setExpandEnvVarsFlag(true);
65 
66    while(argumentParser.read("-t", stringParam)   ||
67          argumentParser.read("--thumbnail", stringParam));
68 
69    if(ossimMpi::instance()->getRank() > 0)
70    {
71       // since this is not the master process
72       // then it will set the keyword list form the master
73       // so set this to empty
74       //
75       igen->initialize(ossimKeywordlist());
76    }
77    else if(argumentParser.argc() > 1)
78    {
79       if(kwl.addFile(argumentParser.argv()[1]))
80       {
81          if(tempString != "")
82          {
83             kwl.add("igen.thumbnail",
84                     "true",
85                     true);
86             kwl.add("igen.thumbnail_res",
87                     tempString.c_str(),
88                     true);
89          }
90          else
91          {
92             kwl.add("igen.thumbnail",
93                     "false",
94                     true);
95          }
96          kwl.add("igen.thumbnail_res",
97                  tempString.c_str(),
98                  true);
99 
100          igen->initialize(kwl);
101       }
102    }
103 
104    try // Can throw exception:
105    {
106       igen->outputProduct();
107    }
108    catch(const ossimException& e)
109    {
110       ossimNotify(ossimNotifyLevel_FATAL)
111          << "ossim-igen caught exception:\n"
112          << e.what()
113          << std::endl;
114    }
115 
116    if(ossimMpi::instance()->getRank() == 0)
117    {
118       stop = ossimMpi::instance()->getTime();
119       ossimNotify(ossimNotifyLevel_NOTICE)
120          << "Time elapsed: " << (stop-start)
121          << std::endl;
122    }
123 
124    ossimMpi::instance()->finalize();
125 
126    return 0;
127 }
128