]> Creatis software - crea.git/commitdiff
Feature #1711 CreaDevManager application implementation
authorDaniel Gonzalez <daniel@daniel.laptop>
Tue, 25 Jun 2013 13:49:43 +0000 (15:49 +0200)
committerDaniel Gonzalez <daniel@daniel.laptop>
Tue, 25 Jun 2013 13:49:43 +0000 (15:49 +0200)
Feature: Now detecting packages by their cmakelists file. The bbtk_package_name variable searched.
Fix: code file checking when filenames dont have type is crashing.

lib/creaDevManagerLib/modelCDMAppli.cpp
lib/creaDevManagerLib/modelCDMApplication.cpp
lib/creaDevManagerLib/modelCDMFolder.cpp
lib/creaDevManagerLib/modelCDMLib.cpp
lib/creaDevManagerLib/modelCDMLibrary.cpp
lib/creaDevManagerLib/modelCDMPackage.cpp
lib/creaDevManagerLib/modelCDMPackageSrc.cpp
lib/creaDevManagerLib/modelCDMProject.cpp
lib/creaDevManagerLib/modelCDMProject.h

index 70471a785dc60e13d4b5b089a9dcabc7676f16f4..c4dbd02fefca7da31b09716e9dd561d51511d8cf 100644 (file)
@@ -91,7 +91,11 @@ modelCDMAppli::modelCDMAppli(modelCDMIProjectTreeNode* parent, const std::string
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -358,7 +362,11 @@ const bool modelCDMAppli::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index d214ac4cf97bae0b393eb24720eb89b2f8213d02..cabfd7c7a259326bbf0f3eb6a991cdf4d4bc3d21 100644 (file)
@@ -123,7 +123,11 @@ modelCDMApplication::modelCDMApplication(modelCDMIProjectTreeNode* parent, const
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -365,7 +369,11 @@ const bool modelCDMApplication::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index c2796e8cfa0f6891eae459ea718cef7e4d8a3b3f..01379ac7ccd49d8845a47581e72e43bd481452b9 100644 (file)
@@ -83,8 +83,14 @@ modelCDMFolder::modelCDMFolder(modelCDMIProjectTreeNode* parent, const std::stri
       while (cont)
         {
           std::string stdfileName = crea::wx2std(fileName);
+          std::cout << "analyzing " << stdfileName << std::endl;
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
+          std::cout << "fileType: " << fileType <<std::endl;
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -226,7 +232,11 @@ const bool modelCDMFolder::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index 994ae85a2684a9bc850c10a73a36fff7dfcc07cf..48df51b85c29581095b42db809baa4ab4449cbe0 100644 (file)
@@ -92,7 +92,11 @@ modelCDMLib::modelCDMLib(modelCDMIProjectTreeNode* parent, const std::string& pa
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -282,7 +286,11 @@ const bool modelCDMLib::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
 
           //if CMakeLists, create CMakeLists
index c3dcc6a00a915e3ac072ee6d334bba26cd740021..4e831ba6a2fe3a1b4f2eb8950e61d23502a3a9de 100644 (file)
@@ -121,7 +121,11 @@ modelCDMLibrary::modelCDMLibrary(modelCDMIProjectTreeNode* parent, const std::st
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -309,7 +313,11 @@ const bool modelCDMLibrary::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index f6fc8bc703e3b7e6d83ca5ea36a05b62ad7a7a89..377a11bb8303629c5a2c8af0858276e1a600004d 100644 (file)
@@ -164,7 +164,11 @@ modelCDMPackage::modelCDMPackage(modelCDMIProjectTreeNode* parent, const std::st
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -544,7 +548,11 @@ const bool modelCDMPackage::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index 97e4ddec9f3b362ba3ec5058c6159f2ec8f14d66..4654e58cf3a462951eafd26a048c4f4e8c58aa79 100644 (file)
@@ -89,7 +89,12 @@ modelCDMPackageSrc::modelCDMPackageSrc(modelCDMIProjectTreeNode* parent, const s
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
+
           modelCDMCodeFile* file;
 
           if(stdfileName.substr(0,2) == "bb")
@@ -330,7 +335,11 @@ const bool modelCDMPackageSrc::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index dae81a13434f081c9e51f12e8f671dc4e019ef6c..886a3659c4854cf4163be399bfb3b9f5c4c8de36 100644 (file)
@@ -170,17 +170,54 @@ modelCDMProject::modelCDMProject(
               this->lib = new modelCDMLib(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
               this->children.push_back(this->lib);
             }
-          //if package , create package
-          else if(stdfileName.size() > 9 && stdfileName.substr(0,5) == "bbtk_" && stdfileName.substr(stdfileName.size()-4,4) == "_PKG")
-            {
-              modelCDMPackage* package = new modelCDMPackage(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
-              this->packages.push_back(package);
-              this->children.push_back(package);
-            }
-          //if is an unknown folder, create folder
           else
             {
-              this->children.push_back(new modelCDMFolder(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1));
+              bool isPackage = false;
+
+              // check if cmakelists file exist in folder.
+              std::string tmppath = this->GetPath() + CDMUtilities::SLASH + stdfileName + CDMUtilities::SLASH + "CMakeLists.txt";
+              CDMUtilities::CMLFile CMfile = CDMUtilities::readCMLFile(tmppath.c_str());
+              if (CMfile.size() > 0)
+                {
+                  std::cout << "-->" << stdfileName << " ::has cmakelists" << std::endl;
+                  // check if cmakelists file has the SET(BBTK_PACKAGE_NAME [pkgname]) instruction.
+                  for (int i = 0; !isPackage && i < CMfile.size(); ++i) {
+                    if (CMfile[i].first == "command" && CMfile[i].second.size() > 1)
+                      {
+                        std::string cm = CMfile[i].second[0];
+
+                        int pos = 1;
+                        while(pos < CMfile[i].second.size()-1 && !isalpha(CMfile[i].second[pos][0]))
+                          pos++;
+
+                        std::string pm1 = CMfile[i].second[pos];
+
+                        std::cout << cm << " " << pm1 << std::endl;
+                        std::transform(cm.begin(), cm.end(), cm.begin(), ::toupper);
+                        std::transform(pm1.begin(), pm1.end(), pm1.begin(), ::toupper);
+                        if(cm == "SET" && pm1 == "BBTK_PACKAGE_NAME")
+                          {
+                            isPackage = true;
+                          }
+                      }
+                  }
+                }
+
+              // if package, create package
+              if(isPackage)
+                {
+                  std::cout << "is Package\n";
+                  modelCDMPackage* package = new modelCDMPackage(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
+                  std::cout << "Package created\n";
+                  this->packages.push_back(package);
+                  this->children.push_back(package);
+                }
+              // if is an unknown folder, create folder
+              else
+                {
+                  this->children.push_back(new modelCDMFolder(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1));
+                }
+
             }
 
           cont = dir.GetNext(&fileName);
@@ -191,7 +228,11 @@ modelCDMProject::modelCDMProject(
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
@@ -596,7 +637,7 @@ const bool modelCDMProject::Refresh(std::string*& result)
 
             }
           //if package , create package
-          else if(stdfileName.size() > 9 && stdfileName.substr(0,5) == "bbtk_" && stdfileName.substr(stdfileName.size()-4,4) == "_PKG")
+          /*else if(stdfileName.size() > 9 && stdfileName.substr(0,5) == "bbtk_" && stdfileName.substr(stdfileName.size()-4,4) == "_PKG")
             {
               bool found = false;
               for (int i = 0; !found && i < (int)(this->packages.size()); i++)
@@ -618,26 +659,85 @@ const bool modelCDMProject::Refresh(std::string*& result)
                   this->children.push_back(package);
                 }
 
-            }
-          //if is an unknown folder, create folder
+            }*/
+          // package or folder
           else
             {
-              bool found = false;
-              for (int i = 0; !found && i < (int)(this->children.size()); i++)
+              bool isPackage = false;
+
+              // check if cmakelists file exist in folder.
+              std::string tmppath = this->GetPath() + CDMUtilities::SLASH + stdfileName + CDMUtilities::SLASH + "CMakeLists.txt";
+              CDMUtilities::CMLFile CMfile = CDMUtilities::readCMLFile(tmppath.c_str());
+              if (CMfile.size() > 0)
+
                 {
-                  if (this->children[i]->GetName() == stdfileName)
+                  // check if cmakelists file has the SET(BBTK_PACKAGE_NAME [pkgname]) instruction.
+                  for (int i = 0; !isPackage && i < CMfile.size(); ++i) {
+                    if (CMfile[i].first == "command" && CMfile[i].second.size() > 1)
+                      {
+                        std::string cm = CMfile[i].second[0];
+
+                        int pos = 1;
+                        while(pos < CMfile[i].second.size()-1 && !isalpha(CMfile[i].second[pos][0]))
+                          pos++;
+
+                        std::string pm1 = CMfile[i].second[pos];
+
+                        std::cout << cm << " " << pm1 << std::endl;
+                        std::transform(cm.begin(), cm.end(), cm.begin(), ::toupper);
+                        std::transform(pm1.begin(), pm1.end(), pm1.begin(), ::toupper);
+                        if(cm == "SET" && pm1 == "BBTK_PACKAGE_NAME")
+                          {
+                            isPackage = true;
+                          }
+                      }
+                  }
+                }
+
+              // if package, create package
+              if (isPackage)
+                {
+                  bool found = false;
+                  for (int i = 0; !found && i < (int)(this->packages.size()); i++)
                     {
-                      found = true;
-                      checked[i] = true;
-                      if(!this->children[i]->Refresh(result))
-                        return false;
+                      if (this->packages[i]->GetName() == stdfileName)
+                        {
+                          found = true;
+                          int pos = std::find(this->children.begin(), this->children.end(), this->packages[i]) - this->children.begin();
+                          checked[pos] = true;
+                          checkedPackages[i] = true;
+                          if(!this->packages[i]->Refresh(result))
+                            return false;
+                        }
                     }
-                }
 
-              if(!found)
+                  if (!found)
+                    {
+                      modelCDMPackage* package = new modelCDMPackage(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
+                      this->packages.push_back(package);
+                      this->children.push_back(package);
+                    }
+                }
+              //if is an unknown folder, create folder
+              else
                 {
-                  modelCDMFolder* folder = new modelCDMFolder(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
-                  this->children.push_back(folder);
+                  bool found = false;
+                  for (int i = 0; !found && i < (int)(this->children.size()); i++)
+                    {
+                      if (this->children[i]->GetName() == stdfileName)
+                        {
+                          found = true;
+                          checked[i] = true;
+                          if(!this->children[i]->Refresh(result))
+                            return false;
+                        }
+                    }
+
+                  if(!found)
+                    {
+                      modelCDMFolder* folder = new modelCDMFolder(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
+                      this->children.push_back(folder);
+                    }
                 }
             }
 
@@ -649,7 +749,11 @@ const bool modelCDMProject::Refresh(std::string*& result)
         {
           std::string stdfileName = crea::wx2std(fileName);
           std::size_t fileTypePos = stdfileName.find_last_of(".");
-          std::string fileType = stdfileName.substr(fileTypePos);
+          std::string fileType;
+          if(fileTypePos != std::string::npos)
+            fileType = stdfileName.substr(fileTypePos);
+          else
+            fileType = "";
 
           //if CMakeLists, create CMakeLists
           if(stdfileName == "CMakeLists.txt")
index be8f2442fecea90518d226f0b9c5ec4de544ca6a..c585ea044fc648a895c629b83457f409f4fd45b7 100644 (file)
@@ -201,7 +201,7 @@ public:
    */
   modelCDMIProjectTreeNode* CreateBlackBox(
       const std::string& name,
-      const std::string& package = "", //if empty converts into "/bbtk_*projectName*_PKG"
+      const std::string& package = "", //if empty converts into "[projectName]"
       const std::string& authors = "unknown",
       const std::string& authorsEmail = "",
       const std::string& categories = "empty",