Salome HOME
Copyright update: 2016
[modules/yacs.git] / src / yacsloader / resume.cxx
1 // Copyright (C) 2006-2016  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "RuntimeSALOME.hxx"
21 #include "Proc.hxx"
22 #include "Exception.hxx"
23 #include "Executor.hxx"
24 #include "parsers.hxx"
25 #include "VisitorSaveState.hxx"
26 #include "LoadState.hxx"
27
28
29 #include <iostream>
30 #include <fstream>
31
32 using YACS::YACSLoader;
33 using namespace YACS::ENGINE;
34 using namespace std;
35
36
37 int
38 main (int argc, char* argv[])
39 {
40   if (argc != 3 && argc != 4)
41     {
42       cerr << "usage: " << argv[0] << " [--display=n] schema.xml state.xml" << endl;
43       return 1;
44     }
45   int display=0;
46   int argfile=1;
47   int argState=2;
48   if(argc == 4)
49     {
50       argfile=2;
51       argState=3;
52       if(std::string(argv[1]) == "--display=1") 
53         display=1;
54       else if(std::string(argv[1]) == "--display=2") 
55         display=2;
56       else if(std::string(argv[1]) == "--display=3") 
57         display=3;
58     }
59
60   RuntimeSALOME::setRuntime();
61
62   YACSLoader loader;
63   Executor executor;
64
65   try
66     {
67       Proc* p=loader.load(argv[argfile]);
68       p->init();
69       p->exUpdateState();
70       stateParser* rootParser = new stateParser();
71       stateLoader myStateLoader(rootParser, p);
72       myStateLoader.parse(argv[argState]);
73
74       std::ofstream f("toto");
75       p->writeDot(f);
76       f.close();
77       cerr << "+++++++++++++++++++ start calculation +++++++++++++++++++" << endl;
78       executor.RunW(p, display, false);
79       cerr << "+++++++++++++++++++  end calculation  +++++++++++++++++++" << endl;
80       std::ofstream g("titi");
81       p->writeDot(g);
82       g.close();
83       YACS::ENGINE::VisitorSaveState vst(p);
84       vst.openFileDump("dumpState.xml");
85       p->accept(&vst);
86       vst.closeFileDump();
87       delete p;
88       YACS::ENGINE::getRuntime()->fini();
89       return 0;
90     }
91   catch (YACS::Exception& e)
92     {
93       cerr << "Caught a YACS exception" << endl;
94       cerr << e.what() << endl;
95       YACS::ENGINE::getRuntime()->fini();
96       return 1;
97     }
98   catch (const std::ios_base::failure&)
99     {
100       cerr << "Caught an io failure exception" << endl;
101       return 1;
102     }
103   catch(CORBA::SystemException& ex) 
104     {
105       cerr << "Caught a CORBA::SystemException." ;
106       CORBA::Any tmp;
107       tmp <<= ex;
108       CORBA::TypeCode_var tc = tmp.type();
109       const char *p = tc->name();
110       if ( *p != '\0' ) 
111         cerr <<p;
112       else  
113         cerr  << tc->id();
114       cerr << endl;
115       return 1;
116     }
117   catch(omniORB::fatalException& fe) 
118     {
119       cerr << "Caught omniORB::fatalException:" << endl;
120       cerr << "  file: " << fe.file() << endl;
121       cerr << "  line: " << fe.line() << endl;
122       cerr << "  mesg: " << fe.errmsg() << endl;
123       return 1;
124     }
125   catch(...) 
126     {
127       cerr << "Caught unknown exception." << endl;
128       return 1;
129     }
130 }
131