/*=========================================================================
-
+
Program: bbtk
Module: $RCSfile: bbtkExecuter.cxx,v $ $
Language: C++
- Date: $Date: 2008/02/14 20:26:54 $
- Version: $Revision: 1.11 $
-
+ 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
*
*/
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()" <<std::endl);
+ mFactory = new Factory;
+ mFactory->SetExecuter(this);
Reset();
bbtkDebugDecTab("Kernel",9);
}
*/
Executer::~Executer()
{
-std::cout << "====================================================== delete Executer\n";
+ //std::cout << "===================================== delete Executer\n";
bbtkDebugMessageInc("Kernel",9,"Executer::~Executer()" <<std::endl);
- if (mRoot)
+ if (mRootCBB)
{
- mPackage->UnRegisterBlackBox("workspace");
- delete mRoot;
+ mRootPackage->UnRegisterBlackBox("workspace");
+ delete mRootCBB;
}
- if (mPackage)
+ if (mRootPackage)
{
- GetGlobalFactory()->UnLoadPackage("user");
+ GetFactory()->UnLoadPackage("user");
}
+ delete mFactory;
+
bbtkDebugDecTab("Kernel",9);
}
// 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)
Package* p;
try
{
- p = GetGlobalFactory()->GetPackage(name);
+ p = GetFactory()->GetPackage(name);
}
catch (Exception e)
{
"",
"",
BBTK_STRINGIFY_SYMBOL(BBTK_VERSION));
- InsertPackage(p);
+ GetFactory()->InsertPackage(p);
}
mOpenPackage.push_back(p);
}
<<std::endl);
ComplexBlackBoxDescriptor* b = new ComplexBlackBoxDescriptor(name);
+ b->SetFactory(GetFactory());
b->SetScriptFileName(scriptfilename);
mOpenDefinition.push_back( CBBDefinition( b, pack ) );
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)
void Executer::Update (const std::string &nodeName) // would 'Execute' be more meaningfull ?
{
// if in root
- if (Current()==mRoot)
+ if (Current()==mRootCBB)
{
if (!mNoExecMode)
{
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
if ( b->bbGetInputType(input) != typeid(std::string) )
{
BlackBox* a =
- NewAdaptor(typeid(std::string),
- b->bbGetInputType(input),
- "tmp");
+ 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();
// Looks for the adaptor
if (b->bbGetOutputType(output) != typeid(std::string))
{
- BlackBox* a =
- 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
{
- 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::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);
}
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);