]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkFactory.cxx
Interpolate On/Off has now immediate effect
[bbtk.git] / kernel / src / bbtkFactory.cxx
index bc21a292287b96f3cdc776d07d76c3e4dcb812c4..37563de8e3523386c3d7076837e0d32c0bf15a2c 100644 (file)
@@ -1,22 +1,33 @@
-/*=========================================================================
-                                                                                
-Program:   bbtk
-Module:    $RCSfile: bbtkFactory.cxx,v $
-Language:  C++
-
-Date:      $Date: 2008/07/01 07:58:28 $
-Version:   $Revision: 1.37 $
-                                                                                
-
-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.
+/*=========================================================================                                                                               
+  Program:   bbtk
+  Module:    $RCSfile: bbtkFactory.cxx,v $
+  Language:  C++
+  Date:      $Date: 2009/06/08 14:50:03 $
+  Version:   $Revision: 1.45 $
+=========================================================================*/
 
-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.
+/* ---------------------------------------------------------------------
+
+* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
+* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
+*
+*  This software is governed by the CeCILL-B license under French law and 
+*  abiding by the rules of distribution of free software. You can  use, 
+*  modify and/ or redistribute the software under the terms of the CeCILL-B 
+*  license as circulated by CEA, CNRS and INRIA at the following URL 
+*  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
+*  or in the file LICENSE.txt.
+*
+*  As a counterpart to the access to the source code and  rights to copy,
+*  modify and redistribute granted by the license, users are provided only
+*  with a limited warranty  and the software's author,  the holder of the
+*  economic rights,  and the successive licensors  have only  limited
+*  liability. 
+*
+*  The fact that you are presently reading this means that you have had
+*  knowledge of the CeCILL-B license and that you accept its terms.
+* ------------------------------------------------------------------------ */                                                                         
 
-=========================================================================*/
 /**
  *\file
  *\brief  Class bbtk::Factory : can load and unload dynamic libraries containing 
@@ -28,6 +39,7 @@ PURPOSE.  See the above copyright notices for more information.
 #include "bbtkConnection.h"
 #include "bbtkConfigurationFile.h"
 #include "bbtkUtilities.h"
+#include "bbtkConfigurationFile.h"
 
 #include <sys/stat.h> // for struct stat stFileInfo
 
@@ -37,6 +49,7 @@ PURPOSE.  See the above copyright notices for more information.
 
 #include <cctype>    // std::toupper
 
+#include <time.h>
 
 namespace bbtk
 {
@@ -45,7 +58,7 @@ namespace bbtk
   /// Default ctor
   Factory::Pointer Factory::New()
   {
-    bbtkDebugMessage("Kernel",9,"Factory::New()"<<std::endl);
+    bbtkDebugMessage("kernel",9,"Factory::New()"<<std::endl);
     return MakePointer(new Factory());
   }
   //===================================================================
@@ -55,7 +68,7 @@ namespace bbtk
   Factory::Factory()
     : mExecuter()
   {
-    bbtkDebugMessage("Kernel",7,"Factory::Factory()"<<std::endl);
+    bbtkDebugMessage("kernel",7,"Factory()"<<std::endl);
   }
   //===================================================================
 
@@ -63,9 +76,9 @@ namespace bbtk
   /// Dtor
   Factory::~Factory()
   {
-    bbtkDebugMessageInc("Kernel",7,"Factory::~Factory()"<<std::endl);
+    bbtkDebugMessage("kernel",7,"==> ~Factory()"<<std::endl);
     CloseAllPackages();
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugMessage("kernel",7,"<== ~Factory()"<<std::endl);
   }
   //===================================================================
 
@@ -74,9 +87,9 @@ namespace bbtk
   //===================================================================
   void Factory::Reset()
   {
-    bbtkDebugMessageInc("Kernel",7,"Factory::Reset()"<<std::endl);
+    bbtkDebugMessage("kernel",7,"==> Factory::Reset()"<<std::endl);
     CloseAllPackages();
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugMessage("kernel",7,"<== Factory::Reset()"<<std::endl);
   }
   //===================================================================
 
@@ -93,13 +106,13 @@ namespace bbtk
     if (p!=0)
       {
        //===================================================================
-       bbtkMessage("Output",2,p->GetName()<<" "
+       bbtkMessage("output",2,p->GetName()<<" "
                    <<p->GetVersion()
                    <<" "
                    <<p->GetAuthor() << " Category(s) :"
                    <<p->GetCategory()
                    <<std::endl);
-       bbtkMessage("Output",2,p->GetDescription()<<std::endl);
+       bbtkMessage("output",2,p->GetDescription()<<std::endl);
        //===================================================================
        p->AddFactory(GetThisPointer<Factory>());
        mPackageMap[pkgname] = p;
@@ -136,7 +149,7 @@ namespace bbtk
   //
   // lastname : string before the last / (if any), or user supplied name
 
-    bbtkDebugMessageInc("Kernel",7,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
+    bbtkDebugMessageInc("kernel",7,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
     bbtkMessage("debug",1,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
 
     std::vector<std::string> package_paths;
@@ -154,7 +167,7 @@ namespace bbtk
     iUnload = mPackageMap.find(pkgname);
     if (iUnload != mPackageMap.end())
     {
-      bbtkMessage("Output",2,"["<< pkgname <<"] already loaded" << std::endl);
+      bbtkMessage("output",2,"["<< pkgname <<"] already loaded" << std::endl);
       return;
     }
 
@@ -195,7 +208,7 @@ namespace bbtk
           // The following is *NOT* a debug time message :
           // It's a user intended message.
           // Please don't remove it.
-           bbtkMessage("Output",3,"   [" <<libname 
+           bbtkMessage("output",3,"   [" <<libname 
                        <<"] : doesn't exist" <<std::endl);
           }
           else
@@ -239,7 +252,7 @@ namespace bbtk
         // The following is *NOT* a debug time message :
         // It's a user intended message.
         // Please don't remove it.
-          bbtkMessage("Output",3,
+          bbtkMessage("output",3,
                      "   [" <<libname <<"] : doesn't exist" <<std::endl);
            continue;  // try next path
         }
@@ -251,8 +264,8 @@ namespace bbtk
         if (ok)
         {
            bbtkMessage("debug",2,"   OK"<<std::endl);
-           break; // a package was found; we stop iterating
         }
+       break; // we stop iterating even if error : have to signal it to user
     } //------------------ // end for ( package_paths.begin();i!=package_paths.end() )
 
 }
@@ -267,10 +280,12 @@ namespace bbtk
       {
 #if defined(__GNUC__)
         bbtkError("Could not load package ["<< pkgname
-                  <<"] :" << std::endl << "   " << dlerror());
+                  <<"] :" << std::endl 
+                 << "  Opening "<<libname<<" failed"
+                 << "  Reason: "<< dlerror());
 #elif defined(_WIN32)
         bbtkError("Could not load package ["<<pkgname
-                 <<"] : " << std::endl << "   " <<libname<<" not found");
+                 <<"] :"<< std::endl << "   Error loading " <<libname);
 
     // look how to get the error message on win
     //<<dlerror());
@@ -279,7 +294,7 @@ namespace bbtk
 #endif
       }
     }
-    bbtkMessage("Output",2,"[" << libname << "] loaded" << std::endl);
+    bbtkMessage("output",2,"[" << libname << "] loaded" << std::endl);
 
   }
 
@@ -290,7 +305,7 @@ namespace bbtk
   /// If the entry is found in the map, calls ClosePackage
  void Factory::UnLoadPackage( const std::string& name )
  {
-    bbtkDebugMessageInc("Kernel",7,"Factory::UnLoadPackage(\""
+    bbtkDebugMessageInc("kernel",7,"Factory::UnLoadPackage(\""
                        <<name<<"\")"<<std::endl);
   
     PackageMapType::iterator i;
@@ -301,7 +316,7 @@ namespace bbtk
                 <<"\" : package not loaded !");
     }
     ClosePackage(i);
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
   }
   //===================================================================
 
@@ -309,13 +324,33 @@ namespace bbtk
   //===================================================================
   void Factory::CloseAllPackages()
   {
-    bbtkDebugMessageInc("Kernel",7,"Factory::CloseAllPackages()"<<std::endl);
-    while (mPackageMap.begin() != mPackageMap.end())
-      {
-        PackageMapType::iterator i = mPackageMap.begin();
-        ClosePackage(i);
-      }
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugMessageInc("kernel",7,"Factory::CloseAllPackages()"<<std::endl);
+    
+    std::vector< Package::WeakPointer > mAlive;  
+    do {
+      mAlive.clear();  
+      while (mPackageMap.begin() != mPackageMap.end())
+       {
+         PackageMapType::iterator i = mPackageMap.begin();
+         Package::WeakPointer p = i->second;
+         ClosePackage(i);
+         if (p.lock()) mAlive.push_back(p);
+       }
+      std::vector< Package::WeakPointer >::iterator i;
+      for (i=mAlive.begin();i!=mAlive.end();++i)
+       {
+         // If not dead : reinsert
+         if (i->lock())
+           {
+             bbtkDebugMessage("kernel",7,"Package "<<i->lock()->GetName()
+                              <<" still alive"<<std::endl);
+             // InsertPackage(i->lock());
+           }
+       }      
+    }
+    while (mPackageMap.size()>0);
+
+    bbtkDebugDecTab("kernel",7);
   }
   //===================================================================
 
@@ -333,7 +368,7 @@ namespace bbtk
  /// Finally erases the package entry in the packages map
  void Factory::ClosePackage(PackageMapType::iterator& i) 
   {   
-     bbtkDebugMessageInc("Kernel",7,"Factory::ClosePackage(\""
+     bbtkDebugMessageInc("kernel",7,"Factory::ClosePackage(\""
                          <<i->second->GetName()
                         <<"\")"<<std::endl);
 
@@ -344,102 +379,104 @@ namespace bbtk
      // remove the entry in the map
      mPackageMap.erase(i);
      // Release the package if not already destroyed
-     if (p.lock()) Package::Release(p);
-
-
-     bbtkDebugDecTab("Kernel",7);
+     if (p.lock()) 
+       {
+        Package::Release(p);
+       }
+     bbtkDebugDecTab("kernel",7);
   }
   //===================================================================
   
 
 
   //===================================================================  
-  /// Displays the list of packages loaded
-  void Factory::PrintPackages(bool details, bool adaptors) const
+  void Factory::PrintHelpListPackages(bool details, bool adaptors) const
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::PrintPackages"<<std::endl);
+    bbtkDebugMessageInc("kernel",9,"Factory::PrintPackages"<<std::endl);
 
     PackageMapType::const_iterator i;
     for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
     {
-      bbtkMessage("Help",1, i->first << std::endl);
+      bbtkMessage("help",1, i->first << std::endl);
       if (details) {
-         i->second->PrintBlackBoxes(false,adaptors);
+         i->second->PrintHelpListDescriptors(false,adaptors);
       }
     }
 
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
   }
   //===================================================================
 
   //===================================================================  
   /// Displays help on a package
-  void Factory::HelpPackage(const std::string& name, bool adaptors) const
+  void Factory::PrintHelpPackage(const std::string& name, bool adaptors) const
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::HelpPackage(\""<<name<<"\")"
+    bbtkDebugMessageInc("kernel",9,"Factory::PrintHelpPackage(\""
+                       <<name<<"\")"
                         <<std::endl);
 
     PackageMapType::const_iterator i = mPackageMap.find(name);
     if ( i != mPackageMap.end() ) 
       {
-      bbtkMessage("Help",1, "Package "<<i->first<<" ");
+      bbtkMessage("help",1, "Package "<<i->first<<" ");
       
       if (i->second->GetVersion().length()>0)
-        bbtkMessageCont("Help",1,"v" <<i->second->GetVersion());
+        bbtkMessageCont("help",1,"v" <<i->second->GetVersion());
         
       if (i->second->GetAuthor().length()>0)
-        bbtkMessageCont("Help",1,"- "<<i->second->GetAuthor());
+        bbtkMessageCont("help",1,"- "<<i->second->GetAuthor());
         
       if (i->second->GetCategory().length()>0)
-        bbtkMessageCont("Help",1,"- "<<i->second->GetCategory());        
+        bbtkMessageCont("help",1,"- "<<i->second->GetCategory());        
         
-      bbtkMessageCont("Help",1,std::endl);
-      bbtkIncTab("Help",1);
-      bbtkMessage("Help",1,i->second->GetDescription()<<std::endl);
-      if (i->second->GetNumberOfBlackBoxes()>0) 
+      bbtkMessageCont("help",1,std::endl);
+      bbtkIncTab("help",1);
+      bbtkMessage("help",1,i->second->GetDescription()<<std::endl);
+      if (i->second->GetNumberOfDescriptors()>0) 
         {
-          bbtkMessage("Help",1, "Black boxes : "<<std::endl);
-          i->second->PrintBlackBoxes(true,adaptors);
+          bbtkMessage("help",1, "Black boxes : "<<std::endl);
+          i->second->PrintHelpListDescriptors(true,adaptors);
         }
       else 
         {
-          bbtkMessage("Help",1, "No black boxes"<<std::endl);
+          bbtkMessage("help",1, "No black boxes"<<std::endl);
         }
-      bbtkDecTab("Help",1);
+      bbtkDecTab("help",1);
       }
     else 
       {
-      bbtkDebugDecTab("Kernel",9);
+      bbtkDebugDecTab("kernel",9);
       bbtkError("package \""<<name<<"\" unknown");
       }
     
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
   }
   //===================================================================
 
   //===================================================================
   /// Prints help on the black box of type <name>
   /// Returns the package to which it belongs
-  void Factory::HelpBlackBox(const std::string& name, 
+  void Factory::PrintHelpDescriptor(const std::string& name, 
                             std::string& package,
                             bool full) const
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::HelpBlackBox(\""<<name<<"\")"
+    bbtkDebugMessageInc("kernel",9,"Factory::PrintHelpDescriptor(\""
+                       <<name<<"\")"
                         <<std::endl);
 
     bool found = false;
     PackageMapType::const_iterator i;
     for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
       {
-      if (i->second->ContainsBlackBox(name)) 
+      if (i->second->ContainsDescriptor(name)) 
         {
-          i->second->HelpBlackBox(name,full);
+          i->second->PrintHelpDescriptor(name,full);
              package = i->second->GetName();
           found = true;
         }
       }
     
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
     if (!found) 
       {
       bbtkError("No package of the factory contains any black box <"
@@ -453,13 +490,13 @@ namespace bbtk
   /// Inserts a package in the factory
   void Factory::InsertPackage( Package::Pointer p )
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::InsertPackage(\""<<
+    bbtkDebugMessageInc("kernel",9,"Factory::InsertPackage(\""<<
                         p->GetName()<<"\")"<<std::endl);
 
     p->AddFactory(GetThisPointer<Factory>());
     mPackageMap[p->GetName()] = p;
 
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
   }
   //===================================================================
   
@@ -467,7 +504,7 @@ namespace bbtk
   /// Removes a package from the factory (and deletes it)
   void Factory::RemovePackage( Package::Pointer p )
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::RemovePackage(\""<<
+    bbtkDebugMessageInc("kernel",9,"Factory::RemovePackage(\""<<
                         p->GetName()<<"\")"<<std::endl);
 
     PackageMapType::iterator i;
@@ -486,7 +523,7 @@ namespace bbtk
                  p->GetName()<<"\") : package absent from factory");
       }
 
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
   }
   //===================================================================
   
@@ -496,7 +533,7 @@ namespace bbtk
   BlackBox::Pointer Factory::NewBlackBox(const std::string& type, 
                                  const std::string& name) const
   {
-    bbtkDebugMessageInc("Kernel",7,"Factory::NewBlackBox(\""
+    bbtkDebugMessageInc("kernel",7,"Factory::NewBlackBox(\""
                         <<type<<"\",\""<<name<<"\")"<<std::endl);
 
     BlackBox::Pointer b; 
@@ -511,7 +548,7 @@ namespace bbtk
        bbtkError("black box type \""<<type<<"\" unknown");
       } 
 
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
     return b;
   }
   //===================================================================
@@ -522,7 +559,7 @@ namespace bbtk
                                const DataInfo& typeout,
                                const std::string& name) const
   {
-    bbtkDebugMessageInc("Kernel",8,"Factory::NewAdaptor("
+    bbtkDebugMessageInc("kernel",8,"Factory::NewAdaptor("
                         <<typein<<","
                         <<typeout<<",\""
                         <<name<<"\")"<<bbtkendl);
@@ -541,7 +578,7 @@ namespace bbtk
                  <<" adaptor available");
       } 
     
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
     return b; 
   }
   //===================================================================
@@ -553,7 +590,7 @@ namespace bbtk
                                      const DataInfo& typeout,
                                      const std::string& name) const
   {
-    bbtkDebugMessageInc("Kernel",8,"Factory::NewWidgetAdaptor(<"
+    bbtkDebugMessageInc("kernel",8,"Factory::NewWidgetAdaptor(<"
                         <<typein<<">,<"
                         <<typeout<<">,\""
                         <<name<<"\")"<<bbtkendl);
@@ -574,7 +611,7 @@ namespace bbtk
                  <<"> widget adaptor available");
       } 
     
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
     return b; 
   }
   //===================================================================
@@ -585,7 +622,7 @@ namespace bbtk
                                  const DataInfo& typeout,
                                  std::string& adaptor) const
   {
-    bbtkDebugMessageInc("Kernel",8,"Factory::FindAdaptor(<"
+    bbtkDebugMessageInc("kernel",8,"Factory::FindAdaptor(<"
                         <<typein<<">,<"
                         <<typeout<<">)"<<bbtkendl);
     
@@ -606,7 +643,7 @@ namespace bbtk
       } 
     */
 
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
     return b; 
   }
   //===================================================================
@@ -617,7 +654,7 @@ namespace bbtk
                                  const DataInfo& typeout,
                                  std::string& adaptor) const
   {
-    bbtkDebugMessageInc("Kernel",8,"Factory::FindWidgetAdaptor(<"
+    bbtkDebugMessageInc("kernel",8,"Factory::FindWidgetAdaptor(<"
                         <<typein<<">,<"
                         <<typeout<<">)"<<bbtkendl);
     
@@ -630,7 +667,7 @@ namespace bbtk
                                                  adaptor);
        if (b) break; 
       }
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
     return b; 
   }
   //===================================================================
@@ -642,7 +679,7 @@ namespace bbtk
                                  std::string& widget,
                                  std::string& adaptor) const
   {
-    bbtkDebugMessageInc("Kernel",8,"Factory::FindWidgetAdaptor(<"
+    bbtkDebugMessageInc("kernel",8,"Factory::FindWidgetAdaptor(<"
                         <<typein<<">,<"
                         <<typeout<<">)"<<bbtkendl);
     
@@ -659,7 +696,7 @@ namespace bbtk
     if (!b) 
       {
        // Look for a widget adaptor with good nature out
-       bbtkMessage("Kernel",5,
+       bbtkMessage("kernel",5,
                    "*** Looking for a two pieces widget adaptor for : "
                    << typein << "->"<<typeout<<std::endl);
        for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
@@ -676,7 +713,7 @@ namespace bbtk
                     )
                  {
                    widget = j->second.lock()->GetTypeName();
-                   bbtkMessage("Kernel",5,
+                   bbtkMessage("kernel",5,
                                "===> Found first part : "<<widget
                                << " "<<j->first.mTypeIn<<"->"
                                <<j->first.mTypeOut<<std::endl);
@@ -685,14 +722,14 @@ namespace bbtk
                    b = FindAdaptor( ti, to, adaptor );
                    if (b) 
                      {
-                       bbtkMessage("Kernel",5,
+                       bbtkMessage("kernel",5,
                                    "===> Found second part : "<<adaptor
                                    <<std::endl);
                        break;
                      }
                    else
                      {
-                       bbtkMessage("Kernel",5,
+                       bbtkMessage("kernel",5,
                                    "===> No second part found"<<std::endl);
                      }
                  }
@@ -700,7 +737,7 @@ namespace bbtk
            if (b) break;
          }
       }
-    bbtkDebugDecTab("Kernel",7);
+    bbtkDebugDecTab("kernel",7);
     return b; 
   }
   //===================================================================
@@ -712,7 +749,7 @@ namespace bbtk
                                             BlackBox::Pointer to,
                                             const std::string& input) const
   {
-    bbtkDebugMessage("Kernel",7,"Factory::NewConnection(\""
+    bbtkDebugMessage("kernel",7,"Factory::NewConnection(\""
                       <<from->bbGetName()<<"\",\""<<output<<"\",\""
                       <<to->bbGetName()<<"\",\""<<input
                       <<"\")"<<std::endl);
@@ -727,35 +764,35 @@ namespace bbtk
   //===================================================================
   Package::Pointer Factory::GetPackage(const std::string& name) const
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::GetPackage(\""<<name<<"\")"
+    bbtkDebugMessageInc("kernel",9,"Factory::GetPackage(\""<<name<<"\")"
                          <<std::endl);
 
     PackageMapType::const_iterator i = mPackageMap.find(name);
     if ( i != mPackageMap.end() ) 
     {
-      bbtkDebugDecTab("Kernel",9); 
+      bbtkDebugDecTab("kernel",9); 
       return i->second;
     }
     else 
     {
-       bbtkDebugDecTab("Kernel",9);
+       bbtkDebugDecTab("kernel",9);
        bbtkError("package \""<<name<<"\" unknown");
     }
     
-    bbtkDebugDecTab("Kernel",9);  
+    bbtkDebugDecTab("kernel",9);  
   }
   //===================================================================
   
 
   //===================================================================
-  void Factory::CheckPackages() const
+  void Factory::Check() const
   {
     bbtkMessage("debug",1,"****** Checking Factory "<<(void*)this
                 <<std::endl);
     PackageMapType::const_iterator i;
     for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
       {
-       i->second->CheckBoxes();
+       i->second->Check();
       }
     bbtkMessage("debug",1,"****** Checking Factory "<<(void*)this
                <<" ... OK"<<std::endl);
@@ -766,7 +803,7 @@ namespace bbtk
   void Factory::WriteDotFilePackagesList(FILE *ff)
   {
 
-    bbtkDebugMessageInc("Kernel",9,"Factory::WriteDotFilePackagesList()"
+    bbtkDebugMessageInc("kernel",9,"Factory::WriteDotFilePackagesList()"
                          <<std::endl);
 
     fprintf( ff , "\n");
@@ -784,7 +821,7 @@ namespace bbtk
        fprintf(ff,"  %s [shape=ellipse, URL=\"%s\"]%s\n",i->first.c_str(),url.c_str(),";" );
     }
     fprintf( ff , "}\n\n");
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
   }
   //===================================================================
 
@@ -796,41 +833,41 @@ namespace bbtk
    PackageMapType::const_iterator i;
    for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
    {
-      if (i->second->ContainsBlackBox(name)) 
-      {
+     if (i->second->ContainsDescriptor(name)) 
+       {
          std::string separator = ConfigurationFile::GetInstance().Get_file_separator ();
-
-            // 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();
          std::string directory = "\"" + default_doc_dir + separator + "temp_dir"  +separator + "\"";
          std::string filename2 =  default_doc_dir + separator + "temp_dir" + separator + "tmp.html"; 
-
+        
 #if defined(_WIN32)  
-        std::string command("start \"Titre\" /D ");
+        std::string command("start \"Titre\" /D ");
 #else 
-        std::string command("gnome-open ");
+        std::string command("gnome-open ");
 #endif
-        command=command + directory +" tmp.html";
-        FILE *ff;
-        ff=fopen(filename2.c_str(),"w");
-
-        fprintf(ff,"<html><head><title>TMP</title> <script type=\"text/javascript\"> <!--\n");
-        fprintf(ff,"  window.location=\"%s#%s\";\n" , i->second->GetDocURL().c_str(),name.c_str() );
-        fprintf(ff,"//--></script></head><body></body></html>\n");
-
-
-        //fprintf(ff, "<a  href=\"%s#%s\">Link</a>\n", i->second->GetDocURL().c_str(),name.c_str() );
-        fclose(ff);
-        system( command.c_str() );      
-        found = true;
-     }
+        command=command + directory +" tmp.html";
+        FILE *ff;
+        ff=fopen(filename2.c_str(),"w");
+        
+        fprintf(ff,"<html><head><title>TMP</title> <script type=\"text/javascript\"> <!--\n");
+        fprintf(ff,"  window.location=\"%s#%s\";\n" , i->second->GetDocURL().c_str(),name.c_str() );
+        fprintf(ff,"//--></script></head><body></body></html>\n");
+        
+        
+        //fprintf(ff, "<a  href=\"%s#%s\">Link</a>\n", i->second->GetDocURL().c_str(),name.c_str() );
+        fclose(ff);
+        system( command.c_str() );      
+        found = true;
+       }
    }
-    
-   bbtkDebugDecTab("Kernel",9);
+   
+   bbtkDebugDecTab("kernel",9);
    if (!found) 
    {
-      bbtkError("No package of the factory contains any black box <"
-                <<name<<">");
+     bbtkError("No package of the factory contains any black box <"
+              <<name<<">");
    }
  }
     
@@ -840,7 +877,7 @@ namespace bbtk
   void Factory::CreateHtmlIndex(IndexEntryType type, 
                                const std::string& filename)
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::CreateHtmlIndex(\""
+    bbtkDebugMessageInc("kernel",9,"Factory::CreateHtmlIndex(\""
                        <<filename<<"\")"<<bbtkendl);
     
     std::string title;
@@ -854,9 +891,9 @@ namespace bbtk
       {
        Package::Pointer pack = i->second;
        if (pack->GetName()=="user") continue;
-       Package::BlackBoxMapType::const_iterator j;
-       for (j = pack->GetBlackBoxMap().begin(); 
-            j!= pack->GetBlackBoxMap().end(); 
+       Package::DescriptorMapType::const_iterator j;
+       for (j = pack->GetDescriptorMap().begin(); 
+            j!= pack->GetDescriptorMap().end(); 
             ++j)
          {
            
@@ -976,7 +1013,9 @@ namespace bbtk
            s << "&nbsp;&nbsp;-&nbsp;&nbsp;\n"; 
 
            s << "<a name=\"doxygen\"></a>\n"; 
-           s << "<a href=..\\doxygen\\" << ii->first << "/main.html>(Doxygen documentation of the source)</a>\n"; 
+//EED 26Mars2009                 
+               std::string bin_path = bbtk::ConfigurationFile::GetInstance().Get_bin_path();
+           s << "<a href=" << bin_path <<"/../share/bbtk/doc/doxygen/" << ii->first << "/main.html>(Doxygen documentation of the source)</a>\n"; 
          }
        else 
          {
@@ -1024,7 +1063,7 @@ namespace bbtk
     //----------------------
 
     // End
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugDecTab("kernel",9);
   }
 
  //==========================================================================