1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package zeus.actors.rtn;
25
26 import java.util.*;
27 import zeus.util.*;
28 import zeus.actors.AgentContext;
29
30 public class Arc {
31 private static int count = 0;
32
33 protected String description = null;
34 protected Object output = null;
35 protected Object input = null;
36 protected AgentContext context = null;
37 protected Graph graph = null;
38
39 protected Arc() {
40 }
41 public Arc(String description) {
42 Assert.notNull(description);
43 this.description = description + "-" + (count++);
44 Core.DEBUG(3,"New arc " + this.description + " created");
45 }
46
47 public final String getDescription() { return description; }
48 public final Graph getGraph() { return graph; }
49
50 void run1(Engine engine, Graph graph, Node previous_node,
51 Object input, String next_node) {
52
53 this.input = input;
54 this.graph = graph;
55 context = engine.getAgentContext();
56
57 Node node = null;
58 if ( exec() && (node = graph.newNode(engine,next_node,previous_node)) != null ) {
59 node.setInput(engine,output);
60 engine.notifyArcMonitors(this,node,Engine.ARC_SUCCEED);
61 engine.add(node);
62 }
63 else {
64 Core.DEBUG(3,"Arc " + description + " FAILED");
65 engine.notifyArcMonitors(this,null,Engine.ARC_FAIL);
66 previous_node.nextArc(engine);
67 }
68 }
69 protected boolean exec() {
70 output = input;
71 return true;
72 }
73 protected void finalize() throws Throwable {
74 if ( context != null )
75 context.Engine().notifyArcMonitors(this,null,Engine.ARC_DISPOSE);
76 super.finalize();
77 }
78 public String toString() { return getDescription(); }
79 }