task/plan work

master
Chris Punches 2017-06-25 02:28:22 -04:00
parent 162a2d5cd4
commit 6fc300a98e
6 changed files with 53 additions and 43 deletions

View File

@ -12,12 +12,12 @@ int main( )
// load the configuration file which contains filepaths to definitions of a plan and definitions of units.
std::string definitions_file = configuration.get_units_path();
std::string plan_file = configuration.get_plan_path();
// std::cout << definitions_file << std::endl << plan_file << std::endl;
Suite available_definitions;
available_definitions.load_units_file( definitions_file, verbose );
Plan plan;
plan.load_plan_file( plan_file, verbose );
/* for ( int i = 0; i < plan.num_tasks(); ++i )
{

View File

@ -1,5 +1,4 @@
#include "Plan.h"
/// Plan_InvalidTaskIndex - Exception thrown when a Plan tries to access a contained Task's value by index not present
/// in the Unit.
class Plan_InvalidTaskIndex: public std::runtime_error { public:
@ -12,7 +11,6 @@ class Plan_InvalidTaskName: public std::runtime_error { public:
Plan_InvalidTaskName(): std::runtime_error("Plan: Attempted to access a Task using an invalid name.") {}
};
/// Plan::Plan() - Constructor for Plan class. A Plan is a managed container for a Task vector. These tasks reference
/// Units that are defined in the Units files (Suite). If Units are definitions, Tasks are selections of those
/// definitions to execute, and if Units together form a Suite, Tasks together form a Plan.

View File

@ -16,13 +16,20 @@ class Plan: public JSON_Loader
public:
Plan();
// append this->tasks from JSON file
void load_plan_file( std::string filename, bool verbose );
// fetch a task from this->tasks
void get_task( Task & result, std::string provided_name, bool verbose );
void get_task( Task & result, int index. bool verbose );
// fetch a task from this->tasks
void get_task( Task & result, int index, bool verbose );
void get_unit_from_task(Unit & result, Task input, bool verbose );
// load unit definitions from a provided suite and import them into individual tasks
// void load_definitions( Suite unit_definitions );
// fetch a corresponding Unit to a Task
// void get_definition_from_task(Unit & result, Task input, bool verbose );
};
#endif //FTESTS_PLAN_H

View File

@ -11,7 +11,7 @@
class Suite: public JSON_Loader
{
private:
protected:
// storage for the definitions we are amassing from the unit definition files
std::vector<Unit> units;

View File

@ -1,17 +1,27 @@
#include "Task.h"
Task::Task() {}
/// Task_InvalidDataStructure - Exception thrown when a Task is defined with invalid JSON.
class Task_InvalidDataStructure: public std::runtime_error { public:
Task_InvalidDataStructure(): std::runtime_error("Task: Attempted to access a member of a Task that is not set.") {}
};
Task::Task( Json::Value loader_root )
{
this->load_root( loader_root );
}
/// Task::Task() - Constructor for the Task class. The Task is the building block of a Plan indicating of which Unit to
/// execute, and its dependencies on other units to have already been completed successfully.
Task::Task() {}
int Task::load_root(Json::Value loader_root)
{
this->name = loader_root.get("name", "?").asString();
this->dependencies = loader_root.get("depends on", "");
this->has_succeeded = false;
if ( loader_root.isMember("name") )
{
this->name = loader_root.get("name", "?").asString();
} else {
throw Task_InvalidDataStructure();
}
// this->dependencies = loader_root.get("depends on", "");
//this->has_succeeded = false;
}
std::string Task::get_name()
@ -19,23 +29,4 @@ std::string Task::get_name()
return this->name;
}
bool Task::isDone()
{
return this->has_succeeded;
}
void Task::finish()
{
this->has_succeeded = true;
}
// returns Json::Value for dependencies
Json::Value Task::get_dependencies()
{
return this->dependencies;
}
Json::Value Task::set_dependencies()
{
}

View File

@ -7,24 +7,38 @@
class Task
{
private:
protected:
// the name of this task
std::string name;
Json::Value dependencies;
bool has_succeeded;
// names of tasks that must have successfully executed before this task can execute its own unit.
std::vector<std::string> dependencies;
// private member to store the definition of this task once found in a Suite by Plan.
// populated by load_definition
Unit definition;
// the status of this task
bool complete;
public:
Task( Json::Value loader_root );
// constructor
Task();
// load a json::value into task members (second stage deserialization)
int load_root( Json::Value loader_root );
std::string get_name();
Json::Value get_dependencies();
Json::Value set_dependencies();
// register a dependency
void add_dependency( std::string dependency_name );
// appends associated_unit as child member
bool isDone();
void finish();
// appends definition unit as child member
void load_definition( Unit definition );
bool is_complete();
// fetch the name of a task
std::string get_name();
};
#endif //FTESTS_TASK_H