From 76962b2ed3513cee0f6afd83b9d93e2b43bdefc5 Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Tue, 25 Jun 2013 15:49:43 +0200 Subject: [PATCH] Feature #1711 CreaDevManager application implementation 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 | 12 +- lib/creaDevManagerLib/modelCDMApplication.cpp | 12 +- lib/creaDevManagerLib/modelCDMFolder.cpp | 14 +- lib/creaDevManagerLib/modelCDMLib.cpp | 12 +- lib/creaDevManagerLib/modelCDMLibrary.cpp | 12 +- lib/creaDevManagerLib/modelCDMPackage.cpp | 12 +- lib/creaDevManagerLib/modelCDMPackageSrc.cpp | 13 +- lib/creaDevManagerLib/modelCDMProject.cpp | 154 +++++++++++++++--- lib/creaDevManagerLib/modelCDMProject.h | 2 +- 9 files changed, 203 insertions(+), 40 deletions(-) diff --git a/lib/creaDevManagerLib/modelCDMAppli.cpp b/lib/creaDevManagerLib/modelCDMAppli.cpp index 70471a7..c4dbd02 100644 --- a/lib/creaDevManagerLib/modelCDMAppli.cpp +++ b/lib/creaDevManagerLib/modelCDMAppli.cpp @@ -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") diff --git a/lib/creaDevManagerLib/modelCDMApplication.cpp b/lib/creaDevManagerLib/modelCDMApplication.cpp index d214ac4..cabfd7c 100644 --- a/lib/creaDevManagerLib/modelCDMApplication.cpp +++ b/lib/creaDevManagerLib/modelCDMApplication.cpp @@ -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") diff --git a/lib/creaDevManagerLib/modelCDMFolder.cpp b/lib/creaDevManagerLib/modelCDMFolder.cpp index c2796e8..01379ac 100644 --- a/lib/creaDevManagerLib/modelCDMFolder.cpp +++ b/lib/creaDevManagerLib/modelCDMFolder.cpp @@ -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 <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") diff --git a/lib/creaDevManagerLib/modelCDMProject.h b/lib/creaDevManagerLib/modelCDMProject.h index be8f244..c585ea0 100644 --- a/lib/creaDevManagerLib/modelCDMProject.h +++ b/lib/creaDevManagerLib/modelCDMProject.h @@ -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", -- 2.45.0