X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkExecuter.cxx;h=5244a04a60d26bd355ed841d66040a5ca40e03a0;hb=1cad1aa48a5353dc6844018dc8b756f876e17394;hp=2bb24d8e12b8eec87092a6d6b6056a061313c206;hpb=51be19a0b4d980ef0bdcbbfc5c8255d811de1883;p=bbtk.git diff --git a/kernel/src/bbtkExecuter.cxx b/kernel/src/bbtkExecuter.cxx index 2bb24d8..5244a04 100644 --- a/kernel/src/bbtkExecuter.cxx +++ b/kernel/src/bbtkExecuter.cxx @@ -1,19 +1,19 @@ /*========================================================================= - + Program: bbtk Module: $RCSfile: bbtkExecuter.cxx,v $ $ Language: C++ - Date: $Date: 2008/02/06 10:53:02 $ - Version: $Revision: 1.9 $ - + Date: $Date: 2008/03/07 11:15:15 $ + Version: $Revision: 1.14 $ + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - + =========================================================================*/ /** * \file @@ -35,44 +35,49 @@ #include "bbtkConfigurationFile.h" namespace bbtk -{ +{ /** - * + * */ Executer::Executer() - : mPackage(0), - mRoot(0), - mNoExecMode(false), - mDialogMode(NoDialog) + : + mFactory(0), + mRootPackage(0), + mRootCBB(0), + mNoExecMode(false), + mDialogMode(NoDialog) { - //VirtualExec(); - bbtkDebugMessageInc("Kernel",9,"Executer::Executer()" <SetExecuter(this); Reset(); bbtkDebugDecTab("Kernel",9); - } + } /** - * + * */ Executer::~Executer() { + //std::cout << "===================================== delete Executer\n"; bbtkDebugMessageInc("Kernel",9,"Executer::~Executer()" <UnRegisterBlackBox("workspace"); - delete mRoot; + mRootPackage->UnRegisterBlackBox("workspace"); + delete mRootCBB; } - if (mPackage) + if (mRootPackage) { - GetGlobalFactory()->UnLoadPackage("user"); + GetFactory()->UnLoadPackage("user"); } + delete mFactory; + bbtkDebugDecTab("Kernel",9); } - + /** - * + * */ void Executer::Reset() { @@ -84,38 +89,42 @@ namespace bbtk // all user defined CBB otherwise any instance // of a user CBB that is in the 'workspace' would try to // access a user CBB descriptor which has been previously freed - if (mRoot) + if (mRootCBB) { - mPackage->UnRegisterBlackBox(mRoot->GetTypeName()); - delete mRoot; + mRootPackage->UnRegisterBlackBox(mRootCBB->GetTypeName()); + delete mRootCBB; } - if (mPackage) + if (mRootPackage) { - GetGlobalFactory()->UnLoadPackage("user"); + GetFactory()->UnLoadPackage("user"); } - GetGlobalFactory()->Reset(); + GetFactory()->Reset(); + // Create user package - mPackage = new Package("user","internal to bbi", + mRootPackage = new Package("user","internal to bbi", "User defined black boxes", "", BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); // Create user workspace - mRoot = new ComplexBlackBoxDescriptor("workspace"); //,f); - mRoot->AddToAuthor("bbi (internal)"); - mRoot->AddToDescription("User's workspace"); - mOpenDefinition.push_back(CBBDefinition(mRoot,"user")); + mRootCBB = new ComplexBlackBoxDescriptor("workspace"); //,f); + mRootCBB->SetFactory(GetFactory()); + mRootCBB->AddToAuthor("bbi (internal)"); + mRootCBB->AddToDescription("User's workspace"); + mOpenDefinition.push_back(CBBDefinition(mRootCBB,"user")); // Register it into the user package - mPackage->RegisterBlackBox(mRoot); + mRootPackage->RegisterBlackBox(mRootCBB); // Insert the user package in the factory - InsertPackage(mPackage); - mOpenPackage.push_back(mPackage); + GetFactory()->InsertPackage(mRootPackage); + // And in the list of open packages + mOpenPackage.push_back(mRootPackage); + bbtkDebugDecTab("Kernel",9); } - + /// changes the workspace name void Executer::SetWorkspaceName( const std::string& n ) { - mPackage->ChangeBlackBoxName( mRoot->GetTypeName(), n ); + mRootPackage->ChangeBlackBoxName( mRootCBB->GetTypeName(), n ); } void Executer::BeginPackage (const std::string &name) @@ -125,16 +134,16 @@ namespace bbtk Package* p; try { - p = GetGlobalFactory()->GetPackage(name); + p = GetFactory()->GetPackage(name); } catch (Exception e) { - p = new Package(name, - "", - "", - "", - BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); - InsertPackage(p); + p = new Package(name, + "", + "", + "", + BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); + GetFactory()->InsertPackage(p); } mOpenPackage.push_back(p); } @@ -145,14 +154,15 @@ namespace bbtk } void Executer::Define (const std::string &name, - const std::string &pack, - const std::string &scriptfilename) + const std::string &pack, + const std::string &scriptfilename) { bbtkDebugMessageInc("Kernel",9,"Executer::Define(\""<SetFactory(GetFactory()); b->SetScriptFileName(scriptfilename); mOpenDefinition.push_back( CBBDefinition( b, pack ) ); @@ -165,7 +175,6 @@ namespace bbtk { mOpenDefinition.back().box->SetScriptFileName(name); } - void Executer::EndDefine () { @@ -176,50 +185,49 @@ namespace bbtk Package* p; std::string pname(mOpenDefinition.back().package); if (pname.size()>0) - { - try { - p = GetGlobalFactory()->GetPackage(pname); + try + { + p = GetFactory()->GetPackage(pname); + } + catch (Exception e) + { + p = new Package(pname, + "", + "", + "", + BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); + GetFactory()->InsertPackage(p); + } } - catch (Exception e) + else { - p = new Package(pname, - "", - "", - "", - BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); - InsertPackage(p); + p = mOpenPackage.back(); } - } - else - { - p = mOpenPackage.back(); - } p->RegisterBlackBox(Current()); - + mOpenDefinition.pop_back(); } - + void Executer::Create ( const std::string& nodeType, const std::string& nodeName) { Current()->Add(nodeType,nodeName); } - /* void Executer::Remove (const std::string &nodeName) { // Current()->RemoveBlackBox(nodeName); } - */ + */ /** - * + * */ - void Executer::Connect (const std::string &nodeFrom, - const std::string &outputLabel, + void Executer::Connect (const std::string &nodeFrom, + const std::string &outputLabel, const std::string &nodeTo, const std::string &inputLabel) { @@ -227,12 +235,12 @@ namespace bbtk } /** - * + * */ void Executer::Update (const std::string &nodeName) // would 'Execute' be more meaningfull ? { // if in root - if (Current()==mRoot) + if (Current()==mRootCBB) { if (!mNoExecMode) { @@ -244,9 +252,9 @@ namespace bbtk Current()->AddToExecutionList(nodeName) ; } } - + /** - * + * */ void Executer::DefineInput ( const std::string &name, const std::string &box, @@ -254,7 +262,7 @@ namespace bbtk const std::string& help) { // If the input is defined in the Root box - if (Current()==mRoot) + if (Current()==mRootCBB) { // If the dialog mode is set to NoDialog // and the user passed the name in the Inputs map @@ -278,7 +286,7 @@ namespace bbtk std::cin >> ans; Set(box,input,ans); } - #ifdef _USE_WXWIDGETS_ +#ifdef _USE_WXWIDGETS_ // If the dialog mode is set to GraphicalDialog // A dialog box is pop up else if (mDialogMode == GraphicalDialog) @@ -290,7 +298,6 @@ namespace bbtk mess += ")"; std::string title(name); title += " ?"; - std::string ans = wx2std ( wxGetTextFromUser( std2wx (mess), std2wx(title))); Set(box,input,ans); } @@ -300,7 +307,7 @@ namespace bbtk Current()->DefineInput(name,box,input,help); } - + /** * */ @@ -324,16 +331,16 @@ namespace bbtk if ( b->bbGetInputType(input) != typeid(std::string) ) { - BlackBox* a = /*mFactory->*/ - NewAdaptor(typeid(std::string), - b->bbGetInputType(input), - "tmp"); + BlackBox* a = + GetFactory()->NewAdaptor(typeid(std::string), + b->bbGetInputType(input), + "tmp"); if (!a) - { - bbtkError("No <"<< - TypeName(b->bbGetInputType(input)) - <<"> to found"); - } + { + bbtkError("No <"<< + TypeName(b->bbGetInputType(input)) + <<"> to found"); + } std::string v(value); a->bbSetInput("In",v); a->bbExecute(); @@ -348,8 +355,8 @@ namespace bbtk } /** - * - */ + * + */ std::string Executer::Get(const std::string &box, const std::string &output) { @@ -357,61 +364,61 @@ namespace bbtk // Looks for the adaptor if (b->bbGetOutputType(output) != typeid(std::string)) { - BlackBox* a = /*mFactory->*/ - NewAdaptor( - b->bbGetOutputType(output), - typeid(std::string), - "tmp"); - if (!a) - { - bbtkError("No <"<< - TypeName(b->bbGetOutputType(output)) - <<"> to found"); - } + BlackBox* a = + GetFactory()->NewAdaptor( + b->bbGetOutputType(output), + typeid(std::string), + "tmp"); + if (!a) + { + bbtkError("No <"<< + TypeName(b->bbGetOutputType(output)) + <<"> to found"); + } b->bbExecute(); - + a->bbSetInput("In",b->bbGetOutput(output)); a->bbExecute(); std::string r = a->bbGetOutput("Out").unsafe_get(); - //std::string v = *((std::string*)a->bbGetOutput("Out")) ; - // std::cout << a->bbGetOutput("Out").unsafe_get() - // << std::endl; - //std::string v(value); - //b->bbSetInput(input,a->bbGetOutput("Out")); + //std::string v = *((std::string*)a->bbGetOutput("Out")) ; + // std::cout << a->bbGetOutput("Out").unsafe_get() + // << std::endl; + //std::string v(value); + //b->bbSetInput(input,a->bbGetOutput("Out")); a->bbDelete(); return r; } - else + else { - b->bbExecute(); - return b->bbGetOutput(output).unsafe_get(); - // std::string v = *((std::string*)b->bbGetOutput(output)) ; - // std::cout << b->bbGetOutput("Out").unsafe_get() - // << std::endl; - // b->bbSetInput(input,&v); + b->bbExecute(); + return b->bbGetOutput(output).unsafe_get(); + // std::string v = *((std::string*)b->bbGetOutput(output)) ; + // std::cout << b->bbGetOutput("Out").unsafe_get() + // << std::endl; + // b->bbSetInput(input,&v); } } void Executer::Author(const std::string &authorName) { - Current()->AddToAuthor(authorName,Current()==mRoot); + Current()->AddToAuthor(authorName,Current()==mRootCBB); } void Executer::Category(const std::string &category) { - Current()->AddToCategory(category,Current()==mRoot); + Current()->AddToCategory(category,Current()==mRootCBB); } void Executer::Description(const std::string &d) { - Current()->AddToDescription(d,Current()==mRoot); + Current()->AddToDescription(d,Current()==mRootCBB); } /// prints the list of the boxes of the current descriptor void Executer::PrintBoxes() - { + { bbtkMessageInc("Help",1,"The black box descriptor \"" <GetTypeName()<<"\" contains : "<PrintBlackBoxes(); @@ -456,15 +463,14 @@ namespace bbtk relative_link = false; } - Package* p; try { - p = GetGlobalFactory()->GetPackage(nameblackbox); + p = GetFactory()->GetPackage(nameblackbox); } catch (Exception e) { - p = mPackage; + p = mRootPackage; } // Generating documentation-help of workspace p->SetDocURL(filename_rootHtml); @@ -476,12 +482,12 @@ namespace bbtk /* try { - ShowGraphTypes(nameblackbox); + ShowGraphTypes(nameblackbox); } catch (bbtk::Exception a) { - std::cout <<"EXC"<GetPrototype(); + blackbox=Current()->GetPrototype(); } - else + else { - blackbox = Current()->GetPrototype()->bbFindBlackBox(nameblackbox); + blackbox = Current()->GetPrototype()->bbFindBlackBox(nameblackbox); } std::string page; if (blackbox) { - // Don't pollute the file store with "temp_dir" directories ... + // Don't pollute the file store with "temp_dir" directories ... std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_temp_dir(); char c = default_doc_dir.c_str()[strlen(default_doc_dir.c_str())-1]; - + std::string directory = default_doc_dir; if (c != '/' && c !='\\') directory = directory + "/"; - directory = directory + "temp_dir"; - + directory = directory + "temp_dir"; //std::string directory("temp_dir"); std::string filename(directory + "/" + "bbtk_graph_pipeline"); std::string filename_html(filename+".html"); std::string command0("mkdir \""+directory + "\""); -#if defined(_WIN32) +#if defined(_WIN32) std::string command2("start "); #else std::string command2("gnome-open "); @@ -543,7 +548,7 @@ namespace bbtk } blackbox->bbInsertHTMLGraph( s, detail, level, true, directory, false ); - s << "\n"; + s << "\n"; } s.close(); @@ -554,7 +559,6 @@ namespace bbtk { bbtkMessageInc("Help",1,"No black box: \"" <