#include "modelCDMPackage.h"
+#include <fstream>
+
#include "creaWx.h"
#include "wx/dir.h"
#include "CDMUtilities.h"
{
this->type = wxDIR_DIRS;
//Get Package Name
+
+ //TODO: set pathMakeLists for windows
+ std::string pathMakeLists = path + "/CMakeLists.txt";
+
+ std::ifstream confFile;
+ confFile.open((pathMakeLists).c_str());
+
+ std::string word;
+ while(confFile.is_open() && !confFile.eof())
+ {
+ //get sets
+ std::getline(confFile,word,'(');
+ std::vector<std::string> wordBits;
+ CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+ if(wordBits[wordBits.size()-1] == "SET")
+ {
+ //get package name
+ std::getline(confFile,word,')');
+ CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
+ if(wordBits[0] == "BBTK_PACKAGE_NAME")
+ {
+ word = wordBits[1];
+ for (int i = 2; i < wordBits.size(); i++)
+ {
+ word += " " + wordBits[i];
+ }
+ wordBits.clear();
+ CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
+
+ this->namePackage = wordBits[0];
+ }
+ else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_AUTHOR")
+ {
+ word = wordBits[1];
+ for (int i = 2; i < wordBits.size(); i++)
+ {
+ word += " " + wordBits[i];
+ }
+ wordBits.clear();
+ CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
+
+ this->authors = wordBits[0];
+ }
+ else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_DESCRIPTION")
+ {
+ word = wordBits[1];
+ for (int i = 2; i < wordBits.size(); i++)
+ {
+ word += " " + wordBits[i];
+ }
+ wordBits.clear();
+ CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
+
+ this->description = wordBits[0];
+ }
+ else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MAJOR_VERSION")
+ {
+ this->version = wordBits[1];
+ }
+ else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MINOR_VERSION")
+ {
+ this->version += "." + wordBits[1];
+ }
+ else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_BUILD_VERSION")
+ {
+ this->version += "." + wordBits[1];
+ }
+ }
+ }
+
std::vector<std::string> words;
std::string delimiters;
//TODO::fix for windows
delimiters = "/";
CDMUtilities::splitter::split(words, path, delimiters, CDMUtilities::splitter::no_empties);
this->name = words[words.size()-1];
- this->namePackage = this->name;
this->level = level;
this->path = path;
bool modelCDMPackage::SetAuthors(const std::string& authors, std::string*& result)
{
- //TODO: implement method
+ std::vector<std::string> words;
+ CDMUtilities::splitter::split(words, authors, ",\n", CDMUtilities::splitter::no_empties);
+ std::string authorsReal = words[0];
+ for (int i = 1; i < words.size(); i++)
+ {
+ authorsReal += "/" + words[i];
+ }
+
+ std::string line;
+ //opening original cmakelists
+ std::ifstream in((this->path + "/CMakeLists.txt").c_str());
+ if( !in.is_open())
+ {
+ result = new std::string("CMakeLists.txt file failed to open.");
+ return false;
+ }
+ //opening temporal cmakelists
+ std::ofstream out((this->path + "/CMakeLists.txt.tmp").c_str());
+ if( !out.is_open())
+ {
+ result = new std::string("CMakeLists.txt.tmp file failed to open.");
+ return false;
+ }
+ //copying contents from original to temporal and making changes
+ while (getline(in, line))
+ {
+ if(line.find("SET(${BBTK_PACKAGE_NAME}_AUTHOR") != std::string::npos)
+ line = "SET(${BBTK_PACKAGE_NAME}_AUTHOR \"" + authorsReal + "\")";
+ out << line << std::endl;
+ }
+ in.close();
+ out.close();
+ //delete old file and rename new file
+ std::string renameCommand = "mv " + this->path + "/CMakeLists.txt.tmp " + this->path + "/CMakeLists.txt";
+ if(system(renameCommand.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + renameCommand + "'.");
+ return false;
+ }
+
+ this->authors = authorsReal;
return true;
}
bool modelCDMPackage::SetVersion(const std::string& version, std::string*& result)
{
- //TODO: implement method
+ std::vector<std::string> vers;
+ CDMUtilities::splitter::split(vers, version, " .", CDMUtilities::splitter::no_empties);
+
+
+ std::string line;
+ //opening original cmakelists
+ std::ifstream in((this->path + "/CMakeLists.txt").c_str());
+ if( !in.is_open())
+ {
+ result = new std::string("CMakeLists.txt file failed to open.");
+ return false;
+ }
+ //opening temporal cmakelists
+ std::ofstream out((this->path + "/CMakeLists.txt.tmp").c_str());
+ if( !out.is_open())
+ {
+ result = new std::string("CMakeLists.txt.tmp file failed to open.");
+ return false;
+ }
+ //copying contents from original to temporal and making changes
+ while (getline(in, line))
+ {
+ if(line.find("SET(${BBTK_PACKAGE_NAME}_MAJOR_VERSION") != std::string::npos)
+ line = "SET(${BBTK_PACKAGE_NAME}_MAJOR_VERSION " + vers[0] + ")";
+ else if(line.find("SET(${BBTK_PACKAGE_NAME}_VERSION") != std::string::npos)
+ line = "SET(${BBTK_PACKAGE_NAME}_MINOR_VERSION " + vers[1] + ")";
+ else if(line.find("SET(${BBTK_PACKAGE_NAME}_BUILD_VERSION") != std::string::npos)
+ line = "SET(${BBTK_PACKAGE_NAME}_BUILD_VERSION " + vers[2] + ")";
+ out << line << std::endl;
+ }
+ in.close();
+ out.close();
+ //delete old file and rename new file
+ std::string renameCommand = "mv " + this->path + "/CMakeLists.txt.tmp " + this->path + "/CMakeLists.txt";
+ if(system(renameCommand.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + renameCommand + "'.");
+ return false;
+ }
+
+ this->version = vers[0] + "." + vers[1] + "." + vers[2];
return true;
}
bool modelCDMPackage::SetDescription(const std::string& description, std::string*& result)
{
- //TODO: implement method
+ std::vector<std::string> words;
+ CDMUtilities::splitter::split(words, description, " \n", CDMUtilities::splitter::no_empties);
+ std::string descriptionReal = words[0];
+ for (int i = 1; i < words.size(); i++)
+ {
+ descriptionReal += " " + words[i];
+ }
+
+ std::string line;
+ //opening original cmakelists
+ std::ifstream in((this->path + "/CMakeLists.txt").c_str());
+ if( !in.is_open())
+ {
+ result = new std::string("CMakeLists.txt file failed to open.");
+ return false;
+ }
+ //opening temporal cmakelists
+ std::ofstream out((this->path + "/CMakeLists.txt.tmp").c_str());
+ if( !out.is_open())
+ {
+ result = new std::string("CMakeLists.txt.tmp file failed to open.");
+ return false;
+ }
+ //copying contents from original to temporal and making changes
+ while (getline(in, line))
+ {
+ if(line.find("SET(${BBTK_PACKAGE_NAME}_DESCRIPTION") != std::string::npos)
+ line = "SET(${BBTK_PACKAGE_NAME}_DESCRIPTION \"" + descriptionReal + "\")";
+ out << line << std::endl;
+ }
+ in.close();
+ out.close();
+ //delete old file and rename new file
+ std::string renameCommand = "mv " + this->path + "/CMakeLists.txt.tmp " + this->path + "/CMakeLists.txt";
+ if(system(renameCommand.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + renameCommand + "'.");
+ return false;
+ }
+
+ this->description = descriptionReal;
return true;
}
return true;
}
-bool modelCDMPackage::OpenCMakeListsFile(std::string*& result)
-{
- //TODO: implement method
- return true;
-}
-
const bool modelCDMPackage::Refresh(std::string*& result)
{
//TODO: implement method