#include "modelCDMMain.h"
-#include<iostream>
-#include<string>
+
+#include <cstdlib>
+#include <iostream>
+#include <string>
#include <cstdio>
#include <fstream>
#include "CDMUtilities.h"
+#include "modelCDMProject.h"
modelCDMMain::modelCDMMain()
{
- //TODO: implement method
+ this->project = NULL;
}
modelCDMMain::~modelCDMMain()
{
- //TODO: implement method
+ if(project != NULL)
+ {
+ delete this->project;
+ this->project = NULL;
+ }
}
-const modelCDMProject* modelCDMMain::GetProject() const
+modelCDMProject* modelCDMMain::GetProject() const
{
- //TODO: implement method
return this->project;
}
const std::string& author,
const std::string& description)
{
- //TODO: implement method
+ std::cout << "Open selection path: "<< location << std::endl;
+ //get fixed location
+ std::string locationFixed = CDMUtilities::fixPath(location);
+ std::cout << "Opening path: "<< locationFixed << std::endl;
+
+ //creates project in disk
+#if(_WIN32)
+
+ std::string command("creaNewProject.bat ");
+ std::string command1("creaSed.exe ");
+ std::string command2("del ");
+
+ command += "\"" + locationFixed + "\" \"" + name + "\"";
+ command1 += "\"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.in\" " + "PROJECT_NAME " + name + "> \"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+ command2 += "\"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.in\"";
+
+ if (system (command.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + command + "'.");
+ return false;
+ }
+
+ if (system (command1.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + command1 + "'.");
+ return false;
+ }
+ if (system (command2.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + command2 + "'.");
+ return false;
+ }
+
+ std::string nomDirectory = locationFixed + CDMUtilities::SLASH + name;
+ std::string nomPackageDirectory = nomDirectory + CDMUtilities::SLASH + "bbtk_" + name + "_PKG";
+ std::string bbCreatePackage("bbCreatePackage ");
+ bbCreatePackage += "\"" + nomDirectory + "\" \"" + name + "\" \"" + author + "\" \"" + description + "\"";
+ if (!system (bbCreatePackage.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + bbCreatePackage + "'.");
+ return false;
+ }
+ std::string add;
+ add = "echo ADD_SUBDIRECTORY(bbtk_" + name + "_PKG) >> \"" + nomDirectory + CDMUtilities::SLASH + "CMakeLists.txt\"";
+ if (system (add.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + add + "'.");
+ return false;
+ }
+
+ this->project = new modelCDMProject(NULL, nomDirectory, name);
+
+#else
+ // ------ LINUX / MacOS
+ std::string command("creaNewProject.sh ");
+ command += "\"" + locationFixed + "\"" +" \"" + name + "\"";
+ //std::cout << "executing " << command << std::endl;
+ if (system ( command.c_str() ) )
+ {
+ result = new std::string("An error occured while running '" + command + "'.");
+ return false;
+ }
+
+ std::string nomDirectory = locationFixed + CDMUtilities::SLASH + name;
+ std::string nomPackageDirectory = nomDirectory + CDMUtilities::SLASH + "bbtk_" + name + "_PKG";
+
+ std::string bbCreatePackage("bbCreatePackage ");
+ bbCreatePackage += "\"" + nomDirectory + "\" \"" + name + "\" \"" + author + "\" \"" + description + "\"";
+ //std::cout << "executing " << bbCreatePackage << std::endl;
+ system (bbCreatePackage.c_str());
+
+ std::string add;
+ add = "echo 'ADD_SUBDIRECTORY(bbtk_" + name + "_PKG)' >> \"" + nomDirectory + CDMUtilities::SLASH + "CMakeLists.txt\"";
+
+ //std::cout << "executing " << add << std::endl;
+ system(add.c_str());
+
+ if(this->project != NULL)
+ {
+ if (!CloseProject(result))
+ return false;
+ }
+
+ this->project = new modelCDMProject(NULL, nomDirectory, name);
+
+#endif
+
return true;
}
std::string*& result
)
{
- std::cout << "Selection path: "<< path << std::endl;
-
+ //std::cout << "Open selection path: "<< path << std::endl;
//get fixed path
std::string pathFixed = CDMUtilities::fixPath(path);
- std::cout << "Fixed selection path: "<< pathFixed << std::endl;
+ std::cout << "Opening path: "<< pathFixed << std::endl;
//check if its binaries' folder
bool isBinary = false;
std::string pathBuild = "";
//check if Makefile file exists
- std::string pathMakefile = pathFixed + "/Makefile";
- FILE* pFile = fopen(pathMakefile.c_str(), "r");
-
+ std::string pathMakefile = pathFixed + CDMUtilities::SLASH + "Makefile";
+ FILE* pFile;
+#ifdef _WIN32
+ errno_t errorOpen = fopen_s(&pFile, pathMakefile.c_str(), "r");
+#else
+ pFile = fopen(pathMakefile.c_str(), "r");
+ bool errorOpen = (pFile == NULL);
+#endif
//is the binary folder
- if (pFile != NULL)
+ if (!errorOpen && pFile)
{
fclose(pFile);
std::ifstream readFile;
while(!isBinary && readFile >> word)
{
- //cout << word << endl;
if(word == "CMAKE_SOURCE_DIR")
{
readFile >> word;
readFile.ignore();
getline(readFile, word, '\n');
pathBuild = pathFixed;
- pathFixed = word;
+ pathFixed = CDMUtilities::fixPath(word);
isBinary = true;
}
}
bool isSource = false;
std::string pathSource = "";
//check if CMakeLists file exists
- std::string pathCMakeLists = pathFixed + "/CMakeLists.txt";
+ std::string pathCMakeLists = pathFixed + CDMUtilities::SLASH + "CMakeLists.txt";
+#ifdef _WIN32
+ errorOpen = fopen_s(&pFile, pathCMakeLists.c_str(), "r");
+#else
pFile = fopen(pathCMakeLists.c_str(), "r");
+ errorOpen = (pFile == NULL);
+#endif
//is the source folder
- if (pFile != NULL)
+ if (!errorOpen && pFile)
{
fclose(pFile);
std::ifstream readFile;
while(!isSource && !readFile.eof())
{
- std::getline(readFile,word,'\n');
- int pos = word.find("PROJECT");
- if(pos != std::string::npos)
+ std::getline(readFile,word,'(');
+ std::vector<std::string> wordBits;
+ CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+ if(wordBits[wordBits.size()-1] == "PROJECT")
{
- pathSource = pathFixed;
isSource = true;
+ pathSource = pathFixed;
}
}
readFile.close();
//if is source folder
if(isSource)
{
- std::cout << "Project sources at: " << pathSource;
+ if(this->project != NULL)
+ {
+ if (!CloseProject(result))
+ return false;
+ }
+ std::vector<std::string> words;
+ CDMUtilities::splitter::split(words, pathSource, CDMUtilities::SLASH, CDMUtilities::splitter::no_empties);
+
+ std::cout << "Project sources at: " << pathSource << std::endl;
if(isBinary)
{
- std::cout << ", and built in: " << pathBuild;
+ std::cout << ", and built in: " << pathBuild << std::endl;
+
+ this->project = new modelCDMProject(NULL, pathSource, words[words.size()-1], pathBuild);
+ }
+ else
+ {
+ this->project = new modelCDMProject(NULL, pathSource, words[words.size()-1]);
}
- std::cout << std::endl;
}
else
{
return false;
}
- //TODO: create Project given the source folder
return true;
}
std::string*& result
)
{
- //TODO: recreate the project using the project's path
- return true;
+ //recreate the project using the project's path
+ if (this->project != NULL)
+ {
+ return this->project->Refresh(result);
+ }
+ else
+ {
+ result = new std::string("There is no open project.");
+ return false;
+ }
+}
+
+std::map<wxCDMTreeItemId, modelCDMIProjectTreeNode*>& modelCDMMain::GetModelElements()
+{
+ return this->modelElements;
}
bool modelCDMMain::CloseProject(
std::string*& result
)
{
- //TODO: delete the project tree and leave it as NULL
- return true;
+ //delete the project tree and leave it as NULL
+ if (this->project != NULL)
+ {
+ delete this->project;
+ this->project = NULL;
+ return true;
+ }
+ else
+ {
+ result = new std::string("There is no open project.");
+ return false;
+ }
}