-
Notifications
You must be signed in to change notification settings - Fork 212
/
FileGenerator.cpp
71 lines (62 loc) · 2.51 KB
/
FileGenerator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*************************************************************************
* This program is free software; it is licensed under the terms of the *
* GNU General Public License v2 or later. See file LICENSE for details. *
*************************************************************************/
#include<yade/core/Omega.hpp>
#include<cstdlib>
#include<boost/date_time/posix_time/posix_time.hpp>
#include<yade/lib/pyutil/gil.hpp>
#include<yade/lib/serialization/ObjectIO.hpp>
#include"FileGenerator.hpp"
CREATE_LOGGER(FileGenerator);
bool FileGenerator::generate(std::string& msg){ throw invalid_argument("Calling abstract FileGenerator::generate() does not make sense."); }
bool FileGenerator::generateAndSave(const string& outputFileName, string& message)
{
bool status;
message="";
boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
try {
status=generate(message); // will modify message
}
catch(std::exception& e){
LOG_FATAL("Unhandled exception: "<<typeid(e).name()<<" : "<<e.what());
//abort(); // use abort, since we may want to inspect core
message = message + "Unhandled exception: " + typeid(e).name() + " : " + e.what();
return false;
}
// generation wasn't successful
if(status==false) return false;
else {
boost::posix_time::ptime now2 = boost::posix_time::second_clock::local_time();
boost::posix_time::time_duration generationTime = now2 - now; // generation time, without save time
try
{
yade::ObjectIO::save(outputFileName,"scene",scene);
}
catch(const std::runtime_error& e)
{
message+=std::string("File "+outputFileName+" cannot be saved: "+e.what());
return false;
}
boost::posix_time::ptime now3 = boost::posix_time::second_clock::local_time();
boost::posix_time::time_duration saveTime = now3 - now2; // save time
message=std::string("File "+outputFileName+" generated successfully."
+ "\ngeneration time: " + boost::posix_time::to_simple_string(generationTime)
+ "\nsave time: " + boost::posix_time::to_simple_string(saveTime)
+"\n\n")+message;
return true;
}
}
void FileGenerator::pyGenerate(const string& out){
string message;
bool ret=generateAndSave(out,message);
LOG_INFO((ret?"SUCCESS:\n":"FAILURE:\n")<<message);
if(ret==false) throw runtime_error(getClassName()+" reported error: "+message);
}
void FileGenerator::pyLoad(){
string xml(Omega::instance().tmpFilename()+".xml.bz2");
// LOG_DEBUG("Using temp file "<<xml);
pyGenerate(xml);
//this is ugly hack, yes...
pyRunString("yade.wrapper.Omega().load('"+xml+"')");
}