wneuper@2707
|
1 |
/**
|
rgradisc@988
|
2 |
* Created on Oct 13, 2003
|
wneuper@2707
|
3 |
* @author Richard Gradischnegg RG
|
rgradisc@988
|
4 |
*/
|
rgradisc@988
|
5 |
package isac.bridge;
|
rgradisc@988
|
6 |
|
wneuper@1976
|
7 |
import isac.util.CalcChanged;
|
rgradisc@1088
|
8 |
import isac.util.Formalization;
|
rgradisc@1133
|
9 |
import isac.util.Message;
|
rgradisc@1134
|
10 |
import isac.util.ResponseWrapper;
|
wneuper@2100
|
11 |
import isac.util.formulae.Assumptions;
|
rgradisc@1311
|
12 |
import isac.util.formulae.CalcHead;
|
wneuper@2511
|
13 |
import isac.util.formulae.KEStoreID;
|
rgradisc@1311
|
14 |
import isac.util.formulae.CalcHeadSimpleID;
|
wneuper@2051
|
15 |
import isac.util.formulae.CalcFormula;
|
wneuper@2065
|
16 |
import isac.util.formulae.FormHeadsContainer;
|
wneuper@2523
|
17 |
import isac.util.formulae.Match;
|
wneuper@1861
|
18 |
import isac.util.formulae.Position;
|
wneuper@2524
|
19 |
import isac.util.formulae.ProblemID;
|
rgradisc@1311
|
20 |
import isac.util.interfaces.ICalcElement;
|
wneuper@2065
|
21 |
import isac.util.interfaces.ICalcIterator;
|
rgradisc@1618
|
22 |
import isac.util.interfaces.IToCalc;
|
rgradisc@1306
|
23 |
import isac.util.parser.XMLParserDigest;
|
rgradisc@1311
|
24 |
import isac.util.tactics.Tactic;
|
rgradisc@1428
|
25 |
import isac.util.tactics.TacticsContainer;
|
rgradisc@1016
|
26 |
|
rgradisc@989
|
27 |
import java.io.BufferedReader;
|
rgradisc@989
|
28 |
import java.io.IOException;
|
rgradisc@989
|
29 |
import java.io.InputStreamReader;
|
rgradisc@989
|
30 |
import java.io.PrintWriter;
|
rgradisc@989
|
31 |
import java.net.MalformedURLException;
|
rgradisc@1019
|
32 |
import java.net.Socket;
|
rgradisc@989
|
33 |
import java.net.UnknownHostException;
|
rgradisc@988
|
34 |
import java.rmi.Naming;
|
rgradisc@988
|
35 |
import java.rmi.RMISecurityManager;
|
rgradisc@988
|
36 |
import java.rmi.RemoteException;
|
rgradisc@989
|
37 |
import java.rmi.registry.LocateRegistry;
|
rgradisc@988
|
38 |
import java.rmi.server.UnicastRemoteObject;
|
rgradisc@1196
|
39 |
import java.util.HashMap;
|
rgradisc@1191
|
40 |
import java.util.Iterator;
|
rgradisc@1196
|
41 |
import java.util.Map;
|
rgradisc@1198
|
42 |
import java.util.Set;
|
rgradisc@1191
|
43 |
import java.util.Vector;
|
rgradisc@988
|
44 |
|
wneuper@1861
|
45 |
import org.apache.log4j.Logger;
|
wneuper@1861
|
46 |
|
rgradisc@988
|
47 |
/**
|
wneuper@2707
|
48 |
* @author Richard Gradischnegg RG
|
wneuper@1976
|
49 |
*
|
wneuper@1989
|
50 |
* WN0422 here seems to be the key for simplifying the whole bridge.* drawbacks
|
wneuper@1989
|
51 |
* of the present implementation: # more complicated than necessary #
|
wneuper@1989
|
52 |
* JUnitTestCases require BridgeMain running # BridgeLogger cannot be made
|
wneuper@1989
|
53 |
* serializable, thus not accessible for writing by JUnitTestCases #
|
rgradisc@988
|
54 |
*/
|
rgradisc@988
|
55 |
public class BridgeRMI extends UnicastRemoteObject implements IBridgeRMI {
|
rgradisc@988
|
56 |
|
mlang@2448
|
57 |
private BridgeMain bridge_;
|
rgradisc@1178
|
58 |
|
mlang@2448
|
59 |
private XMLParserDigest xml_parser_digest_;
|
rgradisc@1178
|
60 |
|
mlang@2448
|
61 |
// Socket used to communicate with bridge
|
mlang@2448
|
62 |
private Socket socket_ = null;
|
rgradisc@1178
|
63 |
|
mlang@2448
|
64 |
// Writer to write sml requests to the kernel
|
mlang@2448
|
65 |
private PrintWriter out_ = null;
|
rgradisc@989
|
66 |
|
mlang@2448
|
67 |
// Reader to read sml response from kernel
|
mlang@2448
|
68 |
private BufferedReader in_ = null;
|
rgradisc@1191
|
69 |
|
mlang@2448
|
70 |
private String host_;
|
rgradisc@1196
|
71 |
|
mlang@2448
|
72 |
private int port_;
|
rgradisc@1178
|
73 |
|
mlang@2448
|
74 |
private String dtdpath_;
|
wneuper@1861
|
75 |
|
mlang@2448
|
76 |
private int rmiid_;
|
rgradisc@1191
|
77 |
|
mlang@2448
|
78 |
/**
|
mlang@2448
|
79 |
* Maps the Java calc(Tree)rmiID to the sml calc(Tree)rmiID. A mapping is
|
mlang@2448
|
80 |
* nescessary because these ids are not (nescessary) the same: For example
|
mlang@2448
|
81 |
* when restoring the kernel, the calcTree rmiID can change because of
|
mlang@2448
|
82 |
* already finished CalcTrees no longer existing and their CalcId assigned
|
mlang@2448
|
83 |
* to another CalcTree. key: Integer (javaCalcID) value: Integer (smlCalcID)
|
mlang@2448
|
84 |
*/
|
mlang@2448
|
85 |
private Map java_calcid_to_smlcalcid_;
|
rgradisc@1252
|
86 |
|
mlang@2448
|
87 |
/**
|
mlang@2448
|
88 |
* This map stores user inputs which have already been answered by the
|
mlang@2448
|
89 |
* kernel and the response being sent back to the user. These inputs are
|
mlang@2448
|
90 |
* resent to the kernel in the case of a newstart of the kernel. key:
|
mlang@2448
|
91 |
* Integer (javaCalcID) value: Vector (containing input strings)
|
mlang@2448
|
92 |
*/
|
mlang@2448
|
93 |
private Map inputs_;
|
rgradisc@1252
|
94 |
|
mlang@2448
|
95 |
static Logger logger_ = Logger.getLogger(BridgeRMI.class.getName());
|
rgradisc@1198
|
96 |
|
mlang@2448
|
97 |
public BridgeRMI(BridgeMain bridge, String host, int port, String dtdPath)
|
mlang@2448
|
98 |
throws RemoteException {
|
mlang@2448
|
99 |
logger_.warn("BridgeRMI obj.init: bridge=" + bridge + ", host=" + host
|
mlang@2448
|
100 |
+ ", port=" + port + ", dtdPath=" + dtdPath);
|
mlang@2448
|
101 |
this.host_ = host;
|
mlang@2448
|
102 |
this.port_ = port;
|
mlang@2448
|
103 |
this.dtdpath_ = dtdPath;
|
mlang@2448
|
104 |
this.bridge_ = bridge;
|
mlang@2448
|
105 |
/*
|
mlang@2448
|
106 |
* out = bridge.getSmlWriter(); in = bridge.getSmlReader();
|
mlang@2448
|
107 |
*/
|
mlang@2448
|
108 |
in_ = bridge.getSmlReader();
|
mlang@2448
|
109 |
try {
|
mlang@2448
|
110 |
socket_ = new Socket(host, port);
|
mlang@2448
|
111 |
out_ = new PrintWriter(socket_.getOutputStream(), true);
|
mlang@2448
|
112 |
in_ = new BufferedReader(new InputStreamReader(socket_
|
mlang@2448
|
113 |
.getInputStream()));
|
mlang@2448
|
114 |
} catch (UnknownHostException e) {
|
mlang@2448
|
115 |
System.out.println("Unknown host: " + host + "\n");
|
mlang@2448
|
116 |
} catch (IOException e) {
|
mlang@2448
|
117 |
System.out.println("No I/O\n");
|
mlang@2448
|
118 |
}
|
mlang@2448
|
119 |
rmiBind();
|
mlang@2448
|
120 |
xml_parser_digest_ = new XMLParserDigest(dtdPath);
|
mlang@2448
|
121 |
//xml_parser_digest_.setValidating(true);
|
mlang@2448
|
122 |
//...all XML-data should be tested in
|
mlang@2448
|
123 |
//javatest.isac.util.parser.TestXMLParserDigest
|
mlang@2448
|
124 |
inputs_ = new HashMap();
|
mlang@2448
|
125 |
java_calcid_to_smlcalcid_ = new HashMap();
|
mlang@2448
|
126 |
}
|
rgradisc@1215
|
127 |
|
mlang@2448
|
128 |
/**
|
mlang@2448
|
129 |
* Buffers input sent to the sml-Kernel (for later possible restart)
|
mlang@2448
|
130 |
*
|
mlang@2448
|
131 |
* @param javaCalcID
|
mlang@2448
|
132 |
* calcTree this input belongs to
|
mlang@2448
|
133 |
* @param input
|
mlang@2448
|
134 |
* to be buffered
|
mlang@2448
|
135 |
*/
|
mlang@2448
|
136 |
public void bufferInput(int javaCalcID, String input) {
|
mlang@2448
|
137 |
Vector v = (Vector) inputs_.get(new Integer(javaCalcID));
|
mlang@2448
|
138 |
if (v == null) {
|
mlang@2448
|
139 |
v = new Vector();
|
mlang@2448
|
140 |
inputs_.put(new Integer(javaCalcID), v);
|
mlang@2448
|
141 |
}
|
mlang@2448
|
142 |
v.add(input);
|
mlang@2448
|
143 |
}
|
rgradisc@988
|
144 |
|
mlang@2448
|
145 |
// '@calcid@' is a placeholder for the CalcID
|
mlang@2448
|
146 |
// this method replaces it with a real CalcID
|
mlang@2448
|
147 |
private String insertCalcID(int id, String s) {
|
mlang@2448
|
148 |
return s.replaceAll("@calcid@", String.valueOf(id));
|
mlang@2448
|
149 |
}
|
rgradisc@988
|
150 |
|
mlang@2448
|
151 |
// return smallest integer which is not yet
|
mlang@2448
|
152 |
// used as a (java)CalcID
|
mlang@2448
|
153 |
private int smallestFreeCalcID() {
|
mlang@2448
|
154 |
Set set = java_calcid_to_smlcalcid_.keySet();
|
mlang@2448
|
155 |
for (int i = 0; i < set.size(); i++) {
|
wneuper@2523
|
156 |
if (!set.contains(new Integer(i))) {
|
wneuper@2523
|
157 |
return i;
|
wneuper@2523
|
158 |
}
|
mlang@2448
|
159 |
}
|
mlang@2448
|
160 |
return set.size();
|
mlang@2448
|
161 |
}
|
rgradisc@988
|
162 |
|
mlang@2448
|
163 |
/*
|
mlang@2448
|
164 |
* Send a sml instruction to the kernel. restore == true, if the instruction
|
mlang@2448
|
165 |
* is resent after the kernel crashed
|
mlang@2448
|
166 |
*/
|
mlang@2448
|
167 |
private ResponseWrapper sendToKernel(String smlInstr, boolean restore) {
|
mlang@2448
|
168 |
logger_.fatal(" BR->KN: sendToKernel(" + smlInstr + ")");
|
mlang@2448
|
169 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
170 |
//bridge.log(1,"---sendToKernel |
|
mlang@2448
|
171 |
//bridge.isRestoring=="+bridge.isRestoring());
|
mlang@2448
|
172 |
//bridge.log(1,"---sendToKernel | restoring=="+restore);
|
mlang@2448
|
173 |
if (!bridge_.isRestoring() || restore) {
|
mlang@2448
|
174 |
String xmlString = "";
|
rgradisc@1107
|
175 |
|
mlang@2448
|
176 |
out_.println(smlInstr);// send the sml Instruction to the sml Kernel
|
mlang@2448
|
177 |
try {
|
mlang@2448
|
178 |
xmlString = in_.readLine();//read the response from the kernel
|
mlang@2448
|
179 |
logger_.fatal(" BR<-KN: sendToKernel <- xml= " + xmlString);
|
mlang@2448
|
180 |
} catch (IOException e) {
|
mlang@2448
|
181 |
bridge_.log(1, "BridgeRMI.interpretSKN: IOException");
|
mlang@2448
|
182 |
e.printStackTrace();
|
mlang@2448
|
183 |
}
|
mlang@2448
|
184 |
//if (!(restore) && bridge.isRestoring()) {
|
mlang@2448
|
185 |
// this.restoreExistingCalcTrees();
|
mlang@2448
|
186 |
//}
|
mlang@2448
|
187 |
wrapper = xml_parser_digest_.parse(xmlString);
|
mlang@2448
|
188 |
}
|
mlang@2448
|
189 |
return wrapper;
|
mlang@2448
|
190 |
}
|
rgradisc@1016
|
191 |
|
mlang@2448
|
192 |
/**
|
mlang@2448
|
193 |
* Starts a new calculation in the sml-Kernel: i.e. a new CalcTree with the
|
mlang@2448
|
194 |
* initial hot_spot_
|
mlang@2448
|
195 |
*
|
mlang@2448
|
196 |
* @param instr
|
mlang@2448
|
197 |
* "CalcTree" + Formalization in string Representation
|
mlang@2448
|
198 |
* @return Returns smlCalcID
|
mlang@2448
|
199 |
*/
|
mlang@2448
|
200 |
private synchronized int newCalculation(int javaCalcID, String instr,
|
mlang@2448
|
201 |
boolean restore) {
|
rgradisc@1586
|
202 |
|
mlang@2448
|
203 |
logger_.warn("newCalculation: javaCalcID=" + javaCalcID + ", instr"
|
mlang@2448
|
204 |
+ instr + ", restore=" + restore);
|
mlang@2448
|
205 |
bridge_.log(1, "new calculation: " + instr);
|
mlang@2448
|
206 |
ResponseWrapper wrapper = sendToKernel(instr, restore);
|
wneuper@2523
|
207 |
if (wrapper == null)
|
wneuper@2523
|
208 |
return -1;
|
mlang@2448
|
209 |
int smlCalcID = wrapper.getCalcID();
|
mlang@2448
|
210 |
/* int javaCalcID = smallestFreeCalcID(); */
|
mlang@2448
|
211 |
java_calcid_to_smlcalcid_.put(new Integer(javaCalcID), new Integer(
|
mlang@2448
|
212 |
smlCalcID));
|
mlang@2448
|
213 |
sendToKernel("Iterator " + smlCalcID + ";", restore);//WN041209 no
|
mlang@2448
|
214 |
// Iterator from KN
|
mlang@2448
|
215 |
sendToKernel("moveActiveRoot " + smlCalcID + ";", restore);//WN041209
|
mlang@2448
|
216 |
// no
|
mlang@2448
|
217 |
// Iterator
|
mlang@2448
|
218 |
// from KN
|
wneuper@2523
|
219 |
if (!restore)
|
wneuper@2523
|
220 |
bufferInput(javaCalcID, instr);
|
mlang@2448
|
221 |
return smlCalcID;
|
mlang@2448
|
222 |
}
|
rgradisc@1586
|
223 |
|
mlang@2448
|
224 |
/**
|
mlang@2448
|
225 |
* Send an instruction to the SML-Kernel and return the response
|
mlang@2448
|
226 |
*
|
mlang@2448
|
227 |
* @param smlInstr
|
mlang@2448
|
228 |
* Instruction
|
mlang@2448
|
229 |
* @return response from SML-Kernel
|
mlang@2448
|
230 |
*/
|
mlang@2448
|
231 |
private synchronized ResponseWrapper interpretSML(int javaCalcID,
|
mlang@2448
|
232 |
String instr, boolean restore) {
|
mlang@2448
|
233 |
int smlCalcID;
|
mlang@2448
|
234 |
smlCalcID = ((Integer) java_calcid_to_smlcalcid_.get(new Integer(
|
mlang@2448
|
235 |
javaCalcID))).intValue();
|
mlang@2448
|
236 |
String smlInstr = insertCalcID(smlCalcID, instr);
|
mlang@2448
|
237 |
bridge_.log(1, "JavaCalcID " + javaCalcID + " == SmlCalcID "
|
mlang@2448
|
238 |
+ smlCalcID);
|
mlang@2448
|
239 |
bridge_.log(1, "sent to bridge: " + smlInstr);
|
mlang@2448
|
240 |
ResponseWrapper wrapper = this.sendToKernel(smlInstr, restore);
|
wneuper@2523
|
241 |
if (!restore)
|
wneuper@2523
|
242 |
bufferInput(javaCalcID, smlInstr);
|
mlang@2448
|
243 |
return wrapper;
|
mlang@2448
|
244 |
}
|
rgradisc@1586
|
245 |
|
mlang@2448
|
246 |
private void rmiBind() {
|
mlang@2448
|
247 |
logger_.warn("rmiBind");
|
mlang@2448
|
248 |
if (System.getSecurityManager() == null) {
|
mlang@2448
|
249 |
System.setSecurityManager(new RMISecurityManager());
|
mlang@2448
|
250 |
}
|
mlang@2448
|
251 |
try {
|
mlang@2448
|
252 |
LocateRegistry.createRegistry(1099);
|
mlang@2448
|
253 |
} catch (java.rmi.RemoteException exc2) {
|
mlang@2448
|
254 |
System.err.println("can not create registry: " + exc2.getMessage());
|
mlang@2448
|
255 |
}
|
mlang@2448
|
256 |
String name = "//" + host_ + "/BridgeRMI";
|
mlang@2448
|
257 |
try {
|
mlang@2448
|
258 |
System.out.println("try to bind as " + name);
|
mlang@2448
|
259 |
Naming.rebind(name, this);
|
mlang@2448
|
260 |
System.out.println("Bridge RMI bound to " + name);
|
mlang@2448
|
261 |
} catch (java.rmi.ConnectException e) {
|
mlang@2448
|
262 |
System.err.println("failed to contact as " + name
|
mlang@2448
|
263 |
+ " (creating RMI-Server on localhost: 1099)");
|
mlang@2448
|
264 |
} catch (RemoteException e) {
|
mlang@2448
|
265 |
e.printStackTrace();
|
mlang@2448
|
266 |
} catch (MalformedURLException e) {
|
mlang@2448
|
267 |
e.printStackTrace();
|
mlang@2448
|
268 |
}
|
mlang@2448
|
269 |
}
|
rgradisc@1016
|
270 |
|
mlang@2448
|
271 |
//---------------------------------------------- Delegated Methods for
|
mlang@2448
|
272 |
// MathEngine
|
mlang@2448
|
273 |
public void modifyCalcHead(CalcHead calcHead) {
|
mlang@2448
|
274 |
logger_.warn("modifyCalcHead: calc_head_=" + calcHead.toSMLString());
|
mlang@2448
|
275 |
ResponseWrapper wrapper = interpretSML(calcHead.getCalcTreeID(), //FIXME
|
mlang@2448
|
276 |
// simplify
|
mlang@2448
|
277 |
// CalcHead
|
mlang@2448
|
278 |
"modifyCalcHead @calcid@ " + calcHead.toModifyCalcHeadString()
|
mlang@2448
|
279 |
+ ";", false);
|
mlang@2448
|
280 |
//if (wrapper == null) WN040924 miniupdate for void instead CalcHead
|
mlang@2448
|
281 |
// return null; WN040924 miniupdate for void instead CalcHead
|
mlang@2448
|
282 |
CalcHead result = (CalcHead) wrapper.getResponse();
|
mlang@2448
|
283 |
result.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
|
mlang@2448
|
284 |
//return result; WN040924 miniupdate for void instead CalcHead
|
mlang@2448
|
285 |
}
|
rgradisc@1133
|
286 |
|
mlang@2448
|
287 |
/**
|
mlang@2448
|
288 |
* Starts the specifying phase: fill the calcTree with the appropriate
|
mlang@2448
|
289 |
* information. Once the calc_head_ is fully specified, the user can begin
|
mlang@2448
|
290 |
* with the actual calculation.
|
mlang@2448
|
291 |
*
|
mlang@2448
|
292 |
* @param f
|
mlang@2448
|
293 |
* Formalization for this calculation (empty if user starts a
|
mlang@2448
|
294 |
* complete new calculation)
|
mlang@2448
|
295 |
* @return javaCalcID
|
mlang@2448
|
296 |
*/
|
mlang@2448
|
297 |
public int startCalculation(Formalization formalization) {
|
mlang@2448
|
298 |
logger_.warn("startCalculation: formalization=" + formalization);
|
mlang@2448
|
299 |
int javaCalcID = smallestFreeCalcID();
|
mlang@2448
|
300 |
this.bridge_.log(1, "-----smallest free javaCalcID = " + javaCalcID);
|
mlang@2448
|
301 |
int smlCalcID = newCalculation(javaCalcID, "CalcTree "
|
mlang@2448
|
302 |
+ formalization.toSMLString() + ";", false);
|
mlang@2448
|
303 |
//javaCalcIDtoSmlCalcID.put(new Integer(javaCalcID), new
|
mlang@2448
|
304 |
// Integer(smlCalcID));
|
mlang@2448
|
305 |
return javaCalcID;
|
mlang@2448
|
306 |
}
|
rgradisc@1586
|
307 |
|
mlang@2448
|
308 |
/*
|
mlang@2448
|
309 |
* // this function is no longer needed here, // MathEngine handels the
|
mlang@2448
|
310 |
* startSolving now public boolean startSolving(int calcID) { //TODO: check
|
mlang@2448
|
311 |
* activeCalcHead for completeness return true; }
|
mlang@2448
|
312 |
*/
|
rgradisc@1618
|
313 |
|
wneuper@2543
|
314 |
/**
|
wneuper@2543
|
315 |
* @deprecated
|
wneuper@2543
|
316 |
*/
|
mlang@2448
|
317 |
public void completeCalcHead(int id, CalcHead calcHead, int completeItem) {
|
mlang@2448
|
318 |
ResponseWrapper wrapper = interpretSML(calcHead.getCalcTreeID(),
|
mlang@2448
|
319 |
"autoCalculate @calcid@ CompleteCalcHead;", false);
|
mlang@2448
|
320 |
CalcHead result = (CalcHead) wrapper.getResponse();
|
mlang@2448
|
321 |
result.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
|
mlang@2448
|
322 |
//return result; WN040924 miniupdate
|
mlang@2448
|
323 |
}
|
rgradisc@1618
|
324 |
|
wneuper@2543
|
325 |
/**
|
wneuper@2543
|
326 |
* FIXXME.WN05 completeCalcHead MUST return CalcChanged !
|
wneuper@2543
|
327 |
*/
|
mlang@2448
|
328 |
public void completeCalcHead(int id) {
|
mlang@2448
|
329 |
logger_.warn("begin completeCalcHead");
|
mlang@2448
|
330 |
ResponseWrapper wrapper = interpretSML(id, //calc_head_.getCalcTreeID(),
|
mlang@2448
|
331 |
"autoCalculate @calcid@ CompleteCalcHead;", false);
|
wneuper@2543
|
332 |
//return CalcChanged !!!
|
wneuper@2543
|
333 |
// if (wrapper == null)
|
wneuper@2543
|
334 |
// return null;
|
wneuper@2543
|
335 |
// else if (wrapper.getResponse() instanceof Message)
|
wneuper@2543
|
336 |
// return null;//TODO.WN041209 handle messages
|
wneuper@2543
|
337 |
// else
|
wneuper@2543
|
338 |
// return (CalcChanged) wrapper.getResponse();
|
mlang@2448
|
339 |
}
|
rgradisc@1065
|
340 |
|
mlang@2448
|
341 |
public int setNextTactic(int id, Tactic tactic) {
|
mlang@2448
|
342 |
ResponseWrapper wrapper = interpretSML(id, "setNextTactic @calcid@ ("
|
mlang@2448
|
343 |
+ tactic.toSMLString() + ");", false);
|
mlang@2448
|
344 |
if (wrapper == null) //WN050223 response ... MESSAGE wird nicht
|
wneuper@2523
|
345 |
// ausgeparst !!!
|
wneuper@2523
|
346 |
return -1;
|
mlang@2448
|
347 |
if (wrapper.getResponse() == null) {
|
wneuper@2566
|
348 |
//WN041126 ---> isac.wsdialog.DialogGuide#notifyUserAction #@#
|
wneuper@2608
|
349 |
//autoCalculate(id, /* scope */1, /* steps */1);
|
mlang@2448
|
350 |
return 0; //Everything is ok
|
mlang@2448
|
351 |
} else {
|
mlang@2448
|
352 |
return -1; //An Error occcured
|
mlang@2448
|
353 |
}
|
mlang@2448
|
354 |
}
|
rgradisc@1215
|
355 |
|
mlang@2448
|
356 |
public Tactic fetchProposedTactic(int id) {
|
mlang@2448
|
357 |
ResponseWrapper wrapper = interpretSML(id,
|
mlang@2448
|
358 |
"fetchProposedTactic @calcid@;", false);
|
wneuper@2523
|
359 |
if (wrapper == null) {
|
wneuper@2523
|
360 |
return null;
|
wneuper@2523
|
361 |
}
|
mlang@2448
|
362 |
// wrapper != null
|
mlang@2448
|
363 |
return (Tactic) wrapper.getResponse();
|
mlang@2448
|
364 |
}
|
rgradisc@1016
|
365 |
|
mlang@2448
|
366 |
public CalcChanged autoCalculate(int id, int scope, int nSteps) {
|
mlang@2448
|
367 |
logger_.debug("BridgeRMI#autoCalculate: id=" + id + ", scope" + scope
|
mlang@2448
|
368 |
+ ", nSteps" + nSteps);
|
mlang@2448
|
369 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
370 |
//3 means IToCalc.SCOPE_CALCHEAD:
|
mlang@2448
|
371 |
if ((scope == 3) && (nSteps == 0)) {
|
mlang@2448
|
372 |
wrapper = interpretSML(id,
|
mlang@2448
|
373 |
"autoCalculate @calcid@ CompleteCalcHead;", false);
|
wneuper@2543
|
374 |
//FIXXXME.WN040624 nSteps == 0 hides mismatch in specifications
|
mlang@2448
|
375 |
} else if ((scope == IToCalc.SCOPE_CALCULATION) && (nSteps == 0)) {
|
mlang@2448
|
376 |
wrapper = interpretSML(id, "autoCalculate @calcid@ CompleteCalc;",
|
mlang@2448
|
377 |
false);
|
rgradisc@1016
|
378 |
|
wneuper@2543
|
379 |
} else if ((scope == IToCalc.SCOPE_MODEL) && (nSteps == 0)) {
|
wneuper@2543
|
380 |
wrapper = interpretSML(id, "autoCalculate @calcid@ CompleteModel;",
|
wneuper@2543
|
381 |
false);
|
wneuper@2543
|
382 |
|
mlang@2448
|
383 |
} else if ((scope == IToCalc.SCOPE_SUBCALCULATION) && (nSteps == 0)) {
|
mlang@2448
|
384 |
wrapper = interpretSML(id,
|
mlang@2448
|
385 |
"autoCalculate @calcid@ CompleteToSubpbl;", false);
|
rgradisc@1016
|
386 |
|
mlang@2448
|
387 |
} else if ((scope == IToCalc.SCOPE_SUBPROBLEM) && (nSteps == 0)) {
|
mlang@2448
|
388 |
wrapper = interpretSML(id,
|
mlang@2448
|
389 |
"autoCalculate @calcid@ CompleteSubpbl;", false);
|
mlang@2448
|
390 |
} else {
|
mlang@2448
|
391 |
//FIXXXME040624: steps do not regard the scope
|
mlang@2448
|
392 |
wrapper = interpretSML(id, "autoCalculate @calcid@ (Step " + nSteps
|
mlang@2448
|
393 |
+ ");", false);
|
mlang@2448
|
394 |
}
|
mlang@2448
|
395 |
if (wrapper == null)
|
mlang@2448
|
396 |
return null;
|
mlang@2448
|
397 |
else if (wrapper.getResponse() instanceof Message)
|
mlang@2448
|
398 |
return null;//TODO.WN041209 handle messages
|
mlang@2448
|
399 |
else
|
mlang@2448
|
400 |
return (CalcChanged) wrapper.getResponse();
|
mlang@2448
|
401 |
}
|
rgradisc@1016
|
402 |
|
mlang@2448
|
403 |
public CalcChanged replaceFormula(int id, CalcFormula f) {
|
mlang@2448
|
404 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
405 |
wrapper = interpretSML(id, "replaceFormula @calcid@ \""
|
mlang@2448
|
406 |
+ f.toSMLString() + "\";", false);
|
mlang@2448
|
407 |
if (wrapper == null)
|
mlang@2448
|
408 |
return null;
|
mlang@2448
|
409 |
else if (wrapper.getResponse() instanceof Message)
|
mlang@2448
|
410 |
return null;//TODO.WN041209 handle messages
|
mlang@2448
|
411 |
else
|
mlang@2448
|
412 |
return (CalcChanged) wrapper.getResponse();
|
mlang@2448
|
413 |
}
|
wneuper@1997
|
414 |
|
mlang@2448
|
415 |
public CalcChanged appendFormula(int id, CalcFormula f) {
|
mlang@2448
|
416 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
417 |
wrapper = interpretSML(id, "appendFormula @calcid@ \""
|
mlang@2448
|
418 |
+ f.toSMLString() + "\";", false);
|
mlang@2448
|
419 |
if (wrapper == null)
|
mlang@2448
|
420 |
return null;
|
mlang@2448
|
421 |
else if (wrapper.getResponse() instanceof Message)
|
mlang@2448
|
422 |
return null;//TODO.WN041209 handle messages
|
mlang@2448
|
423 |
else
|
mlang@2448
|
424 |
return (CalcChanged) wrapper.getResponse();
|
mlang@2448
|
425 |
}
|
wneuper@2003
|
426 |
|
mlang@2448
|
427 |
public CalcChanged intermediateSteps(int id, ICalcIterator ci) {
|
mlang@2448
|
428 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
429 |
wrapper = interpretSML(id, "interSteps @calcid@ " + ci.toSMLString()
|
mlang@2448
|
430 |
+ ";", false);
|
mlang@2448
|
431 |
if (wrapper == null)
|
mlang@2448
|
432 |
return null;
|
mlang@2448
|
433 |
else if (wrapper.getResponse() instanceof Message)
|
mlang@2448
|
434 |
return null;//TODO.WN041209 handle messages
|
mlang@2448
|
435 |
else
|
mlang@2448
|
436 |
return (CalcChanged) wrapper.getResponse();
|
mlang@2448
|
437 |
}
|
wneuper@2069
|
438 |
|
mlang@2448
|
439 |
public Vector getElementsFromTo(int id, ICalcIterator iterator_from,
|
mlang@2448
|
440 |
ICalcIterator iterator_to, Integer level,
|
mlang@2448
|
441 |
boolean result_includes_tactics) {
|
mlang@2448
|
442 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
443 |
// getElementsFromTo 1 unc gen 1 false;
|
mlang@2448
|
444 |
wrapper = interpretSML(id, "getElementsFromTo @calcid@ "
|
mlang@2448
|
445 |
+ iterator_from.toSMLString() + " " + iterator_to.toSMLString()
|
mlang@2448
|
446 |
+ " " + level + " " + result_includes_tactics + ";", false);
|
wneuper@2523
|
447 |
if (wrapper == null)
|
wneuper@2523
|
448 |
return null;
|
mlang@2448
|
449 |
FormHeadsContainer con = (FormHeadsContainer) wrapper.getResponse();
|
mlang@2448
|
450 |
return con.getElements();
|
mlang@2448
|
451 |
}
|
wneuper@2104
|
452 |
|
mlang@2448
|
453 |
public int iterator(int id) {
|
mlang@2448
|
454 |
logger_.warn("iterator: id=" + id);
|
mlang@2448
|
455 |
// ResponseWrapper wrapper = null;
|
mlang@2448
|
456 |
// wrapper = interpretSML(id, "Iterator @calcid@;", false);
|
mlang@2448
|
457 |
// if (wrapper == null)
|
mlang@2448
|
458 |
// return -1;
|
mlang@2448
|
459 |
// return Integer.parseInt(((CalcHeadSimpleID)
|
mlang@2448
|
460 |
// wrapper.getResponse()).getID());
|
mlang@2448
|
461 |
if (id == 1) {
|
mlang@2448
|
462 |
ResponseWrapper wrapper = interpretSML(id, "Iterator @calcid@;",
|
mlang@2448
|
463 |
false);
|
mlang@2448
|
464 |
if (wrapper == null)
|
mlang@2448
|
465 |
return -1;
|
mlang@2448
|
466 |
else
|
mlang@2448
|
467 |
return Integer.parseInt(((CalcHeadSimpleID) wrapper
|
mlang@2448
|
468 |
.getResponse()).getID());
|
mlang@2448
|
469 |
} else
|
mlang@2448
|
470 |
return 4711;//TODO.WN041208 drop CalcIterator.iteratorID_
|
mlang@2448
|
471 |
}
|
rgradisc@1252
|
472 |
|
mlang@2448
|
473 |
// private Position moveSuccess(ResponseWrapper wrapper) {
|
mlang@2448
|
474 |
// if (wrapper == null)
|
mlang@2448
|
475 |
// return null;
|
mlang@2448
|
476 |
// else {
|
mlang@2448
|
477 |
// if (wrapper.getResponse() instanceof Message)
|
mlang@2448
|
478 |
// return null;//TODO.WN041209 handle messages
|
mlang@2448
|
479 |
// else {
|
mlang@2448
|
480 |
// Position p = (Position) wrapper.getPosition();
|
mlang@2448
|
481 |
// return p;
|
mlang@2448
|
482 |
// }
|
mlang@2448
|
483 |
// }
|
mlang@2448
|
484 |
// }
|
mlang@2448
|
485 |
private Position moveSuccess(ResponseWrapper wrapper) {
|
mlang@2448
|
486 |
if (wrapper == null)
|
mlang@2448
|
487 |
return null;
|
mlang@2448
|
488 |
else {
|
mlang@2448
|
489 |
Object r = wrapper.getResponse();
|
mlang@2448
|
490 |
if (r instanceof Message)
|
mlang@2448
|
491 |
return null;//TODO.WN041209 handle messages
|
mlang@2448
|
492 |
else {
|
mlang@2448
|
493 |
Position p = (Position) wrapper.getResponse();
|
mlang@2448
|
494 |
return p;
|
mlang@2448
|
495 |
}
|
mlang@2448
|
496 |
}
|
mlang@2448
|
497 |
}
|
rgradisc@1252
|
498 |
|
mlang@2448
|
499 |
//returns Position for uniformity with move*; not required elsewhere
|
mlang@2448
|
500 |
public Position moveActiveFormula(int javaCalcID, Position p) {
|
mlang@2448
|
501 |
logger_.debug("moveDown: javaCalcID=" + javaCalcID + ", sml_pos="
|
mlang@2448
|
502 |
+ p.toSMLString());
|
mlang@2448
|
503 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
mlang@2448
|
504 |
"moveActiveFormula @calcid@ " + p.toSMLString() + ";", false);
|
mlang@2448
|
505 |
return moveSuccess(wrapper);
|
mlang@2448
|
506 |
}
|
wneuper@2002
|
507 |
|
mlang@2448
|
508 |
public Position moveRoot(int javaCalcID, int iteratorID) {
|
mlang@2448
|
509 |
logger_.warn("moveRoot: javaCalcID=" + javaCalcID);
|
mlang@2448
|
510 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
511 |
if (iteratorID == 1)
|
mlang@2448
|
512 |
wrapper = interpretSML(javaCalcID, "moveActiveRoot @calcid@" + ";",
|
mlang@2448
|
513 |
false);
|
mlang@2448
|
514 |
else
|
mlang@2448
|
515 |
wrapper = interpretSML(javaCalcID, "moveRoot @calcid@ " + ";",
|
mlang@2448
|
516 |
false);
|
mlang@2448
|
517 |
return moveSuccess(wrapper);
|
mlang@2448
|
518 |
}
|
rgradisc@1107
|
519 |
|
mlang@2448
|
520 |
public Position moveUp(int javaCalcID, int iteratorID, Position p) {
|
mlang@2448
|
521 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
522 |
if (iteratorID == 1)
|
mlang@2448
|
523 |
wrapper = interpretSML(javaCalcID, "moveActiveUp @calcid@" + ";",
|
mlang@2448
|
524 |
false);
|
mlang@2448
|
525 |
else
|
mlang@2448
|
526 |
wrapper = interpretSML(javaCalcID, "moveUp @calcid@ "
|
mlang@2448
|
527 |
+ p.toSMLString() + ";", false);
|
mlang@2448
|
528 |
return moveSuccess(wrapper);
|
mlang@2448
|
529 |
}
|
rgradisc@1252
|
530 |
|
mlang@2448
|
531 |
public Position moveDown(int javaCalcID, int iteratorID, Position p) {
|
mlang@2448
|
532 |
logger_.debug("moveDown: javaCalcID=" + javaCalcID + ", sml_pos="
|
mlang@2448
|
533 |
+ p.toSMLString());
|
mlang@2448
|
534 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
535 |
if (iteratorID == 1)
|
mlang@2448
|
536 |
wrapper = interpretSML(javaCalcID, "moveActiveDown @calcid@" + ";",
|
mlang@2448
|
537 |
false);
|
mlang@2448
|
538 |
else
|
mlang@2448
|
539 |
wrapper = interpretSML(javaCalcID, "moveDown @calcid@ "
|
mlang@2448
|
540 |
+ p.toSMLString() + ";", false);
|
mlang@2448
|
541 |
return moveSuccess(wrapper);
|
mlang@2448
|
542 |
}
|
rgradisc@1178
|
543 |
|
mlang@2448
|
544 |
public Position moveLevelUp(int javaCalcID, int iteratorID, Position p) {
|
mlang@2448
|
545 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
546 |
if (iteratorID == 1)
|
mlang@2448
|
547 |
wrapper = interpretSML(javaCalcID, "moveActiveLevelUp @calcid@"
|
mlang@2448
|
548 |
+ ";", false);
|
mlang@2448
|
549 |
else
|
mlang@2448
|
550 |
wrapper = interpretSML(javaCalcID, "moveLevelUp @calcid@ "
|
mlang@2448
|
551 |
+ p.toSMLString() + ";", false);
|
mlang@2448
|
552 |
return moveSuccess(wrapper);
|
mlang@2448
|
553 |
}
|
rgradisc@1191
|
554 |
|
mlang@2448
|
555 |
public Position moveLevelDown(int javaCalcID, int iteratorID, Position p) {
|
mlang@2448
|
556 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
557 |
if (iteratorID == 1)
|
mlang@2448
|
558 |
wrapper = interpretSML(javaCalcID, "moveActiveLevelDown @calcid@"
|
mlang@2448
|
559 |
+ ";", false);
|
mlang@2448
|
560 |
else
|
mlang@2448
|
561 |
wrapper = interpretSML(javaCalcID, "moveLevelDown @calcid@ " + " "
|
mlang@2448
|
562 |
+ p.toSMLString() + ";", false);
|
mlang@2448
|
563 |
return moveSuccess(wrapper);
|
mlang@2448
|
564 |
}
|
rgradisc@1191
|
565 |
|
mlang@2448
|
566 |
public Position moveCalcHead(int javaCalcID, int iteratorID, Position p) {
|
mlang@2448
|
567 |
ResponseWrapper wrapper = null;
|
mlang@2448
|
568 |
if (iteratorID == 1)
|
mlang@2448
|
569 |
wrapper = interpretSML(javaCalcID, "moveActiveCalcHead @calcid@"
|
mlang@2448
|
570 |
+ ";", false);
|
mlang@2448
|
571 |
else
|
mlang@2448
|
572 |
wrapper = interpretSML(javaCalcID, "moveCalcHead @calcid@ " + " "
|
mlang@2448
|
573 |
+ p.toSMLString() + ";", false);
|
mlang@2448
|
574 |
return moveSuccess(wrapper);
|
mlang@2448
|
575 |
}
|
wneuper@1989
|
576 |
|
mlang@2448
|
577 |
/**
|
mlang@2448
|
578 |
* @deprecated in favour of getTactic
|
mlang@2448
|
579 |
*/
|
mlang@2448
|
580 |
public boolean moveTactic(int javaCalcID, int iteratorID) {
|
mlang@2448
|
581 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
mlang@2448
|
582 |
"moveTactic @calcid@ " + iteratorID + ";", false);
|
mlang@2448
|
583 |
return true;//WN041208 moveSuccess(wrapper);
|
mlang@2448
|
584 |
}
|
rgradisc@1191
|
585 |
|
mlang@2448
|
586 |
/**
|
mlang@2448
|
587 |
* @deprecated in favour of getFormula
|
mlang@2448
|
588 |
*/
|
mlang@2448
|
589 |
public boolean moveFormula(int javaCalcID, int iteratorID) {
|
mlang@2448
|
590 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
mlang@2448
|
591 |
"moveFormula @calcid@ " + iteratorID + ";", false);
|
mlang@2448
|
592 |
return true;//WN041208 moveSuccess(wrapper);
|
mlang@2448
|
593 |
}
|
rgradisc@1191
|
594 |
|
mlang@2448
|
595 |
public int smlCalcIDtoJavaCalcID(int smlID) {
|
mlang@2448
|
596 |
Iterator it = java_calcid_to_smlcalcid_.keySet().iterator();
|
mlang@2448
|
597 |
while (it.hasNext()) {
|
mlang@2448
|
598 |
Object key = it.next();
|
mlang@2448
|
599 |
Integer value = (Integer) java_calcid_to_smlcalcid_.get(key);
|
wneuper@2523
|
600 |
if (value.intValue() == smlID) {
|
wneuper@2523
|
601 |
return ((Integer) key).intValue();
|
wneuper@2523
|
602 |
}
|
mlang@2448
|
603 |
}
|
mlang@2448
|
604 |
return -1;
|
mlang@2448
|
605 |
}
|
rgradisc@1196
|
606 |
|
mlang@2448
|
607 |
public boolean destruct(int javaCalcID) {
|
mlang@2448
|
608 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
mlang@2448
|
609 |
"DEconstrCalcTree @calcid@;", false);
|
wneuper@2523
|
610 |
if (wrapper == null) {
|
wneuper@2523
|
611 |
return false;
|
wneuper@2523
|
612 |
}
|
mlang@2448
|
613 |
java_calcid_to_smlcalcid_.remove(new Integer(javaCalcID));
|
mlang@2448
|
614 |
inputs_.remove(new Integer(javaCalcID));
|
mlang@2448
|
615 |
return true;
|
mlang@2448
|
616 |
}
|
wneuper@1875
|
617 |
|
mlang@2448
|
618 |
public Map getInputs() {
|
mlang@2448
|
619 |
return inputs_;
|
mlang@2448
|
620 |
}
|
wneuper@1875
|
621 |
|
mlang@2448
|
622 |
public int getRmiID() {
|
mlang@2448
|
623 |
return rmiid_;
|
mlang@2448
|
624 |
}
|
wneuper@1875
|
625 |
|
mlang@2448
|
626 |
public void setRmiID(int i) {
|
mlang@2448
|
627 |
logger_.warn("setRmiID: i=" + i);
|
mlang@2448
|
628 |
rmiid_ = i;
|
mlang@2448
|
629 |
}
|
wneuper@1875
|
630 |
|
mlang@2448
|
631 |
/**
|
mlang@2448
|
632 |
* Save a calcTree for later restoring (probably to another SML Kernel)
|
mlang@2448
|
633 |
*
|
mlang@2448
|
634 |
* @param calcTreeID
|
mlang@2448
|
635 |
* the ID of the calcTree
|
mlang@2448
|
636 |
* @return a vector containing strings. This is representatation of the
|
mlang@2448
|
637 |
* status of the calcTree
|
mlang@2448
|
638 |
*/
|
mlang@2448
|
639 |
public Vector saveCalcTree(int calcTreeID) {
|
mlang@2448
|
640 |
this.bridge_.log(1, "----------------begin saving calcTree "
|
mlang@2448
|
641 |
+ calcTreeID + "------------");
|
mlang@2448
|
642 |
return (Vector) inputs_.get(new Integer(calcTreeID));
|
mlang@2448
|
643 |
}
|
wneuper@1976
|
644 |
|
mlang@2448
|
645 |
/**
|
mlang@2448
|
646 |
* Restore a saved calcTree.
|
mlang@2448
|
647 |
*
|
mlang@2448
|
648 |
* @param v
|
mlang@2448
|
649 |
* Vector containing strings
|
mlang@2448
|
650 |
* @return Java CalcTreeID (not SML-ID)
|
mlang@2448
|
651 |
*/
|
mlang@2448
|
652 |
public int loadCalcTree(Vector v) {
|
mlang@2448
|
653 |
this.bridge_.log(1, "----------------begin loading------------");
|
mlang@2448
|
654 |
int javaCalcID = smallestFreeCalcID();
|
mlang@2448
|
655 |
this.bridge_.log(1, "-----smallest free = " + javaCalcID);
|
mlang@2448
|
656 |
restoreToSML(javaCalcID, v);
|
mlang@2448
|
657 |
this.bridge_.log(1, "----------------done loading-------------");
|
mlang@2448
|
658 |
return javaCalcID;
|
mlang@2448
|
659 |
}
|
wneuper@1976
|
660 |
|
mlang@2448
|
661 |
private void restoreToSML(int javaCalcID, Vector v) {
|
mlang@2448
|
662 |
Iterator it = ((Vector) v.clone()).iterator();
|
mlang@2448
|
663 |
CalcTree result = null;
|
mlang@2448
|
664 |
String s = (String) it.next();
|
mlang@2448
|
665 |
int smlCalcID = newCalculation(javaCalcID, s, true);
|
mlang@2448
|
666 |
//javaCalcIDtoSmlCalcID.put(new Integer(javaCalcID), new
|
mlang@2448
|
667 |
// Integer(smlCalcID));
|
mlang@2448
|
668 |
//int smlID = ((Integer)javaCalcIDtoSmlCalcID.get(new
|
mlang@2448
|
669 |
// Integer(calcID))).intValue();
|
mlang@2448
|
670 |
while (it.hasNext()) {
|
mlang@2448
|
671 |
s = (String) it.next();
|
mlang@2448
|
672 |
interpretSML(javaCalcID, s, true);
|
mlang@2448
|
673 |
}
|
mlang@2448
|
674 |
}
|
wneuper@1976
|
675 |
|
mlang@2448
|
676 |
/**
|
mlang@2448
|
677 |
* This method is used when the kernel crashes and the CalcTrees need to be
|
mlang@2448
|
678 |
* entered again to the kernel to restore the previous state. The
|
mlang@2448
|
679 |
* Java-CalcIDs stay the same
|
mlang@2448
|
680 |
*/
|
mlang@2448
|
681 |
public void restoreExistingCalcTrees() {
|
mlang@2448
|
682 |
bridge_.log(1, "---- entering restoreExistingCalcTrees");
|
mlang@2448
|
683 |
Iterator it = java_calcid_to_smlcalcid_.keySet().iterator();
|
mlang@2448
|
684 |
// keySet = javaCalcIDs
|
mlang@2448
|
685 |
int javaCalcID, newSmlCalcID;
|
mlang@2448
|
686 |
Vector v;
|
mlang@2448
|
687 |
while (it.hasNext()) {
|
mlang@2448
|
688 |
//bridge.log(1, "1");
|
mlang@2448
|
689 |
//int i = ((Integer)it.next()).intValue();
|
mlang@2448
|
690 |
javaCalcID = ((Integer) it.next()).intValue();
|
mlang@2448
|
691 |
//bridge.log(1, "2");
|
mlang@2448
|
692 |
v = saveCalcTree(javaCalcID);
|
mlang@2448
|
693 |
//bridge.log(1, "3");
|
mlang@2448
|
694 |
this.restoreToSML(javaCalcID, v);
|
mlang@2448
|
695 |
}
|
mlang@2448
|
696 |
bridge_.log(1, "---- done restoreExistingCalcTrees");
|
mlang@2448
|
697 |
}
|
wneuper@1976
|
698 |
|
mlang@2448
|
699 |
/**
|
mlang@2448
|
700 |
* @see isac.bridge.IBridgeRMI#getElement(int, int)
|
mlang@2448
|
701 |
* @deprecated in favour of getFormula, getTactic, getAssumption
|
mlang@2448
|
702 |
*/
|
mlang@2448
|
703 |
public ICalcElement getElement(int javaCalcID, Position p) {
|
mlang@2448
|
704 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
mlang@2448
|
705 |
"refFormula @calcid@ " + p.toSMLString() + ";", false);
|
wneuper@2523
|
706 |
if (wrapper == null)
|
wneuper@2523
|
707 |
return null;
|
wneuper@1976
|
708 |
|
mlang@2448
|
709 |
ICalcElement ce = (ICalcElement) wrapper.getResponse();
|
mlang@2448
|
710 |
if (ce instanceof CalcFormula) {
|
mlang@2448
|
711 |
// ((CalcFormula) ce).setPosition(wrapper.getPosition());
|
mlang@2448
|
712 |
} else if (ce instanceof CalcHead) {
|
mlang@2448
|
713 |
// ((CalcHead) ce).setPosition(wrapper.getPosition());
|
mlang@2448
|
714 |
((CalcHead) ce).setCalcTreeID(javaCalcID);
|
mlang@2448
|
715 |
}
|
mlang@2448
|
716 |
return ce;
|
mlang@2448
|
717 |
}
|
wneuper@1976
|
718 |
|
mlang@2448
|
719 |
/**
|
mlang@2448
|
720 |
* @see isac.bridge.IBridgeRMI#getFormula(int, int)
|
mlang@2448
|
721 |
*/
|
mlang@2448
|
722 |
public ICalcElement getFormula(int calcTreeID, Position p)
|
mlang@2448
|
723 |
throws RemoteException {
|
mlang@2448
|
724 |
ResponseWrapper wrapper = interpretSML(calcTreeID,
|
mlang@2448
|
725 |
"refFormula @calcid@ " + p.toSMLString() + ";", false);
|
wneuper@2523
|
726 |
if (wrapper == null)
|
wneuper@2523
|
727 |
return null;
|
wneuper@1976
|
728 |
|
mlang@2448
|
729 |
ICalcElement ce = (ICalcElement) wrapper.getResponse();
|
mlang@2448
|
730 |
if (ce instanceof CalcFormula) {
|
mlang@2448
|
731 |
// ((CalcFormula) ce).setPosition(wrapper.getPosition());
|
mlang@2448
|
732 |
} else if (ce instanceof CalcHead) {
|
mlang@2448
|
733 |
// ((CalcHead) ce).setPosition(wrapper.getPosition());
|
mlang@2448
|
734 |
((CalcHead) ce).setCalcTreeID(calcTreeID);
|
mlang@2448
|
735 |
}
|
mlang@2448
|
736 |
return ce;
|
mlang@2448
|
737 |
}
|
wneuper@1976
|
738 |
|
mlang@2448
|
739 |
/*
|
mlang@2448
|
740 |
* (non-Javadoc)
|
mlang@2448
|
741 |
*
|
mlang@2448
|
742 |
* @see isac.bridge.IBridgeRMI#getTactic(int, int)
|
mlang@2448
|
743 |
*/
|
mlang@2448
|
744 |
public Tactic getTactic(int calcTreeID, Position pos)
|
mlang@2448
|
745 |
throws RemoteException {
|
mlang@2448
|
746 |
ResponseWrapper wrapper = interpretSML(calcTreeID,
|
mlang@2448
|
747 |
"getTactic @calcid@ " + pos.toSMLString() + ";", false);
|
mlang@2448
|
748 |
return (Tactic) wrapper.getResponse();
|
mlang@2448
|
749 |
}
|
wneuper@1976
|
750 |
|
mlang@2448
|
751 |
// WN050217 public Tactic[] fetchAppliableTactics(int id, int scope) {
|
mlang@2448
|
752 |
public Vector getAppliableTactics(int id, int scope, Position pos) {
|
mlang@2448
|
753 |
ResponseWrapper wrapper = interpretSML(id,
|
mlang@2448
|
754 |
"fetchApplicableTactics @calcid@ " + scope + pos.toSMLString()
|
mlang@2448
|
755 |
+ ";", false);
|
wneuper@2523
|
756 |
if (wrapper == null)
|
wneuper@2523
|
757 |
return null;
|
mlang@2448
|
758 |
TacticsContainer tc = (TacticsContainer) wrapper.getResponse();
|
mlang@2448
|
759 |
Vector v = tc.getTactics();
|
mlang@2448
|
760 |
// Object[] result = new Tactic[v.size()];
|
mlang@2448
|
761 |
// return (Tactic[]) v.toArray(result);
|
mlang@2448
|
762 |
return v;
|
mlang@2448
|
763 |
}
|
wneuper@2104
|
764 |
|
mlang@2448
|
765 |
/**
|
mlang@2448
|
766 |
* @see isac.bridge.IBridgeRMI#getAssumption(int, int)
|
mlang@2448
|
767 |
*/
|
mlang@2448
|
768 |
public Assumptions getAssumptions(int calcTreeID, Position pos)
|
mlang@2448
|
769 |
throws RemoteException {
|
mlang@2448
|
770 |
ResponseWrapper wrapper = interpretSML(calcTreeID,
|
mlang@2448
|
771 |
"getAssumptions @calcid@ " + pos.toSMLString() + ";", false);
|
mlang@2448
|
772 |
return (Assumptions) wrapper.getResponse();
|
mlang@2448
|
773 |
}
|
wneuper@2104
|
774 |
|
mlang@2448
|
775 |
/**
|
mlang@2448
|
776 |
* @see isac.bridge.IBridgeRMI#getAccumulatedAssumptions(int,
|
mlang@2448
|
777 |
* isac.util.formulae.Position)
|
mlang@2448
|
778 |
*/
|
mlang@2448
|
779 |
public Assumptions getAccumulatedAssumptions(int calcTreeID, Position pos)
|
mlang@2448
|
780 |
throws RemoteException {
|
mlang@2448
|
781 |
ResponseWrapper wrapper = interpretSML(calcTreeID,
|
mlang@2448
|
782 |
"getAccumulatedAsms @calcid@ " + pos.toSMLString() + ";", false);
|
mlang@2448
|
783 |
return (Assumptions) wrapper.getResponse();
|
mlang@2448
|
784 |
}
|
wneuper@2523
|
785 |
|
wneuper@2523
|
786 |
/**
|
wneuper@2523
|
787 |
* @see isac.util.interfaces.ICalcIterator#tryMatchProblem(KEStoreID)
|
wneuper@2523
|
788 |
*/
|
wneuper@2524
|
789 |
public Match tryMatchProblem(int javaCalcID, ProblemID problemID) {
|
wneuper@2523
|
790 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
wneuper@2523
|
791 |
"tryMatchProblem @calcid@ " + problemID.toSMLString() + ";",
|
wneuper@2523
|
792 |
false);
|
wneuper@2523
|
793 |
Object response = wrapper.getResponse();
|
wneuper@2523
|
794 |
CalcHead ch = (CalcHead) response;
|
wneuper@2523
|
795 |
//ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
|
wneuper@2523
|
796 |
Match m = new Match(ch.getSpecification().getProblem(), ch
|
wneuper@2523
|
797 |
.getStatusString(), ch.getHeadLine(), ch.getModel());
|
wneuper@2523
|
798 |
return m;
|
wneuper@2523
|
799 |
}
|
wneuper@2523
|
800 |
|
wneuper@2523
|
801 |
/**
|
wneuper@2523
|
802 |
* @see isac.util.interfaces.ICalcIterator#tryRefineProblem(KEStoreID)
|
wneuper@2523
|
803 |
*/
|
wneuper@2524
|
804 |
public Match tryRefineProblem(int javaCalcID, ProblemID problemID) {
|
wneuper@2523
|
805 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
wneuper@2523
|
806 |
"tryRefineProblem @calcid@ " + problemID.toSMLString() + ";",
|
wneuper@2523
|
807 |
false);
|
wneuper@2523
|
808 |
Object response = wrapper.getResponse();
|
wneuper@2523
|
809 |
CalcHead ch = (CalcHead) response;
|
wneuper@2523
|
810 |
//ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
|
wneuper@2523
|
811 |
Match m = new Match(ch.getSpecification().getProblem(), ch
|
wneuper@2523
|
812 |
.getStatusString(), ch.getHeadLine(), ch.getModel());
|
wneuper@2523
|
813 |
return m;
|
wneuper@2523
|
814 |
}
|
wneuper@2523
|
815 |
|
wneuper@2523
|
816 |
/**
|
wneuper@2523
|
817 |
* @see isac.util.interfaces.ICalcIterator#tryMatchMethod(KEStoreID)
|
wneuper@2524
|
818 |
* @deprecated is not impl. in math-engine !!!
|
wneuper@2523
|
819 |
*/
|
wneuper@2523
|
820 |
public Match tryMatchMethod(int javaCalcID, KEStoreID keStoreID)
|
wneuper@2523
|
821 |
throws RemoteException {
|
wneuper@2523
|
822 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
wneuper@2523
|
823 |
"tryMatchMethod @calcid@ " + keStoreID.toSMLString() + ";",
|
wneuper@2523
|
824 |
false);
|
wneuper@2523
|
825 |
Object response = wrapper.getResponse();
|
wneuper@2523
|
826 |
CalcHead ch = (CalcHead) response;
|
wneuper@2523
|
827 |
//ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
|
wneuper@2523
|
828 |
Match m = new Match(ch.getSpecification().getProblem(), ch
|
wneuper@2523
|
829 |
.getStatusString(), ch.getHeadLine(), ch.getModel());
|
wneuper@2523
|
830 |
return m;
|
wneuper@2523
|
831 |
}
|
wneuper@2523
|
832 |
|
wneuper@2523
|
833 |
/**
|
wneuper@2523
|
834 |
* @see isac.util.interfaces.ICalcIterator#tryRefineMethod(KEStoreID)
|
wneuper@2524
|
835 |
* @deprecated is not impl. in math-engine !!!
|
wneuper@2523
|
836 |
*/
|
wneuper@2523
|
837 |
public Match tryRefineMethod(int javaCalcID, KEStoreID keStoreID)
|
wneuper@2524
|
838 |
throws RemoteException {
|
wneuper@2523
|
839 |
ResponseWrapper wrapper = interpretSML(javaCalcID,
|
wneuper@2523
|
840 |
"tryRefineMethod @calcid@ " + keStoreID.toSMLString() + ";",
|
wneuper@2523
|
841 |
false);
|
wneuper@2523
|
842 |
Object response = wrapper.getResponse();
|
wneuper@2523
|
843 |
CalcHead ch = (CalcHead) response;
|
wneuper@2523
|
844 |
//ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
|
wneuper@2523
|
845 |
Match m = new Match(ch.getSpecification().getProblem(), ch
|
wneuper@2523
|
846 |
.getStatusString(), ch.getHeadLine(), ch.getModel());
|
wneuper@2523
|
847 |
return m;
|
wneuper@2523
|
848 |
}
|
wneuper@2523
|
849 |
|
wneuper@1976
|
850 |
} |