]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkFactory.cxx
#2536 BBTK Feature New Normal - wt-version Package
[bbtk.git] / kernel / src / bbtkFactory.cxx
index 669a9fbc7cfe05bc69a60627b554cec70568a28e..d541db35b9203e89b984a63daa7c2dd1a7760eb5 100644 (file)
@@ -548,23 +548,47 @@ namespace bbtk
 
     bbtkDebugDecTab("kernel",9);
   }
-  //===================================================================
   
 
-//     ups3 EED borrame        
+  //===================================================================
        std::string Factory::GetPackageNameOfaBlackBox(std::string boxType)
        {
-               std::string result="<void bbtk package name>";
+               std::string packageName="<void bbtk package name>";
                PackageMapType::const_iterator i;
-               for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
-               {
-                       if ( i->second->ifBoxExist( boxType ) == true)
+
+               std::size_t found = boxType.find(":");
+               if (found!=std::string::npos)
+               {
+                       packageName     = boxType.substr(0,found);
+               } else {
+                       for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
                        {
-                               result = i->first;
-                       }
-               }
-               return result;
+                               if ( i->second->ifBoxExist( boxType ) == true)
+                               {
+                                       packageName = i->first;
+                               } // if ifBoxExist
+                       } // for i
+
+               } // if found
+               return packageName;
        }
+
+  //===================================================================
+       std::string Factory::GetTypeNameOfaBlackBox(std::string boxType)
+       {
+               std::string typeName="<void bbtk type name>";
+
+               std::size_t found = boxType.find(":");
+               if (found!=std::string::npos)
+               {
+                       typeName                = boxType.substr(found+1);
+               } else {
+                       typeName=boxType;
+               } // if found
+               return typeName;
+       }
+
+
        
        
   //===================================================================
@@ -572,20 +596,52 @@ 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; 
     PackageMapType::const_iterator i;
-    for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
-      {
-      b = i->second->NewBlackBox(type,name);
-      if (b) break; 
-      }
+
+       std::string tmp = type;
+       std::string packageName = ((bbtk::Factory*)this)->GetPackageNameOfaBlackBox(tmp);
+       std::string type2               = ((bbtk::Factory*)this)->GetTypeNameOfaBlackBox(tmp);
+       i = mPackageMap.find(packageName);
+       if (i != mPackageMap.end())
+       {
+               b = i->second->NewBlackBox(type2,name);
+       } else {
+               b =BlackBox::Pointer();
+       }
+
+/*
+       std::size_t found = type.find(":");
+       if (found!=std::string::npos)
+       {
+               std::string packageName = type.substr(0,found);
+               std::string type2               = type.substr(found+1);
+               i = mPackageMap.find(packageName);
+               if (i != mPackageMap.end())
+               {
+               b = i->second->NewBlackBox(type2,name);
+               } else {
+                       b =BlackBox::Pointer();
+               }
+       } else {
+       for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i )
+       {
+               b = i->second->NewBlackBox(type,name);
+               if (b) break; 
+       } // for i
+
+       } // if found :
+*/
+
+
     if (!b) 
-      {
-       bbtkError("black box type \""<<type<<"\" unknown");
-      } 
+    {
+       bbtkError("black box type \""<<type<<"\" unknown");
+    }  // if !b
+
 
     bbtkDebugDecTab("kernel",7);
     return b;