1 //
2
3
4 package dx.net;
5 import java.util.*;
6 import java.applet.*;
7
8 //-------------------------------------------------------
9 // 3/17/2006 jer
10 // Added method: setOutputValueQuietly(String)
11 // This is to support Interactors that want to keep the
12 // server informed of changed values without causing
13 // an execution.
14 //-------------------------------------------------------
15
16 public class Node extends Object implements dx.net.PacketIF {
17
18 private int instance;
19 private Network net;
20 private String name;
21 private int param_number;
22
23 private Vector input_arcs;
24 private Hashtable input_values;
25
26 private String notation;
27
getNotation()28 public String getNotation() { return this.notation; }
29
addInputArc(int input, Node src, int output)30 public void addInputArc (int input, Node src, int output) {
31 if (this.input_arcs == null)
32 this.input_arcs = new Vector(4);
33 if (this.isInputConnected(input) == true) return ;
34 Arc a = new Arc(src, output, this, input);
35 this.input_arcs.addElement(a);
36 }
37
setInputValueString(int input, String value)38 public void setInputValueString (int input, String value) {
39 if (this.input_values == null)
40 this.input_values = new Hashtable(4);
41 //if (this.isInputConnected(input) == true) return ;
42 Integer i = new Integer(input);
43 //
44 // Can hashtable hold duplicate keys?
45 //
46 if (this.input_values.containsKey(i) == true)
47 this.input_values.remove(i);
48 this.input_values.put(i, value);
49 }
50
getInputValueString(int input)51 public String getInputValueString(int input) {
52 if (this.input_values == null) return null;
53 Integer i = new Integer(input);
54 return (String)this.input_values.get(i);
55 }
56
getSourceNode(int input)57 protected Node getSourceNode(int input) {
58 if (this.input_arcs == null) return null;
59 Enumeration enum1 = this.input_arcs.elements();
60 while (enum1.hasMoreElements()) {
61 Arc a = (Arc)enum1.nextElement();
62 if (a.getInputParamNumber() == input)
63 return a.getSourceNode();
64 }
65 return null;
66 }
67
isInputConnected(int input)68 protected boolean isInputConnected(int input) {
69 if (this.input_arcs == null) return false;
70 Enumeration enum1 = this.input_arcs.elements();
71 while (enum1.hasMoreElements()) {
72 Arc a = (Arc)enum1.nextElement();
73 if (a.getInputParamNumber() == input)
74 return true;
75 }
76 return false;
77 }
78
installHandlers()79 public void installHandlers() { }
enableJava()80 public void enableJava() { this.installHandlers(); }
81
Node(Network net, String name, int instance, String notation)82 public Node(Network net, String name, int instance, String notation) {
83 super();
84 this.instance = instance;
85 this.net = net;
86 this.name = name;
87 this.param_number = 1;
88 this.input_arcs = null;
89 this.input_values = null;
90 this.notation = notation;
91 }
92
getMatchString()93 public String getMatchString() { return null; }
parseInput(String msg)94 public void parseInput(String msg){ }
setParameterNumber(int p)95 public void setParameterNumber(int p) { this.param_number = p; }
96
getName()97 public String getName() { return this.name; }
getNetwork()98 public Network getNetwork() { return this.net; }
getInstanceNumber()99 public int getInstanceNumber() { return this.instance; }
getParameterNumber()100 public int getParameterNumber() { return this.param_number; }
101
setInputValue(int param, String value)102 public void setInputValue (int param, String value) {
103 DXLinkApplication dxa = (DXLinkApplication)this.net.getApplet();
104 String macro_name = dxa.getMacroName();
105 String assignment = macro_name + "_" + name + "_" + this.instance +
106 "_in_" + param + " = " + value + ";";
107 DXLSend(assignment);
108 }
109
setInputValueQuietly(int param, String value)110 public void setInputValueQuietly (int param, String value) {
111 DXLinkApplication dxa = (DXLinkApplication)this.net.getApplet();
112 String macro_name = dxa.getMacroName();
113 String assignment = "Executive(\"assign noexecute\"," +
114 "\"" + macro_name + "_" + name + "_" + this.instance +
115 "_in_" + param + "\"," + value + ");";
116 DXLSend(assignment);
117 }
118
setOutputValue(String value)119 public void setOutputValue (String value) {
120 this.setOutputValue (this.getParameterNumber(), value);
121 }
setOutputValues(String name, String value)122 public void setOutputValues (String name, String value) { }
123
124 //------------------------------------------------------------------
125 // BEGIN: 3/17/2006 jer
setOutputValueQuietly(String value)126 public void setOutputValueQuietly(String value) {
127 this.setOutputValueQuietly (this.getParameterNumber(), value);
128 }
129
setOutputValueQuietly(int param, String value)130 protected void setOutputValueQuietly (int param, String value) {
131 DXLinkApplication dxa = (DXLinkApplication)this.net.getApplet();
132 String macro_name = dxa.getMacroName();
133 String assignment = "Executive(\"assign noexecute\"," +
134 "\"" + macro_name + "_" + name + "_" + this.instance +
135 "_out_" + param + "\"," + value + ");";
136 DXLSend(assignment);
137 }
138 // END: 3/17/2006 jer
139 //------------------------------------------------------------------
140
setOutputValue(int param, String value)141 protected void setOutputValue (int param, String value) {
142 DXLinkApplication dxa = (DXLinkApplication)this.net.getApplet();
143 String macro_name = dxa.getMacroName();
144 String assignment = macro_name + "_" + name + "_" + this.instance +
145 "_out_" + param + " = " + value + ";";
146 DXLSend(assignment);
147 }
148
DXLSend(String assignment)149 protected void DXLSend(String assignment) {
150 try {
151 DXApplication dxa = (DXApplication)this.net.getApplet();
152 dxa.DXLSend(assignment);
153 } catch (Exception e) {
154 }
155 }
156
registerHandler(String matchStr)157 protected void registerHandler (String matchStr) {
158 try {
159 DXLinkApplication dxa = (DXLinkApplication)this.net.getApplet();
160 dxa.registerHandler(matchStr, this);
161 } catch (Exception e) {
162 }
163 }
164
handleMessage(String msg)165 public void handleMessage (String msg) {
166 StringTokenizer stok = new StringTokenizer(msg, ";");
167 while (stok.hasMoreTokens()) {
168 String tok = stok.nextToken();
169 try {
170 StringTokenizer assign_tok = new StringTokenizer(tok, "=");
171 String lhs = assign_tok.nextToken();
172 StringTokenizer remspaces = new StringTokenizer(lhs, " ");
173 String realLhs = null;
174 while (remspaces.hasMoreTokens())
175 realLhs = remspaces.nextToken();
176 lhs = realLhs;
177 String rhs = assign_tok.nextToken();
178 handleAssignment (lhs, rhs);
179 } catch (Exception e) {
180 }
181 }
182 }
183
handleAssignment(String lhs, String rhs)184 public boolean handleAssignment (String lhs, String rhs) {
185 //System.out.println (this.name + ": not handled: " + lhs + "=" + rhs);
186 return false;
187 }
188
189 }; // end Node
190
191