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