Commit d2ed4754 authored by Alexis Lebis's avatar Alexis Lebis

Merge branch 'data_export' into 'master'

Data export

See merge request !10
parents 5a789802 9c46eb8b
......@@ -329,6 +329,8 @@ int main(int argc, char* argv[]){
if(localDisplay)
{
std::cout << exportProblem(pb,job) << std::endl;
pb.displayDistribution();
std::cout << pb << std::endl;
std::cout << job << std::endl;
......
......@@ -153,4 +153,11 @@ std::ostream& operator<<(std::ostream& Stream, const Competency & c)
bool Competency::operator==(const Competency & c) const
{
return ( this->_id == c.id() || ( this->_name.compare(c.c_name()) == 0 ) );
}
std::string Competency::exportMe() const
{
std::string res = "\"competency\":{\"name\":\""+this->_name+"\","+this->_m.exportMe()+"}";
return res;
}
\ No newline at end of file
......@@ -93,6 +93,8 @@ class Competency
/// A competency is equal to another iff their id are the same, or their name
bool operator==(const Competency & c) const;
// === EXPORT
std::string exportMe() const;
};
// === OPERATOR
std::ostream & operator<<(std::ostream& Stream, const Competency & c);
......
......@@ -288,6 +288,35 @@ bool Course::operator==(const Course & c) const
}
// === END OPERATOR
// === EXPORT
std::string Course::exportMe() const
{
std::string res = "\"course\":{\"name\":\""+this->_name+"\",\"ects\":"+std::to_string(this->_ects);
std::string tmp = "";
res +=",\"prerequisites\":[";
for(unsigned int i = 0; i < this->_prerequisites.size(); i++)
{
tmp = this->_prerequisites.at(i).exportMe();
res+="{"+tmp+"}";
if(i < this->_prerequisites.size()-1)
res+=",";
}
res += "]";
res +=",\"competencies\":[";
for(unsigned int i = 0; i < this->_weightedTeached.size();i++)
{
tmp = this->_weightedTeached.at(i).first.exportMe();
res+="{"+tmp+"}";
if(i < this->_weightedTeached.size()-1)
res+=",";
}
res+="]";
res += "}";
return res;
}
// === STATIC
/// Course counter
......
......@@ -116,6 +116,9 @@ class Course
// === OPERATOR
/// A course is equal to another iff {(lazy_equality) || (full_equality)
bool operator==(const Course & c) const;
// === EXPORT
std::string exportMe() const;
};
// === OPERATOR
......
......@@ -133,4 +133,12 @@ double Magnitude::rebase()
this->_value = 1;
}
return this->_value;
}
// EXPORT
std::string Magnitude::exportMe() const
{
std::string res = "\"magnitude\":{\"value\":"+std::to_string(this->_value)+"}";
return res;
}
\ No newline at end of file
#ifndef SRC_MAGNITUDE_H_
#define SRC_MAGNITUDE_H_
#include <string>
/** Magnitude represents the mastery of a competency.
*
* It should be used in accordance with a scale
......@@ -34,6 +36,9 @@ class Magnitude
//SETTER
bool set(double v);
//EXPORT
std::string exportMe() const;
};
Magnitude operator+(const Magnitude & m1, const Magnitude & m2);
......
......@@ -595,3 +595,51 @@ std::tuple<int, int, double, double> CSDVP::distributionStats()
return Stream;
}
// === END OPERATOR
// === EXPORT
std::string CSDVP::exportMe() const
{
std::string res = "\"csdvp\":{";
res+="\"cfg_seed\":"+std::to_string(this->_seed)+",";
res+="\"cfg_nbCourses\":"+std::to_string(this->_quantityAvailableCourses)+",";
res+="\"cfg_nbCompetencies\":"+std::to_string(this->_quantityAvailableCompetencies)+",";
res+="\"cfg_minTimeFrame\":"+std::to_string(this->_minimalTimeFrame)+",";
res+="\"cfg_maxTimeFrame\":"+std::to_string(this->_maximalTimeFrame)+",";
res+="\"cfg_minECTS\":"+std::to_string(this->_minimalECTSValue)+",";
res+="\"cfg_maxECTS\":"+std::to_string(this->_maximalECTSValue)+",";
res+="\"cfg_minCoursesByTF\":"+std::to_string(this->_minimalCoursesByTimeFrame)+",";
res+="\"cfg_maxCoursesByTF\":"+std::to_string(this->_maximalCoursesByTimeFrame)+",";
res+="\"cfg_minCompByCourse\":"+std::to_string(this->_minimalCompetencyByCourse)+",";
res+="\"cfg_maxCompByCourse\":"+std::to_string(this->_maximalCompetencyByCourse)+",";
res+="\"cfg_minPrereqByCourse\":"+std::to_string(this->_minimalPrerequisiteByCourse)+",";
res+="\"cfg_maxPrereqByCourse\":"+std::to_string(this->_maximalPrerequisiteByCourse)+",";
res+="\"cfg_minMagnitude\":"+std::to_string(this->_minimalMagnitude.value())+",";
res+="\"cfg_maxMagnitude\":"+std::to_string(this->_maximalMagnitude.value())+",";
res+="\"cfg_pickedCourseByTF\":"+std::to_string(this->_pickedCoursesByTimeFrame)+",";
// res+="\"seed\":"+std::to_string(this->_seed)+",";
std::string tmp = "";
res += "\"coursesCatalogue\":[";
for(unsigned int i = 0 ; i < this->_availableCourses.size(); i++)
{
tmp = this->_availableCourses.at(i).exportMe();
res+="{"+tmp+"}";
if(i < this->_availableCourses.size()-1)
res+=",";
}
res += "],";
res += "\"competenciesCatalogue\":[";
for(unsigned int i = 0; i < this->_availableCompentecies.size(); i++)
{
tmp = this->_availableCompentecies.at(i).exportMe();
res+="{"+tmp+"}";
if(i < this->_availableCompentecies.size()-1)
res+=",";
}
res+= "]";
res += "}";
return res;
}
\ No newline at end of file
......@@ -203,6 +203,9 @@ class CSDVP
// === FUNC
/// Checks all configuration attributes. If they have been all set, then isConfig is set to true
bool checkConfig();
// === EXPORT
std::string exportMe() const;
};
std::ostream & operator<<(std::ostream & Stream, const CSDVP & c);
......
......@@ -286,6 +286,34 @@ void Profession::_pickWithHLWeighting(int nbToPick, Profession & job, CSDVP & pb
}
}
std::string Profession::exportMe() const
{
std::string res = "\"job\":{";
res += "\"cfg_seed\":"+std::to_string(this->_seed)+",";
res += "\"cfg_minimalPrereq\":"+std::to_string(this->_minimalPrerequisites)+",";
res += "\"cfg_maximalPrereq\":"+std::to_string(this->_maximalPrerequisites)+",";
res += "\"cfg_minimalMagnitude\":"+std::to_string(this->_minimalMagnitude.value())+",";
res += "\"cfg_maximalMagnitude\":"+std::to_string(this->_maximalMagnitude.value())+",";
res += "\"cfg_drawECTSRandomly\":"+std::to_string(this->_isECTSRandom)+",";
res += "\"name\":\""+this->_name+"\",";
res += "\"requiredECTS\":"+std::to_string(this->_requiredECTS)+",";
std::string tmp = "";
res += "\"prerequisites\":[";
for(unsigned int i = 0; i < this->_prerequisites.size(); i++)
{
tmp = this->_prerequisites.at(i).exportMe();
res += "{"+tmp+"}";
if(i < this->_prerequisites.size()-1)
res += ",";
}
res += "]";
res += "}";
return res;
}
// === STATIC
int Profession::assignID(){return ++Profession::PROFESSION_COUNTER;}
......
......@@ -98,6 +98,8 @@ class Profession
void set_cfg_minimalMagnitude(double mag);
void set_cfg_maximalMagnitude(double mag);
// === EXPORT
std::string exportMe() const;
};
// === OPERATOR
......
......@@ -7,6 +7,14 @@
#include <queue>
#include <random>
#include <limits>
#include <string>
#include "problem.h"
#include "profession.h"
static std::string APP_VERSION = "1.0.0";
static std::string MAIN_AUTHOR = "Alexis Lebis";
static std::string MAIN_AUTHOR_EMAIL = "ceao@alexis.lebis.org";
static const int ID_RANGE_FOR_OBJECT = 10000;
static const int ID_RANGE_FOR_TEMPORARY_OBJECT = std::numeric_limits<int>::max();
......@@ -56,6 +64,19 @@ static std::pair<bool,T> getElementById(const std::vector<T> & elem, int idToFin
return std::pair<bool, T>(false, T());
}
static std::string exportProblem(const CSDVP & csdvp, const Profession & job)
{
std::string res = "{\"problem\":{";
res += "\"version\":\""+APP_VERSION+"\",";
res += "\"mainAuthor\":\""+MAIN_AUTHOR+"\",";
res += "\"mainAuthorEmail\":\""+MAIN_AUTHOR_EMAIL+"\",";
res += csdvp.exportMe()+",";
res += job.exportMe();
res += "}";
res += "}";
return res;
}
///Not working properly yet, just for debug
// static std::queue<int> RNG_QUEUE;
// /**Init a queue of size s from 0 to s, then shuffle it*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment