summaryrefslogtreecommitdiff
path: root/project2/common/taskHost.cpp
blob: 07f76011fab0a2c4b2d577d01c50aef1992ac9cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <pch.hpp>
#include "taskHost.h"
#include "noOutputExecute.h"
#include "dataSource.h"
#include "scopeObject.h"
#include "scriptLoader.h"
#include "commonObjects.h"
#include <boost/foreach.hpp>

TaskHost::TaskHost(ScriptNodePtr s) :
	SourceObject(s),
	CommonObjects(s),
	CheckHost(s),
	IHaveSubTasks(s)
{
	s->script->loader.addLoadTarget(s, Storer::into<ElementLoader>(&tasks));
}

TaskHost::~TaskHost()
{
}

void
TaskHost::loadComplete(const CommonObjects * co)
{
	IHaveSubTasks::loadComplete(co);
}

void
TaskHost::execute(ExecContext * ec) const
{
	loadScriptComponents();
	ScopeObject txHandler(ScopeObject::Event(), boost::bind(&TaskHost::commitAll, this), boost::bind(&TaskHost::rollbackAll, this));
	run(tasks, ec);
}

void
TaskHost::commitAll() const
{
	BOOST_FOREACH(const CommonObjects::DataSources::value_type & ds, CommonObjects::datasources) {
		ds.second->commit();
	}
}

void
TaskHost::rollbackAll() const
{
	BOOST_FOREACH(const CommonObjects::DataSources::value_type & ds, CommonObjects::datasources) {
		ds.second->rollback();
	}
}