Initial commit
This commit is contained in:
Executable
+72
@@ -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 */
|
||||
Reference in New Issue
Block a user