]> Creatis software - bbtk.git/blobdiff - kernel/appli/bbfy/bbfy.cpp
bbfy changes ...
[bbtk.git] / kernel / appli / bbfy / bbfy.cpp
index 64120471d5fa2883012204fa218108a190ee9356..8123db20035a61d81195550b62097b2039284ad6 100644 (file)
@@ -19,6 +19,10 @@ public:
 };
 //==========================================================================
 
+const std::string itkImageToImageFilterString = "ITK_ImageToImageFilter";
+const std::string vtkImageAlgorithmString = "VTK_ImageAlgorithm";
+const std::string vtkPolyDataAlgorithmString = "VTK_PolyDataAlgorithm";
+
 //==========================================================================
 class bbfy
 {
@@ -54,6 +58,7 @@ private:
       vtkPolyDataAlgorithm,
     }
     BoxType;
+
   BoxType mType;
   bool mIsWidget;
   std::string mParentBlackBox;
@@ -81,7 +86,7 @@ private:
   {
     std::string name;
     std::string type;
-    std::string help;
+    std::string descr;
     std::string special;
     std::string generic_type;
   }
@@ -109,6 +114,8 @@ bbfy::bbfy(const std::string& filename,
           const std::string& output_path,
           bool verbose)
 {
+  mIsWidget = false;
+  
   mFilename = filename;
   mPackage = package;
   mNamespace = "bb" + mPackage;
@@ -173,7 +180,7 @@ void bbfy::ParseXML()
   // Name
   if (!BB.isAttributeSet("name")) 
     {
-      throw bbfyException("Error : no 'name' attribute found (mandatory)");
+      throw bbfyException("Error : <blackbox> tag : no 'name' attribute found (mandatory)");
     }
   mName = BB.getAttribute("name");
 
@@ -192,35 +199,53 @@ void bbfy::ParseXML()
          mGeneric = false;
          mType = STD;
        }
-      else if (bbtype=="itkImageToImageFilter")
+      else if (bbtype==itkImageToImageFilterString)
        {
          mType = itkImageToImageFilter;
          // Looks for <itkparent> tag
          if (!BB.nChildNode("itkparent")) 
            {
-             throw bbfyException("Error : blackbox type 'itkImageToImageFilter' but no <itkparent> tag found (mandatory)");
+             throw bbfyException("Error : blackbox type '"+itkImageToImageFilterString+"' but no <itkparent> tag found (mandatory)");
            }
          GetTextOrClear(BB.getChildNode("itkparent"),mItkParent);
          // 
          mGeneric = false;
          if (BB.isAttributeSet("generic")) mGeneric=true;
        }
-      else if ((bbtype=="vtkImageAlgorithm") || (bbtype=="vtkPolyDataAlgorithm"))
+      else if (bbtype == vtkImageAlgorithmString)
        {
          mType = vtkImageAlgorithm;
          // Looks for <vtkparent> tag
          if (!BB.nChildNode("vtkparent")) 
            {
-             throw bbfyException("Error : blackbox type 'vtkImageAlgorithm' but no <vtkparent> tag found (mandatory)");
+             throw bbfyException("Error : blackbox type '"
+                                 +vtkImageAlgorithmString
+                                 +"' but no <vtkparent> tag found (mandatory)");
            }
          GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent);
          // 
        }
-      else 
+    else if (bbtype == vtkPolyDataAlgorithmString )
+       {
+         mType = vtkPolyDataAlgorithm;
+         // Looks for <vtkparent> tag
+         if (!BB.nChildNode("vtkparent")) 
+           {
+             throw bbfyException("Error : blackbox type '"
+                                 +vtkPolyDataAlgorithmString
+                                 +"' but no <vtkparent> tag found (mandatory)");
+           }
+         GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent);
+         // 
+       }
+     else 
        {
          std::string mess("Error : blackbox type '");
          mess += bbtype;
-         mess += "' unknown (types are 'standard','itkfilter')";
+         mess += "' unknown. Known types :";
+         mess += "'" + itkImageToImageFilterString + "' ";
+         mess += "'" + vtkImageAlgorithmString + "' ";
+         mess += "'" + vtkPolyDataAlgorithmString + "' ";
          throw bbfyException(mess);
        }
     }
@@ -239,22 +264,6 @@ void bbfy::ParseXML()
       mInclude.push_back("bbtkAtomicBlackBox.h");
     }
 
-  /*
-  // Parent black box
-  if (!BB.nChildNode("parentblackbox")) 
-    {
-      throw bbfyException("Error : no <parentblackbox> tag found (mandatory)");
-   }
-  GetTextOrClear(BB.getChildNode("parentblackbox"),mParentBlackBox);
-
-  // Package
-  if (!BB.nChildNode("package")) 
-    {
-      throw bbfyException("Error : no <package> tag found (mandatory)");
-   }
-  GetTextOrClear(BB.getChildNode("package"),mPackage);
-  */
-
   // Author
   int i,j;
   for (i=0,j=0; i<BB.nChildNode("author"); i++) 
@@ -281,14 +290,10 @@ void bbfy::ParseXML()
     }
 
   // Namespace
-  /*
-  mIsInNamespace = false;
   if (BB.nChildNode("namespace"))
     {
-      mIsInNamespace = true;
       GetTextOrClear(BB.getChildNode("namespace"),mNamespace);
     }
-  */
 
   // UserConstructor body
   if (BB.nChildNode("constructor"))
@@ -346,20 +351,23 @@ void bbfy::ParseXML()
   // Inputs
   for (i=0,j=0; i<BB.nChildNode("input"); i++) 
     {
+      IO io;
       XMLNode n = BB.getChildNode("input",&j); 
       if (!n.isAttributeSet("name"))
        {
          throw bbfyException("Error : <input> attribute 'name' not found (mandatory)");
        }
+      io.name = n.getAttribute("name");
       if (!n.isAttributeSet("type"))
        {
-         throw bbfyException("Error : <input> attribute 'type' not found (mandatory)");
+         throw bbfyException("Error : <input name=\""+io.name+"\"> attribute 'type' not found (mandatory)");
        }
-
-      IO io;
-      io.name = n.getAttribute("name");
       io.type = n.getAttribute("type"); 
-      GetTextOrClear(n,io.help);
+      if (!n.isAttributeSet("description"))
+       {
+         throw bbfyException("Error : <input name=\""+io.name+"\"> attribute 'description' not found (mandatory)");
+       }
+      io.descr = n.getAttribute("description"); 
 
       if (n.isAttributeSet("special")) 
        {
@@ -377,20 +385,23 @@ void bbfy::ParseXML()
   // Outputs
   for (i=0,j=0; i<BB.nChildNode("output"); i++) 
     {
+      IO io;
       XMLNode n = BB.getChildNode("output",&j); 
       if (!n.isAttributeSet("name"))
        {
          throw bbfyException("Error : <output> attribute 'name' not found (mandatory)");
        }
+      io.name = n.getAttribute("name"); 
       if (!n.isAttributeSet("type"))
        {
-         throw bbfyException("Error : <output> attribute 'type' not found (mandatory)");
+         throw bbfyException("Error : <output name=\""+io.name+"\"> attribute 'type' not found (mandatory)");
        }
-
-      IO io;
-      io.name = n.getAttribute("name"); 
       io.type = n.getAttribute("type"); 
-      GetTextOrClear(n,io.help);
+      if (!n.isAttributeSet("description"))
+       {
+         throw bbfyException("Error : <output name=\""+io.name+"\"> attribute 'description' not found (mandatory)");
+       }
+      io.descr = n.getAttribute("description"); 
 
       if (n.isAttributeSet("special")) 
        {
@@ -462,7 +473,10 @@ void bbfy::CreateHeader()
     }
   
   // If is widget 
-  mFile << "#ifdef _USE_WXWIDGETS_\n";
+  if (mIsWidget)
+    {
+      mFile << "#ifdef _USE_WXWIDGETS_\n";
+    }
 
   // Prevent multiple inclusions
   std::string included("__bb");
@@ -745,7 +759,7 @@ void bbfy::CreateHeader()
          mFile << "BBTK_INPUT(";
        } 
       mFile << mName << "," << ioi->name << ",\""
-           << ioi->help << "\"," <<  ioi->type <<");\n";
+           << ioi->descr << "\"," <<  ioi->type <<");\n";
     }
   
   // Outputs
@@ -760,7 +774,7 @@ void bbfy::CreateHeader()
          mFile << "BBTK_OUTPUT(";
        } 
       mFile << mName << "," << ioi->name << ",\""
-           << ioi->help << "\"," <<  ioi->type <<");\n";
+           << ioi->descr << "\"," <<  ioi->type <<");\n";
     }
   
   // EO black box description
@@ -795,7 +809,10 @@ void bbfy::CreateHeader()
   // Prevent multiple inclusions
   mFile << "#endif // " << included <<"\n";
   // If is widget 
-  mFile << "#endif // _USE_WXWIDGETS_\n";
+  if (mIsWidget)
+    {
+      mFile << "#endif // _USE_WXWIDGETS_\n";
+    }
 
   // EOF
   mFile << "\n";
@@ -870,7 +887,7 @@ void bbfy::WriteGenericITKFilterHeader()
     {
       mFile << "BBTK_INPUT(";
       mFile << mName << "Generic," << ioi->name << ",\""
-           << ioi->help << "\"," <<  ioi->generic_type <<");\n";
+           << ioi->descr << "\"," <<  ioi->generic_type <<");\n";
     }
   
   // Outputs
@@ -878,7 +895,7 @@ void bbfy::WriteGenericITKFilterHeader()
     {
       mFile << "BBTK_OUTPUT(";
       mFile << mName << "Generic," << ioi->name << ",\""
-           << ioi->help << "\"," <<  ioi->generic_type <<");\n";
+           << ioi->descr << "\"," <<  ioi->generic_type <<");\n";
     }
   
   // EO black box description
@@ -1067,7 +1084,8 @@ int main(int argc, char **argv)
     }
   catch (bbfyException e)
     {
-      std::cerr << e.mMessage << std::endl;
+      std::cerr << argv[0] << "  " << argv[1] << std::endl
+               << e.mMessage << std::endl;
       return 1;
     }
   return 0;