]> Creatis software - bbtk.git/blobdiff - kernel/appli/bbfy/bbfy.cpp
=== MAJOR RELEASE ====
[bbtk.git] / kernel / appli / bbfy / bbfy.cpp
index 8123db20035a61d81195550b62097b2039284ad6..4aeb878c5719e47b2b1e9d657646ad44da31e59e 100644 (file)
@@ -3,7 +3,7 @@
 #endif
 
 #include <stdio.h>
-#include "xmlParser.h"
+#include "bbtkXML.h"
 #include <iostream>
 #include <fstream>
 #include <sstream>
@@ -77,6 +77,7 @@ private:
   std::string mTemplateImplementation;
 
   std::vector<std::string> mInclude;
+  std::vector<std::string> mTypedef;
 
   std::string mUserConstructor;
   std::string mUserCopyConstructor;
@@ -86,6 +87,7 @@ private:
   {
     std::string name;
     std::string type;
+    std::string nature;
     std::string descr;
     std::string special;
     std::string generic_type;
@@ -139,27 +141,6 @@ void bbfy::CreateBlackBox()
 //==========================================================================
 
 
-//==========================================================================
-void GetTextOrClear(const XMLNode& node, std::string& var) 
-{
-  if (node.nText()>0) 
-    {
-      var = node.getText();
-    }
-  else if (node.nClear()>0) 
-    {
-      var = node.getClear().lpszValue;
-    }
-  else 
-    {
-      std::string mess("Error : element <");
-      mess += node.getName();
-      mess += "> : no text nor <PRE></PRE> clear tag found";
-      throw bbfyException(mess);
-    }
-}
-//==========================================================================
-
 
 //==========================================================================
 void bbfy::ParseXML()
@@ -207,7 +188,7 @@ void bbfy::ParseXML()
            {
              throw bbfyException("Error : blackbox type '"+itkImageToImageFilterString+"' but no <itkparent> tag found (mandatory)");
            }
-         GetTextOrClear(BB.getChildNode("itkparent"),mItkParent);
+         bbtk::GetTextOrClear(BB.getChildNode("itkparent"),mItkParent);
          // 
          mGeneric = false;
          if (BB.isAttributeSet("generic")) mGeneric=true;
@@ -222,7 +203,7 @@ void bbfy::ParseXML()
                                  +vtkImageAlgorithmString
                                  +"' but no <vtkparent> tag found (mandatory)");
            }
-         GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent);
+         bbtk::GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent);
          // 
        }
     else if (bbtype == vtkPolyDataAlgorithmString )
@@ -235,7 +216,7 @@ void bbfy::ParseXML()
                                  +vtkPolyDataAlgorithmString
                                  +"' but no <vtkparent> tag found (mandatory)");
            }
-         GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent);
+         bbtk::GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent);
          // 
        }
      else 
@@ -269,7 +250,7 @@ void bbfy::ParseXML()
   for (i=0,j=0; i<BB.nChildNode("author"); i++) 
     {
       std::string val;
-      GetTextOrClear(BB.getChildNode("author",&j),val);
+      bbtk::GetTextOrClear(BB.getChildNode("author",&j),val);
       mAuthor += val;
     }
 
@@ -277,7 +258,7 @@ void bbfy::ParseXML()
   for (i=0,j=0; i<BB.nChildNode("description"); i++) 
     {
       std::string val;
-      GetTextOrClear(BB.getChildNode("description",&j),val);
+      bbtk::GetTextOrClear(BB.getChildNode("description",&j),val);
       mDescription += val;
     }
   
@@ -285,30 +266,30 @@ void bbfy::ParseXML()
   for (i=0,j=0; i<BB.nChildNode("category"); i++) 
     {
       std::string val;
-      GetTextOrClear(BB.getChildNode("category",&j),val);
+      bbtk::GetTextOrClear(BB.getChildNode("category",&j),val);
       mCategory += val;
     }
 
   // Namespace
   if (BB.nChildNode("namespace"))
     {
-      GetTextOrClear(BB.getChildNode("namespace"),mNamespace);
+      bbtk::GetTextOrClear(BB.getChildNode("namespace"),mNamespace);
     }
 
   // UserConstructor body
-  if (BB.nChildNode("constructor"))
+  if (BB.nChildNode("userconstructor"))
     {
-      GetTextOrClear(BB.getChildNode("constructor"),mUserConstructor);
+      bbtk::GetTextOrClear(BB.getChildNode("userconstructor"),mUserConstructor);
     }
   // UserCopyConstructor body
-  if (BB.nChildNode("copyconstructor"))
+  if (BB.nChildNode("usercopyconstructor"))
     {
-      GetTextOrClear(BB.getChildNode("copyconstructor"),mUserCopyConstructor);
+      bbtk::GetTextOrClear(BB.getChildNode("usercopyconstructor"),mUserCopyConstructor);
     }
   // UserDestructor body
-  if (BB.nChildNode("destructor"))
+  if (BB.nChildNode("userdestructor"))
     {
-      GetTextOrClear(BB.getChildNode("destructor"),mUserDestructor);
+      bbtk::GetTextOrClear(BB.getChildNode("userdestructor"),mUserDestructor);
     }
  
     // Template parameters
@@ -323,7 +304,7 @@ void bbfy::ParseXML()
        {
          mTemplateDeclaration += "class ";
          std::string val;
-         GetTextOrClear(BB.getChildNode("template",&j),val);
+         bbtk::GetTextOrClear(BB.getChildNode("template",&j),val);
          mTemplateDeclaration += val;
          mTemplateDeclaration +=  ",";
          mTemplateImplementation += val;
@@ -332,7 +313,7 @@ void bbfy::ParseXML()
        }
       mTemplateDeclaration += "class ";
       std::string val;
-      GetTextOrClear(BB.getChildNode("template",&j),val);
+      bbtk::GetTextOrClear(BB.getChildNode("template",&j),val);
       mTemplateDeclaration += val;
       mTemplateDeclaration +=  ">";
       mTemplateImplementation += val;
@@ -344,9 +325,16 @@ void bbfy::ParseXML()
   for (i=0,j=0; i<BB.nChildNode("include"); i++) 
     {
       std::string val;
-      GetTextOrClear(BB.getChildNode("include",&j),val);
+      bbtk::GetTextOrClear(BB.getChildNode("include",&j),val);
       mInclude.push_back(val);
     }
+  // Typedef
+  for (i=0,j=0; i<BB.nChildNode("typedef"); i++) 
+    {
+      std::string val;
+      bbtk::GetTextOrClear(BB.getChildNode("typedef",&j),val);
+      mTypedef.push_back(val);
+    }
   
   // Inputs
   for (i=0,j=0; i<BB.nChildNode("input"); i++) 
@@ -374,6 +362,11 @@ void bbfy::ParseXML()
          io.special =  n.getAttribute("special");  
        }
 
+      if (n.isAttributeSet("nature")) 
+       {
+         io.nature =  n.getAttribute("nature");  
+       }
+
       if (n.isAttributeSet("generic_type")) 
        {
          io.generic_type =  n.getAttribute("generic_type");  
@@ -408,6 +401,11 @@ void bbfy::ParseXML()
          io.special =  n.getAttribute("special");  
        }
 
+      if (n.isAttributeSet("nature")) 
+       {
+         io.nature =  n.getAttribute("nature");  
+       }
+
       if (n.isAttributeSet("generic_type")) 
        {
          io.generic_type =  n.getAttribute("generic_type");  
@@ -421,13 +419,13 @@ void bbfy::ParseXML()
   // process tag given ?
    if (BB.nChildNode("process"))
      {
-       GetTextOrClear(BB.getChildNode("process"),mProcess);
+       bbtk::GetTextOrClear(BB.getChildNode("process"),mProcess);
      }
   // CreateWidget
   // createwidget tag given ?
    if (BB.nChildNode("createwidget"))
      {
-       GetTextOrClear(BB.getChildNode("createwidget"),mCreateWidget);
+       bbtk::GetTextOrClear(BB.getChildNode("createwidget"),mCreateWidget);
      }
 }
 //==========================================================================
@@ -543,7 +541,7 @@ void bbfy::CreateHeader()
   mFile << "{\n";
 
   // Interface
-  mFile << "  BBTK_USER_BLACK_BOX_INTERFACE("
+  mFile << "  BBTK_BLACK_BOX_INTERFACE("
        << mName << ","
        << mParentBlackBox << ");\n";
 
@@ -560,6 +558,10 @@ void bbfy::CreateHeader()
       mFile << "  typedef " <<mVtkParent <<" vtkParent;"<<std::endl;
       mFile << "  void bbDelete() { vtkParent::Delete(); }"<<std::endl;
     }
+  for (i=mTypedef.begin(); i!=mTypedef.end(); ++i) 
+    {
+      mFile << *i <<"\n";
+    }
 
   // Declare user constructor / copy cons /destr 
   mFile << "//=================================================================="<<std::endl;
@@ -687,8 +689,8 @@ void bbfy::CreateHeader()
   // Process
   if ((mType == STD)||(mProcess.size()))
     {
-      mFile << "  BBTK_PROCESS(DoProcess);\n" ;
-      mFile << "  void DoProcess();\n";
+      mFile << "  BBTK_PROCESS(Process);\n" ;
+      mFile << "  void Process();\n";
     }
   else if (mType == itkImageToImageFilter)
     {   
@@ -704,8 +706,8 @@ void bbfy::CreateHeader()
   // CreateWidget
   if (mIsWidget) 
     {
-       mFile << "  BBTK_CREATE_WIDGET(DoCreateWidget);\n" ;
-       mFile << "  void DoCreateWidget();\n";
+       mFile << "  BBTK_CREATE_WIDGET(CreateWidget);\n" ;
+       mFile << "  void CreateWidget();\n";
     }
 
 
@@ -746,6 +748,11 @@ void bbfy::CreateHeader()
   
   // Category
   mFile << "BBTK_CATEGORY(\""<<mCategory<< "\");\n"; 
+
+  for (i=mTypedef.begin(); i!=mTypedef.end(); ++i) 
+    {
+      mFile << *i <<"\n";
+    }
   
   // Inputs
   for (ioi=mInput.begin(); ioi!=mInput.end(); ++ioi) 
@@ -759,7 +766,8 @@ void bbfy::CreateHeader()
          mFile << "BBTK_INPUT(";
        } 
       mFile << mName << "," << ioi->name << ",\""
-           << ioi->descr << "\"," <<  ioi->type <<");\n";
+           << ioi->descr << "\"," <<  ioi->type << ",\"" 
+           << ioi->nature<<"\");\n";
     }
   
   // Outputs
@@ -774,7 +782,8 @@ void bbfy::CreateHeader()
          mFile << "BBTK_OUTPUT(";
        } 
       mFile << mName << "," << ioi->name << ",\""
-           << ioi->descr << "\"," <<  ioi->type <<");\n";
+           << ioi->descr << "\"," <<  ioi->type << ",\"" 
+           << ioi->nature<<"\");\n";
     }
   
   // EO black box description
@@ -837,7 +846,7 @@ void bbfy::WriteGenericITKFilterHeader()
   mFile << "{\n";
 
   // Interface
-  mFile << "  BBTK_USER_BLACK_BOX_INTERFACE("
+  mFile << "  BBTK_BLACK_BOX_INTERFACE("
        << mName << "Generic,bbtk::AtomicBlackBox);\n";
 
   // Inputs
@@ -982,14 +991,14 @@ void bbfy::CreateCode()
   if (mTemplateParam.size()>0) 
     {
       // Implementation
-      mFile << "BBTK_USER_BLACK_BOX_TEMPLATE_IMPLEMENTATION("
+      mFile << "BBTK_BLACK_BOX_TEMPLATE_IMPLEMENTATION("
            << mName << ","  
            << mParentBlackBox << ");\n";
      
       if (mGeneric) 
        {       
          // Implementation
-         mFile << "BBTK_USER_BLACK_BOX_IMPLEMENTATION("
+         mFile << "BBTK_BLACK_BOX_IMPLEMENTATION("
                << mName << "Generic,bbtk::AtomicBlackBox);\n";
          // Package
          mFile << "BBTK_ADD_BLACK_BOX_TO_PACKAGE("
@@ -1006,21 +1015,21 @@ void bbfy::CreateCode()
            << mName << ")\n";
 
       // Implementation
-      mFile << "BBTK_USER_BLACK_BOX_IMPLEMENTATION("
+      mFile << "BBTK_BLACK_BOX_IMPLEMENTATION("
            << mName << ","  
            << mParentBlackBox << ");\n"; 
     }
   // Process
   if ((mType == STD)||(mProcess.size()))
     {
-      mFile << "void "<<mName<<"::DoProcess()\n{\n";
+      mFile << "void "<<mName<<"::Process()\n{\n";
       mFile << mProcess << "\n";
       mFile << "}\n";
     }
   // CreateWidget
   if (mIsWidget)
     {
-      mFile << "void "<<mName<<"::DoCreateWidget()\n{\n";
+      mFile << "void "<<mName<<"::CreateWidget()\n{\n";
       mFile << mCreateWidget << "\n";
       mFile << "}\n";
     }