#include "modelCDMBlackBox.h"
+#include<fstream>
+
+#include "CDMUtilities.h"
+
+#include<creaWx.h>
+#include"wx/dir.h"
+
modelCDMBlackBox::modelCDMBlackBox()
{
+ this->source = NULL;
+ this->header = NULL;
+}
+
+modelCDMBlackBox::modelCDMBlackBox(modelCDMIProjectTreeNode* parent, const std::string& path, const std::string& name, const int& level)
+{
+ std::cout << "creating black box: " + name + " in " + path + "\n";
+ this->parent = parent;
+ this->name = name;
+ this->path = path;
+ this->level = level;
+ this->type = wxDIR_DIRS;
+ this->source = NULL;
+ this->header = NULL;
+
+ std::string pathHeader = path + CDMUtilities::SLASH + "bb" + this->name + ".h";
+
+ std::ifstream confFile;
+ confFile.open((pathHeader).c_str());
+ std::string word;
+ while(confFile.is_open() && !confFile.eof())
+ {
+ //get BBTK's
+ std::getline(confFile,word,'(');
+ std::vector<std::string> wordBits;
+ CDMUtilities::splitter::split(wordBits,word," \n",CDMUtilities::splitter::no_empties);
+
+ if(wordBits[wordBits.size()-1] == "BBTK_NAME")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->nameBlackBox = word;
+ }
+ else if(wordBits[wordBits.size()-1] == "BBTK_AUTHOR")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->authors = word;
+ }
+ else if(wordBits[wordBits.size()-1] == "BBTK_DESCRIPTION")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->description = word;
+ }
+ else if(wordBits[wordBits.size()-1] == "BBTK_CATEGORY")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->categories = word;
+ if (this->categories == "")
+ this->categories = "empty";
+ }
+ }
+ confFile.close();
+
}
modelCDMBlackBox::~modelCDMBlackBox()
{
+ this->header = NULL;
+ this->source = NULL;
}
const std::string& modelCDMBlackBox::GetNameBlackBox() const
return this->authors;
}
-const std::string& modelCDMBlackBox::GetAuthorsEmail() const
-{
- return this->authorsEmail;
-}
-
const std::string& modelCDMBlackBox::GetCategories() const
{
return this->categories;
bool modelCDMBlackBox::SetAuthors(const std::string& authors, std::string*& result)
{
- //TODO: implement method
- return true;
-}
+ 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 < (int)(words.size()); i++)
+ {
+ authorsReal += "," + words[i];
+ }
-bool modelCDMBlackBox::SetAuthorsEmail(
- const std::string& email,
- std::string*& result
-)
-{
- //TODO: implement method
+ //opening original header
+ std::string pathHeader = this->header->GetPath();
+ std::ifstream in(pathHeader.c_str());
+ if( !in.is_open())
+ {
+ result = new std::string(pathHeader + " file failed to open.");
+ return false;
+ }
+ //opening temporal header
+ std::ofstream out((pathHeader + ".tmp").c_str());
+ if( !out.is_open())
+ {
+ result = new std::string(pathHeader + ".tmp file failed to open.");
+ return false;
+ }
+ //copying contents from original to temporal and making changes
+ std::string reading;
+ while (getline(in, reading, '('))
+ {
+ CDMUtilities::splitter::split(words, reading, "\n ", CDMUtilities::splitter::no_empties);
+ if(words[words.size() - 1] == "BBTK_AUTHOR")
+ {
+ out << reading << "(\"" << authorsReal << "\")";
+ getline(in, reading, ')');
+ }
+ else
+ {
+ out << reading;
+ if (!in.eof())
+ out << "(";
+ }
+ }
+ in.close();
+ out.close();
+ //delete old file and rename new file
+ std::string renameCommand = "mv \"" + pathHeader + ".tmp\" \"" + pathHeader + "\"";
+ if(system(renameCommand.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + renameCommand + "'.");
+ return false;
+ }
+
+ this->authors = authorsReal;
return true;
+
}
bool modelCDMBlackBox::SetCategories(
- const std::string& version,
+ const std::string& categories,
std::string*& result
)
{
- //TODO: implement method
+ std::vector<std::string> words;
+ CDMUtilities::splitter::split(words, categories, "\"\\/", CDMUtilities::splitter::no_empties);
+ std::string catsReal = words[0];
+ for (int i = 1; i < (int)(words.size()); i++)
+ {
+ catsReal += "," + words[i];
+ }
+
+ //opening original header
+ std::string pathHeader = this->header->GetPath();
+ std::ifstream in(pathHeader.c_str());
+ if( !in.is_open())
+ {
+ result = new std::string(pathHeader + " file failed to open.");
+ return false;
+ }
+ //opening temporal header
+ std::ofstream out((pathHeader + ".tmp").c_str());
+ if( !out.is_open())
+ {
+ result = new std::string(pathHeader + ".tmp file failed to open.");
+ return false;
+ }
+ //copying contents from original to temporal and making changes
+ std::string reading;
+ while (getline(in, reading, '('))
+ {
+ CDMUtilities::splitter::split(words, reading, "\n ", CDMUtilities::splitter::no_empties);
+ if(words[words.size() - 1] == "BBTK_CATEGORY")
+ {
+ out << reading << "(\"" << catsReal << "\")";
+ getline(in, reading, ')');
+ }
+ else
+ {
+ out << reading;
+ if (!in.eof())
+ out << "(";
+ }
+ }
+ in.close();
+ out.close();
+ //delete old file and rename new file
+ std::string renameCommand = "mv \"" + pathHeader + ".tmp\" \"" + pathHeader + "\"";
+ if(system(renameCommand.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + renameCommand + "'.");
+ return false;
+ }
+
+ this->categories = catsReal;
return true;
}
std::string*& result
)
{
- //TODO: implement method
+ std::vector<std::string> words;
+ CDMUtilities::splitter::split(words, description, "\"\n\\/", CDMUtilities::splitter::no_empties);
+ std::string descReal = words[0];
+ for (int i = 1; i < (int)(words.size()); i++)
+ {
+ descReal += "-" + words[i];
+ }
+
+ //opening original header
+ std::string pathHeader = this->header->GetPath();
+ std::ifstream in(pathHeader.c_str());
+ if( !in.is_open())
+ {
+ result = new std::string(pathHeader + " file failed to open.");
+ return false;
+ }
+ //opening temporal header
+ std::ofstream out((pathHeader + ".tmp").c_str());
+ if( !out.is_open())
+ {
+ result = new std::string(pathHeader + ".tmp file failed to open.");
+ return false;
+ }
+ //copying contents from original to temporal and making changes
+ std::string reading;
+ while (getline(in, reading, '('))
+ {
+ CDMUtilities::splitter::split(words, reading, "\n ", CDMUtilities::splitter::no_empties);
+ if(words[words.size() - 1] == "BBTK_DESCRIPTION")
+ {
+ out << reading << "(\"" << descReal << "\")";
+ getline(in, reading, ')');
+ }
+ else
+ {
+ out << reading;
+ if (!in.eof())
+ out << "(";
+ }
+ }
+ in.close();
+ out.close();
+ //delete old file and rename new file
+ std::string renameCommand = "mv \"" + pathHeader + ".tmp\" \"" + pathHeader + "\"";
+ if(system(renameCommand.c_str()))
+ {
+ result = new std::string("An error occurred while running '" + renameCommand + "'.");
+ return false;
+ }
+
+ this->description = descReal;
return true;
}
+void modelCDMBlackBox::SetHeaderFile(modelCDMFile* file)
+{
+ this->header = file;
+}
+
+void modelCDMBlackBox::SetSourceFile(modelCDMFile* file)
+{
+ this->source = file;
+}
+
bool modelCDMBlackBox::OpenCxx(std::string*& result)
{
- //TODO: implement method
- return true;
+ return !CDMUtilities::openTextEditor(this->source->GetPath());
}
bool modelCDMBlackBox::OpenHxx(std::string*& result)
{
- //TODO: implement method
- return true;
+ return !CDMUtilities::openTextEditor(this->header->GetPath());
+}
+
+modelCDMFile* modelCDMBlackBox::GetHeaderFile() const
+{
+ return this->header;
+}
+
+modelCDMFile* modelCDMBlackBox::GetSourceFile() const
+{
+ return this->source;
}
const bool modelCDMBlackBox::Refresh(std::string*& result)
{
- //TODO: implement method
+ std::cout << "refreshing black box: " << this->nameBlackBox << std::endl;
+ std::string pathHeader = path + CDMUtilities::SLASH + "bb" + this->name + ".h";
+
+ std::ifstream confFile;
+ confFile.open((pathHeader).c_str());
+ std::string word;
+
+ if(!confFile.is_open())
+ return false;
+
+ while(confFile.is_open() && !confFile.eof())
+ {
+ //get BBTK's
+ std::getline(confFile,word,'(');
+ std::vector<std::string> wordBits;
+ CDMUtilities::splitter::split(wordBits,word," \n",CDMUtilities::splitter::no_empties);
+
+ if(wordBits[wordBits.size()-1] == "BBTK_NAME")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->nameBlackBox = word;
+ }
+ else if(wordBits[wordBits.size()-1] == "BBTK_AUTHOR")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->authors = word;
+ }
+ else if(wordBits[wordBits.size()-1] == "BBTK_DESCRIPTION")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->description = word;
+ }
+ else if(wordBits[wordBits.size()-1] == "BBTK_CATEGORY")
+ {
+ std::getline(confFile,word,'"');
+ std::getline(confFile,word,'"');
+ this->categories = word;
+ if (this->categories == "")
+ this->categories = "empty";
+ }
+ }
+ confFile.close();
return true;
}