/*=========================================================================
-
+
Program: bbtk
Module: $RCSfile: bbtkExecuter.cxx,v $ $
Language: C++
- Date: $Date: 2008/02/05 11:07:42 $
- Version: $Revision: 1.5 $
-
+ 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
#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("Core",9,"Executer::Executer()" <<std::endl);
+ bbtkDebugMessageInc("Kernel",9,"Executer::Executer()" <<std::endl);
+ mFactory = new Factory;
+ mFactory->SetExecuter(this);
Reset();
- bbtkDebugDecTab("Core",9);
- }
+ bbtkDebugDecTab("Kernel",9);
+ }
/**
- *
+ *
*/
Executer::~Executer()
{
- bbtkDebugMessageInc("Core",9,"Executer::~Executer()" <<std::endl);
- if (mRoot)
+ //std::cout << "===================================== delete Executer\n";
+ bbtkDebugMessageInc("Kernel",9,"Executer::~Executer()" <<std::endl);
+ if (mRootCBB)
{
- mPackage->UnRegisterBlackBox("workspace");
- delete mRoot;
+ mRootPackage->UnRegisterBlackBox("workspace");
+ delete mRootCBB;
}
- if (mPackage)
+ if (mRootPackage)
{
- GetGlobalFactory()->UnLoadPackage("user");
+ GetFactory()->UnLoadPackage("user");
}
- bbtkDebugDecTab("Core",9);
+ delete mFactory;
+
+ bbtkDebugDecTab("Kernel",9);
}
-
+
/**
- *
+ *
*/
void Executer::Reset()
{
- bbtkDebugMessageInc("Core",9,"Executer::Reset()" <<std::endl);
+ bbtkDebugMessageInc("Kernel",9,"Executer::Reset()" <<std::endl);
// The 'user' package must be closed before all other
// because box destructors must not be unloaded when bb are deleted!
// 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);
- bbtkDebugDecTab("Core",9);
+ 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)
{
- bbtkDebugMessageInc("Core",9,"Executer::BeginPackage(\""<<name<<"\")"
+ bbtkDebugMessageInc("Kernel",9,"Executer::BeginPackage(\""<<name<<"\")"
<<std::endl);
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);
}
}
void Executer::Define (const std::string &name,
- const std::string &pack,
- const std::string &scriptfilename)
+ const std::string &pack,
+ const std::string &scriptfilename)
{
- bbtkDebugMessageInc("Core",9,"Executer::Define(\""<<name<<
- ","<<pack<<"\")"
+ bbtkDebugMessageInc("Kernel",9,"Executer::Define(\""<<name<<
+ ","<<pack<<"\")"
<<std::endl);
ComplexBlackBoxDescriptor* b = new ComplexBlackBoxDescriptor(name);
+ b->SetFactory(GetFactory());
b->SetScriptFileName(scriptfilename);
mOpenDefinition.push_back( CBBDefinition( b, pack ) );
- bbtkDebugDecTab("Core",9);
+ bbtkDebugDecTab("Kernel",9);
+ }
+
+ /// Sets the file name to use for the current definition
+ /// (Used to set it after the Define command)
+ void Executer::SetCurrentFileName (const std::string &name )
+ {
+ mOpenDefinition.back().box->SetScriptFileName(name);
}
void Executer::EndDefine ()
{
- bbtkDebugMessageInc("Core",9,"Executer::EndDefine(\""
+ bbtkDebugMessageInc("Kernel",9,"Executer::EndDefine(\""
<<Current()->GetTypeName()<<"\")"
<<std::endl);
// Does current package exist ?
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)
{
}
/**
- *
+ *
*/
void Executer::Update (const std::string &nodeName) // would 'Execute' be more meaningfull ?
{
// if in root
- if (Current()==mRoot)
+ if (Current()==mRootCBB)
{
if (!mNoExecMode)
{
Current()->AddToExecutionList(nodeName) ;
}
}
-
+
/**
- *
+ *
*/
void Executer::DefineInput ( const std::string &name,
const std::string &box,
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
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)
mess += ")";
std::string title(name);
title += " ?";
-
std::string ans = wx2std ( wxGetTextFromUser( std2wx (mess), std2wx(title)));
Set(box,input,ans);
}
Current()->DefineInput(name,box,input,help);
}
-
+
/**
*
*/
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 <std::string> found");
- }
+ {
+ bbtkError("No <"<<
+ TypeName(b->bbGetInputType(input))
+ <<"> to <std::string> found");
+ }
std::string v(value);
a->bbSetInput("In",v);
a->bbExecute();
}
/**
- *
- */
+ *
+ */
std::string Executer::Get(const std::string &box,
const std::string &output)
{
// 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 <std::string> found");
- }
+ BlackBox* a =
+ GetFactory()->NewAdaptor(
+ b->bbGetOutputType(output),
+ typeid(std::string),
+ "tmp");
+ if (!a)
+ {
+ bbtkError("No <"<<
+ TypeName(b->bbGetOutputType(output))
+ <<"> to <std::string> found");
+ }
b->bbExecute();
-
+
a->bbSetInput("In",b->bbGetOutput(output));
a->bbExecute();
std::string r = a->bbGetOutput("Out").unsafe_get<std::string>();
- //std::string v = *((std::string*)a->bbGetOutput("Out")) ;
- // std::cout << a->bbGetOutput("Out").unsafe_get<std::string>()
- // << 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::string>()
+ // << 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>();
- // std::string v = *((std::string*)b->bbGetOutput(output)) ;
- // std::cout << b->bbGetOutput("Out").unsafe_get<std::string>()
- // << std::endl;
- // b->bbSetInput(input,&v);
+ b->bbExecute();
+ return b->bbGetOutput(output).unsafe_get<std::string>();
+ // std::string v = *((std::string*)b->bbGetOutput(output)) ;
+ // std::cout << b->bbGetOutput("Out").unsafe_get<std::string>()
+ // << 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::Keyword(const std::string &keyword)
+ void Executer::Category(const std::string &category)
{
- Current()->AddToKeyword(keyword,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 \""
<<Current()->GetTypeName()<<"\" contains : "<<std::endl);
Current()->PrintBlackBoxes();
// No output provided : automatic generation
if (output_html.length() == 0)
{
- // Don't pollute the file store with "doc_tmp" directories ...
- std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_doc_tmp();
+ // 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 + "doc_tmp";
+ directory = directory + "temp_dir";
filename_rootHtml = directory + "/" + "User.html";
simplefilename_rootHtml = "User.html" ;
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);
/*
try
{
- ShowGraphTypes(nameblackbox);
+ ShowGraphTypes(nameblackbox);
}
catch (bbtk::Exception a)
{
- std::cout <<"EXC"<<std::endl;
- page = ShowGraphInstances(nameblackbox,detail,level,system_display);
+ std::cout <<"EXC"<<std::endl;
+ page = ShowGraphInstances(nameblackbox,detail,level,system_display);
}
*/
return page;
/// Generate a png file with the actual pipeline (Graphviz-dot needed)
std::string Executer::ShowGraphInstances(const std::string &nameblackbox, int detail, int level,
- bool system_display)
+ bool system_display)
{
BlackBox* blackbox=NULL;
if (nameblackbox==".")
{
- blackbox=Current()->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 "doc_tmp" directories ...
- std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_doc_tmp();
+ // 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 + "doc_tmp";
-
- //std::string directory("doc_tmp");
+ 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 ");
}
blackbox->bbInsertHTMLGraph( s, detail, level, true, directory, false );
- s << "</body></html>\n";
+ s << "</body></html>\n";
}
s.close();
{
bbtkMessageInc("Help",1,"No black box: \""
<<nameblackbox<<"\" " <<std::endl);
-
}
return page;
}