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