1 package cz.cuni.amis.pogamut.sposh.engine;
2
3 import cz.cuni.amis.pogamut.sposh.elements.LapPath;
4 import cz.cuni.amis.pogamut.sposh.elements.PrimitiveCall;
5 import cz.cuni.amis.pogamut.sposh.exceptions.FubarException;
6 import cz.cuni.amis.pogamut.sposh.executor.ActionResult;
7 import cz.cuni.amis.pogamut.sposh.executor.IWorkExecutor;
8
9
10
11
12
13 class ActionExecutor extends AbstractExecutor implements ElementExecutor {
14 final private PrimitiveCall actionCall;
15
16 final private FireResult.Type finishedResult = FireResult.Type.SURFACE_CONTINUE;
17 final private FireResult.Type runningResult = FireResult.Type.SURFACE;
18 final private FireResult.Type runningOnceResult = FireResult.Type.SURFACE;
19 final private FireResult.Type failedResult = FireResult.Type.FAILED;
20
21 final private Runnable finishedResultCallback;
22 final private Runnable runningResultCallback;
23 final private Runnable runningOnceResultCallback;
24 final private Runnable failedResultCallback;
25
26
27
28
29
30
31
32
33
34
35
36
37
38 ActionExecutor(
39 PrimitiveCall actionCall,
40 Runnable finishedResultCallback,
41 Runnable runningResultCallback,
42 Runnable runningOnceResultCallback,
43 Runnable failedResultCallback,
44 LapPath actionPath,
45 VariableContext ctx,
46 EngineLog log) {
47 super(actionPath, ctx, log);
48
49 this.actionCall = actionCall;
50
51 this.finishedResultCallback = finishedResultCallback;
52 this.runningResultCallback = runningResultCallback;
53 this.runningOnceResultCallback = runningOnceResultCallback;
54 this.failedResultCallback = failedResultCallback;
55 }
56
57
58
59
60
61
62
63
64 @Override
65 public FireResult fire(IWorkExecutor workExecuter) {
66 engineLog.pathReached(path);
67
68 ActionResult result = workExecuter.executeAction(actionCall.getName(), ctx);
69 switch(result) {
70 case FAILED:
71 if (failedResultCallback != null) failedResultCallback.run();
72 return new FireResult(failedResult);
73
74 case FINISHED:
75 if (finishedResultCallback != null) finishedResultCallback.run();
76 return new FireResult(finishedResult);
77
78 case RUNNING:
79 if (runningResultCallback != null) runningResultCallback.run();
80 return new FireResult(runningResult);
81
82 case RUNNING_ONCE:
83 if (runningOnceResultCallback != null) runningOnceResultCallback.run();
84 return new FireResult(runningOnceResult);
85
86 default:
87 throw new IllegalStateException("Unexpected ActionResult: " + result);
88 }
89 }
90
91 @Override
92 public String toString() {
93 return this.getClass().getSimpleName() + "[" + actionCall.getName() + "]";
94 }
95 }