Initial commit

This commit is contained in:
Matthias
2017-04-11 15:49:21 +02:00
commit ec80b339e2
2081 changed files with 968992 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
#include <wfr/common/wfs/WorkflowTemplate.h>
#include <wfr/common/wfs/Workflow.h>
#include <wfr/common/wfs/ActivityTemplate.h>
#include <wfr/WorkflowRuntime.h>
#include <boost/format.hpp>
namespace wfr {
namespace wfs {
WorkflowTemplate::WorkflowTemplate( const std::string& name,
wfr_id_t topLevelActivityID,
std::initializer_list<ActivityTemplate*> activities)
: activities(activities), workflowName(name), topLevelActivityID(topLevelActivityID) {
if (activities.size() == 0) {
throw exception::wfr_fatal_error((boost::format("Workflow \"%1%\" has no activities.") % workflowName).str());
}
for (auto i : activities) {
i->initActivityTemplate(*this);
}
toplevelActivity = getActivityByID(topLevelActivityID);
if (!toplevelActivity) {
throw exception::wfr_fatal_error((boost::format("Workflow \"%1%\" has invalid top-level activity id %2%.") % workflowName % topLevelActivityID).str());
}
checkStructure();
}
WorkflowTemplate::~WorkflowTemplate() noexcept {
for (auto i : activities) {
if (i) delete i;
}
activities.clear();
}
ActivityTemplate* WorkflowTemplate::getActivityByID(wfr_id_t id) const noexcept {
ActivityTemplate* retval = nullptr;
for (auto i : activities) {
if (i->templateID == id) {
retval = i;
break;
}
}
return retval;
}
void WorkflowTemplate::checkStructure() {
for (auto i : activities) {
i->checkStructure();
}
}
std::shared_ptr<Workflow> WorkflowTemplate::execute(lwd::_wfr_lwd* input, lwd::_wfr_lwd* output) {
std::shared_ptr<Workflow> wf = std::shared_ptr<Workflow>(new Workflow(*this));
WorkflowRuntime::addWorkflowInstance(wf);
try {
wf->executeSync(input, output);
} catch (std::exception& e) {
std::cerr << "Error while executing workflow: Caught exception: " << e.what() << std::endl;
} catch (...) {
std::cerr << "Error while executing workflow: Caught unknown exception." << std::endl;
}
return wf;
}
} /* namespace wfs */
} /* namespace wfr */