diff --git a/src/ToolChain/ToolChain.cpp b/src/ToolChain/ToolChain.cpp index 8516800..24a3c1a 100644 --- a/src/ToolChain/ToolChain.cpp +++ b/src/ToolChain/ToolChain.cpp @@ -3,7 +3,7 @@ using namespace ToolFramework; ToolChain::ToolChain(std::string configfile, DataModel* data_model, int argc, char* argv[]){ - + m_data=reinterpret_cast(data_model); if(!m_data->vars.Initialise(configfile)){ @@ -14,7 +14,7 @@ ToolChain::ToolChain(std::string configfile, DataModel* data_model, int argc, c if(!m_data->vars.Get("verbose",m_verbose)) m_verbose=9; if(!m_data->vars.Get("error_level",m_errorlevel)) m_errorlevel=2; if(!m_data->vars.Get("attempt_recover",m_recover)) m_recover=false; - + if(!m_data->vars.Get("log_interactive",m_log_interactive)) m_log_interactive=true; if(!m_data->vars.Get("log_local",m_log_local)) m_log_local=false; if(!m_data->vars.Get("log_split_files",m_log_split_files)) m_log_split_files=false; @@ -26,10 +26,10 @@ ToolChain::ToolChain(std::string configfile, DataModel* data_model, int argc, c tmp<vars.Get("Inline",m_inline)) m_inline=1; - if(!m_data->vars.Get("Interactive",m_interactive)) m_interactive=false; + if(!m_data->vars.Get("Interactive",m_interactive)) m_interactive=false; m_data->vars.Set("argc",argc); @@ -40,20 +40,20 @@ ToolChain::ToolChain(std::string configfile, DataModel* data_model, int argc, c m_data->vars.Set(tmp.str(),key); } -#ifdef DEBUG - m_data->vars.Print(); -#endif +#ifdef DEBUG + m_data->vars.Print(); +#endif Init(); - + std::string toolsfile=""; m_data->vars.Get("Tools_File",toolsfile); - + if(!LoadTools(toolsfile)) exit(1); - - if(m_inline!=0) Inline(); - else if(m_interactive) Interactive(); - + + if(m_inline!=0) Inline(); + else if(m_interactive) Interactive(); + } @@ -61,26 +61,26 @@ ToolChain::ToolChain(int verbose, int errorlevel, bool log_interactive, bool log m_verbose=verbose; m_errorlevel=errorlevel; - - m_log_interactive=log_interactive; + + m_log_interactive=log_interactive; m_log_local=log_local; m_log_split_files=log_split_files; m_log_local_path=log_local_path; - + if(in_data_model==0) m_data=new DataModelBase; - else m_data=reinterpret_cast(in_data_model); // need to set a flag that you dont own the data model for sue during deletion. (check this for other constructor roo. - - Init(); //need to check if loging already made incase passing a datamodel for subtoolcahin - + else m_data=reinterpret_cast(in_data_model); // need to set a flag that you don't own the data model for use during deletion. (check this for other constructor too). + + Init(); //need to check if logging already made in case passing a datamodel for subtoolcahin + } void ToolChain::Init(){ - + m_log=0; - + m_log= new Logging(m_log_interactive, m_log_local, m_log_local_path, m_log_split_files); - - if(!m_data->Log) m_data->Log=m_log; + + if(!m_data->Log) m_data->Log=m_log; execounter=0; Initialised=false; @@ -88,7 +88,7 @@ void ToolChain::Init(){ paused=false; *m_log<Initialise(m_configfiles.at(i), *(reinterpret_cast(m_data)))) *m_log<1) exit(1); - } - -#ifndef DEBUG - } +#ifndef DEBUG + try{ +#endif + + if(m_tools.at(i)->Initialise(m_configfiles.at(i), *(reinterpret_cast(m_data)))) *m_log<1) exit(1); + } + +#ifndef DEBUG + } catch(std::exception& e){ *m_log<0) exit(1); + *m_log<0) exit(1); } #endif } - + *m_log<vars.Set("Skip",skip); - + if(m_inline) *m_log<vars.Get("Skip",skip); - if(skip){ - skip=false; - m_data->vars.Set("Skip",skip); - *m_log<vars.Get("Skip",skip); + if(skip){ + skip=false; + m_data->vars.Set("Skip",skip); + *m_log<Execute()) *m_log<1){ - if(m_recover){ - m_errorlevel=0; - Finalise(); - } - exit(1); - } - } - + + if(m_tools.at(i)->Execute()) *m_log<1){ + if(m_recover){ + m_errorlevel=0; + Finalise(); + } + exit(1); + } + } + #ifndef DEBUG - } - - catch(std::exception& e){ - *m_log<0){ - if(m_recover){ - m_errorlevel=0; - Finalise(); - } - exit(1); - } - } -#endif - + } + + catch(std::exception& e){ + *m_log<0){ + if(m_recover){ + m_errorlevel=0; + Finalise(); + } + exit(1); + } + } +#endif + } - + *m_log<Finalise()) *m_log<1)exit(1); - } - -#ifndef DEBUG + + if(m_tools.at(i)->Finalise()) *m_log<1)exit(1); + } + +#ifndef DEBUG } catch(std::exception& e){ - *m_log<0)exit(1); + *m_log<0)exit(1); } #endif - + } - + *m_log<0){ if (line.at(0)=='#')continue; - std::string name; - std::string tool; - std::string conf; - std::stringstream stream(line); - + std::string name; + std::string tool; + std::string conf; + std::stringstream stream(line); + if(stream>>name>>tool>>conf){ - if(!Add(name,Factory(tool),conf)) return false; - } - } + if(!Add(name,Factory(tool),conf)) return false; + } + } } - file.close(); + file.close(); return true; } else{ @@ -350,11 +350,11 @@ bool ToolChain::LoadTools(std::string filename){ return false; } - + } void ToolChain::Inline(){ - + if(m_inline==-1){ bool StopLoop=false; m_data->vars.Set("StopLoop",StopLoop); @@ -372,8 +372,8 @@ void ToolChain::Inline(){ Execute(m_inline); Finalise(); } - - + + } @@ -381,29 +381,29 @@ void ToolChain::Inline(){ void ToolChain::Interactive(){ exeloop=false; - + ToolChainargs* args=new ToolChainargs; - + args->msgflag=&msgflag; args->command=""; - + pthread_create (&thread[0], NULL, ToolChain::InteractiveThread, args); - - bool running=true; + + bool running=true; msgflag=false; - + while (running){ - if(msgflag){ - + if(msgflag){ + printf("%s \n\n",(ExecuteCommand(args->command)).c_str()); if(args->command=="Quit"){ - running=false; + running=false; } args->command=""; - + std::stringstream tmp; tmp<<"Please type command : "<"); @@ -419,7 +419,7 @@ void ToolChain::Interactive(){ delete args; args=0; -} +} @@ -460,9 +460,9 @@ std::string ToolChain::ExecuteCommand(std::string command){ } else if(command=="Unpause"){ if(Initialised){ - exeloop=true; - paused=false; - returnmsg<<"Unpausing ToolChain"; + exeloop=true; + paused=false; + returnmsg<<"Unpausing ToolChain"; } else returnmsg<0){ - if(paused)tmp<<"ToolChain execution pasued"; - else tmp<<"ToolChain running (loop counter="<vars.Has("Status") && m_data->vars.Get("Status")!="") tmp<<" : "<vars.Get("Status"); @@ -503,13 +503,13 @@ std::string ToolChain::ExecuteCommand(std::string command){ void* ToolChain::InteractiveThread(void* arg){ - + ToolChainargs* args=static_cast(arg); - + bool running=true; printf("%s %s %s %s\n %s %s %s","Please type command :",cyan," Start, Pause, Unpause, Stop, Restart, Status, Quit, ?, (Initialise, Execute, Finalise)",plain,green,">",plain); - + while (running){ std::cin>>args->command; @@ -523,7 +523,7 @@ void* ToolChain::InteractiveThread(void* arg){ ToolChain::~ToolChain(){ - + for (unsigned int i=0;iLog==m_log){ - m_data->Log=0; + m_data->Log=0; delete m_data; m_data=0; } - - delete m_log; + + delete m_log; m_log=0; }