1 package isac.wsdialog; |
1 package isac.wsdialog; |
2 |
2 |
3 import isac.bridge.CalcTree; |
3 import isac.bridge.*; |
|
4 import isac.session.SDialog; |
4 import isac.util.*; |
5 import isac.util.*; |
5 import isac.util.ModSpec; |
6 import isac.util.formulae.*; |
6 import isac.util.Tactic; |
7 import isac.util.interfaces.*; |
|
8 import isac.util.tactics.*; |
|
9 import isac.util.users.IUserSettings; |
|
10 import isac.util.users.User; |
|
11 import isac.util.users.UserSettings; |
7 |
12 |
8 import java.io.Serializable; |
13 import java.io.Serializable; |
9 import java.net.MalformedURLException; |
14 import java.net.MalformedURLException; |
10 import java.rmi.*; |
15 import java.rmi.*; |
11 import java.rmi.registry.LocateRegistry; |
16 import java.rmi.registry.LocateRegistry; |
12 import java.rmi.server.UnicastRemoteObject; |
17 import java.rmi.server.UnicastRemoteObject; |
13 import java.util.StringTokenizer; |
18 import java.util.Vector; |
|
19 |
|
20 import org.apache.log4j.Logger; |
14 |
21 |
15 /** |
22 /** |
|
23 * The DialogGuide moderates the communication between two instances working on |
|
24 * the same CalcTree object. One of these instances is the user, the other a |
|
25 * math engine. Most probably, the user's GUI, the DialogGuide and the math |
|
26 * engine reside on different machines and communicate with each other by means |
|
27 * of RMI. |
|
28 * |
16 * @author Alan Krempler |
29 * @author Alan Krempler |
17 */ |
30 */ |
18 |
31 public class DialogGuide extends UnicastRemoteObject implements DGuide, |
19 |
32 IToUser, Serializable { |
20 public class DialogGuide extends UnicastRemoteObject |
33 |
21 implements DGuide, IToUser, IToCalc, Serializable { |
34 static Logger logger_ = Logger.getLogger(BridgeRMI.class.getName()); |
22 /** |
35 |
23 * @throws RemoteException |
36 protected MathEngine math_engine_; |
24 */ |
37 |
25 protected DialogGuide() throws RemoteException { |
38 //the calc_tree_ is also known by the DialogIterators -- remove AK?LK? |
26 super(); |
39 //WN0505 only needed by getElementsFromTo !! move method to Iterator? |
27 this.rmiBind(); |
40 protected CalcTree calc_tree_; |
28 } |
41 |
29 |
42 //protected CalcHead calc_head_; |
30 protected CalcTree calcTree; |
43 |
31 |
44 //protected CalcHead calc_head_sub_; |
32 public void attach(CalcTree calc_tree) { |
45 |
33 |
46 protected int phase_; |
34 } |
47 |
35 |
48 private Vector datachange_listeners_; |
36 public void reDisplay() { |
49 |
37 } |
50 private IToWorksheet ui_control_listener_; |
38 |
51 |
39 public void newCalculation(ModSpec mod_spec) { |
52 //protected String session_id_;WN0503 |
40 calcTree = new CalcTree(mod_spec, "radish.ist.intra", 5555); |
53 |
41 } |
54 protected UserSettings user_settings_;//hold whole hashmap locally |
42 |
55 |
43 /* (non-Javadoc) |
56 /** |
44 * @see isac.wsdialog.IToUser#calcChanged(isac.wsdialog.CalcChangedEvent) |
57 * @param ME_path |
45 */ |
58 * URL of the math engine to be used |
46 public void calcChanged(CalcChangedEvent event) { |
59 * @param user_path |
47 // TODO Auto-generated method stub |
60 * path(without URL) to UserSettings, UserModel |
48 |
61 * @param session_dialog |
49 } |
62 * @param session_id |
50 |
63 * which create the DialogGuide and Worksheet |
51 /* (non-Javadoc) |
64 * @throws RemoteException |
52 * @see isac.wsdialog.IToCalc#iterator() |
65 */ |
53 */ |
66 public DialogGuide(String ME_path, String user_path, |
54 public ICalcIterator iterator() { |
67 SDialog session_dialog, String session_id) throws RemoteException { |
55 return calcTree.iterator(); |
68 super(); |
56 } |
69 this.rmiBind(); |
57 |
70 datachange_listeners_ = new Vector(); |
58 /* (non-Javadoc) |
71 MathEngine.init(ME_path); |
59 * @see isac.wsdialog.IToCalc#addListener(isac.wsdialog.IToUser) |
72 math_engine_ = MathEngine.getMathEngine(); |
60 */ |
73 phase_ = DIALOGPHASE_IDLE; |
61 public boolean addListener(IToUser listener) { |
74 |
62 // TODO Auto-generated method stub |
75 User user = null; |
63 return false; |
76 try { |
64 } |
77 user = session_dialog.getUser(session_id); |
65 |
78 } catch (RemoteException e1) { |
66 public Tactic fetchProposedTactic() { |
79 e1.printStackTrace(); |
67 //TODO: ask Walther for improvements. Stupid thing this. |
80 } |
68 Tactic t = calcTree.fetchProposedTactic(); |
81 user_settings_ = new UserSettings(user_path, user.getUsername()); |
69 StringTokenizer tokenizer = new StringTokenizer(t.getName(), "_"); |
82 } |
70 StringBuffer tacticStringCap = new StringBuffer(); |
83 |
71 int tokens = tokenizer.countTokens(); |
84 /** |
72 for (int i = 0; i < tokens; i++) { |
85 * start a calculation |
73 String s = tokenizer.nextToken().toLowerCase(); |
86 */ |
74 char c = Character.toUpperCase(s.charAt(0)); |
87 public CalcTree startCalculation(int user_id, Formalization f, |
75 tacticStringCap.append(c).append(s.substring(1)); |
88 int start_from/* WN050421 , int requested_calchead_view */) { |
76 if (i != tokens - 1) |
89 |
77 tacticStringCap.append("_"); |
90 phase_ = DIALOGPHASE_SOLVE; |
78 } |
91 calc_tree_ = math_engine_.startCalculation(f); |
79 //System.out.println(tacticStringCap.toString()); |
92 calc_tree_.addDataChangeListener(this); |
80 t.setName(tacticStringCap.toString()); |
93 return calc_tree_; |
81 return t; |
94 } |
82 } |
95 |
83 |
96 /** |
84 public void setNextTactic(Tactic tactic) { |
97 * at the beginning of a calculation as well as of a subproblem; |
85 calcTree.setNextTactic(tactic); |
98 * |
86 } |
99 * @return CalcHead eg. for providing CalcHead#VIEWSTYLE_* |
87 |
100 * |
88 private void rmiBind(){ |
101 * @see isac.wsdialog.DGuide#startSpecifying() |
89 if(System.getSecurityManager() == null) { |
102 */ |
90 System.setSecurityManager(new RMISecurityManager()); |
103 public CalcHead startSpecifying() { |
91 } |
104 ICalcIterator it = null; |
92 |
105 CalcHead calc_head = null; |
93 try{ |
106 int calchead_view; |
94 LocateRegistry.createRegistry(1099); |
107 try { |
95 }catch(java.rmi.RemoteException exc2){ |
108 it = calc_tree_.iterator(); |
96 System.err.println("can not create registry: " + exc2.getMessage()); |
109 // WN0504DI it = this.iterator();//WN050421 NEW... |
97 } |
110 it.moveRoot(); |
98 |
111 //WN0504DI ...error DialogGuide_Stub.startSpecifying(Unknown |
99 String name = "//localhost/isac-DialogGuide"; |
112 //WN0504DI Source) with ...NEW |
100 try { |
113 calc_head = (CalcHead) it.getFormula(); |
101 System.out.println("try to bind as " + name); |
114 } catch (RemoteException e) { |
102 Naming.rebind(name, this); |
115 e.printStackTrace(); |
103 System.out.println("Object Manager bound to " + name); |
116 } |
104 } catch (java.rmi.ConnectException e) { |
117 |
105 System.err.println("failed to contact as " + name + |
118 //AK set viewstyle according to user settings |
106 " (creating RMI-Server on localhost: 1099)"); |
119 switch (user_settings_.getValue(IUserSettings.KEY1_START_SPECIFY)) { |
107 } catch (RemoteException e) { |
120 //________________________________________________________ |
108 // TODO Auto-generated catch block |
121 case IUserSettings.VAL1_SKIP_SPECIFY_TO_START_SOLVE: |
109 e.printStackTrace(); |
122 calc_tree_.completeCalcHead(); |
110 } catch (MalformedURLException e) { |
123 calchead_view = CalcHead.VIEWSTYLE_SINGLELINE; |
111 // TODO Auto-generated catch block |
124 phase_ = DIALOGPHASE_SOLVE; |
112 e.printStackTrace(); |
125 break; |
113 } |
126 //________________________________________________________ |
114 } |
127 case IUserSettings.VAL1_POP_CALCHEAD_WITH_DESCRIPTIONS: |
115 |
128 calc_tree_.autoCalculate(IToCalc.SCOPE_CALCULATION, 1); |
116 public static void main(String[] args) { |
129 //...applies the Tactic Model_Problem which generates descriptions |
117 try { |
130 calchead_view = CalcHead.VIEWSTYLE_FULL; |
118 new DialogGuide(); |
131 phase_ = DIALOGPHASE_SPECIFY; |
119 } catch (RemoteException e) { |
132 break; |
120 // TODO Auto-generated catch block |
133 //________________________________________________________ |
121 e.printStackTrace(); |
134 default: |
122 } |
135 //=case IUserSettings.VAL1_SKIP_SPECIFY_TO_START_SOLVE: |
123 } |
136 calc_tree_.completeCalcHead(); |
|
137 calchead_view = CalcHead.VIEWSTYLE_SINGLELINE; |
|
138 phase_ = DIALOGPHASE_SOLVE; |
|
139 break; |
|
140 } |
|
141 calc_head.setViewStyle(calchead_view); |
|
142 return calc_head; |
|
143 } |
|
144 |
|
145 // /** |
|
146 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
147 // */ |
|
148 // public void modifyCalcHead(CalcHead calc_head) { |
|
149 // // MathEngine.getMathEngine().modifyCalcHead(calc_head); |
|
150 // calc_tree_.modifyCalcHead(calc_head); |
|
151 // } |
|
152 |
|
153 /** |
|
154 * dismiss the CalcHeadPanel and start DGuide#DIALOGPHASE_SOLVE |
|
155 * |
|
156 * @see isac.util.interfaces.IToCalc#startSolving() |
|
157 */ |
|
158 public void startSolving() throws Exception { |
|
159 calc_tree_.startSolving(); |
|
160 |
|
161 } |
|
162 |
|
163 /** |
|
164 * accept the changes in a calculation reported by the bridge .............. |
|
165 * TODO handle these changes according to UserSettings and UserModel |
|
166 * |
|
167 * ... and pass them to the Worksheet |
|
168 * |
|
169 * @see isac.wsdialog.IToUser#calcChanged(isac.wsdialog.CalcChangedEvent) |
|
170 */ |
|
171 public void calcChanged(CalcChangedEvent event) throws RemoteException { |
|
172 logger_.fatal(" WS<-. . : calcChanged (unc=" |
|
173 + event.getLastUnchangedFormula().toSMLString() + ", del=" |
|
174 + event.getLastDeletedFormula().toSMLString() + ", gen=" |
|
175 + event.getLastGeneratedFormula().toSMLString()); |
|
176 try { |
|
177 for (int i = 0; i < datachange_listeners_.size(); i++) { |
|
178 ((IToUser) datachange_listeners_.elementAt(i)) |
|
179 .calcChanged(event);//WN050513GOON |
|
180 // .calcChanged(event.createDialogIterators(this)); |
|
181 } |
|
182 } catch (Exception e) { |
|
183 e.printStackTrace(); |
|
184 } |
|
185 } |
|
186 |
|
187 /** |
|
188 * @see isac.wsdialog.DGuide#iterator(CalcIterator, DGuide) |
|
189 * @see isac.util.interfaces.IToCalc#iterator() |
|
190 */ |
|
191 public ICalcIterator iterator(CalcIterator it, DGuide dg) { |
|
192 //WN050512...was before: |
|
193 //public ICalcIterator iterator() { |
|
194 // try { |
|
195 // return new DialogIterator((CalcIterator) calc_tree_.iterator(), |
|
196 // this); |
|
197 // } catch (Exception e) { |
|
198 // e.printStackTrace(); |
|
199 // } |
|
200 // return null; |
|
201 try { |
|
202 return new DialogIterator(it, dg); |
|
203 } catch (RemoteException e) { |
|
204 e.printStackTrace(); |
|
205 } |
|
206 return null; |
|
207 } |
|
208 |
|
209 /** |
|
210 * @see isac.wsdialog.IToCalc#addListener(isac.wsdialog.IToUser) |
|
211 */ |
|
212 public boolean addDataChangeListener(IToUser listener) |
|
213 throws RemoteException { |
|
214 if (datachange_listeners_.contains(listener)) { |
|
215 return false; |
|
216 } else { |
|
217 datachange_listeners_.add(listener); |
|
218 } |
|
219 return true; |
|
220 } |
|
221 |
|
222 public boolean registerUIControlListener(IToWorksheet listener) |
|
223 throws RemoteException { |
|
224 //WN0504 ??? |
|
225 // if (ui_control_listener_ != null) { |
|
226 // ui_control_listener_.doUIAction(new UserAction(UI_DO_DETACH)); |
|
227 // } |
|
228 ui_control_listener_ = listener; |
|
229 return true; |
|
230 } |
|
231 |
|
232 // /** |
|
233 // * @see isac.wsdialog.IToCalc#fetchProposedTactic |
|
234 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
235 // */ |
|
236 // public Tactic fetchProposedTactic() { |
|
237 // return calc_tree_.fetchProposedTactic(); |
|
238 // } |
|
239 // |
|
240 // |
|
241 // /** |
|
242 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
243 // */ |
|
244 // public int setNextTactic(Tactic tactic) { |
|
245 // return calc_tree_.setNextTactic(tactic); |
|
246 // } |
|
247 // |
|
248 // /** |
|
249 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
250 // */ |
|
251 // public int autoCalculate(int scope, int nSteps) { |
|
252 // return calc_tree_.autoCalculate(scope, nSteps); |
|
253 // } |
|
254 // |
|
255 // /** |
|
256 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
257 // */ |
|
258 // public void tryMatch(CalcHead ch, CalcHeadCompoundID problemID) |
|
259 // throws NotInSpecificationPhaseException { |
|
260 // |
|
261 // // MathEngine.getMathEngine().tryMatch(ch, problemID); |
|
262 // math_engine_.tryMatch(ch, problemID); |
|
263 // } |
|
264 // |
|
265 // /** |
|
266 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
267 // */ |
|
268 // public void tryRefine(CalcHead ch, CalcHeadCompoundID problemID) |
|
269 // throws NotInSpecificationPhaseException { |
|
270 // |
|
271 // // MathEngine.getMathEngine().tryRefine(ch , problemID); |
|
272 // math_engine_.tryRefine(ch, problemID); |
|
273 // } |
|
274 // |
|
275 // /** |
|
276 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
277 // */ |
|
278 // public ICalcIterator getActiveFormula() { |
|
279 // return calc_tree_.getActiveFormula(); |
|
280 // } |
|
281 // |
|
282 // /** |
|
283 // * @throws RemoteException |
|
284 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
285 // */ |
|
286 // public int replaceFormula(CalcFormula newFormula) throws RemoteException |
|
287 // { |
|
288 // return calc_tree_.replaceFormula(newFormula); |
|
289 // } |
|
290 // |
|
291 // /** |
|
292 // * @throws RemoteException |
|
293 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
294 // */ |
|
295 // public int appendFormula(CalcFormula newFormula) throws RemoteException { |
|
296 // return calc_tree_.appendFormula(newFormula); |
|
297 // } |
|
298 // |
|
299 // /** |
|
300 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
301 // */ |
|
302 // public void moveActiveFormula(ICalcIterator newActiveFormula) { |
|
303 // calc_tree_.moveActiveFormula(newActiveFormula); |
|
304 // } |
|
305 // |
|
306 /** |
|
307 * Notify the Dialog Guide about interaction from the User |
|
308 * |
|
309 * @param action |
|
310 * @return true, if the action has been processed, false if the processing |
|
311 * the action has been denied |
|
312 * @throws RemoteException |
|
313 * |
|
314 */ |
|
315 public boolean notifyUserAction(IUserAction action) |
|
316 throws DialogProtocolException, RemoteException { |
|
317 int request = action.getActionID(); |
|
318 logger_.fatal(" WS->DG: notifyUserAction request= " + request); |
|
319 |
|
320 // two userActions dont care about the dialogphase |
|
321 //WN050420 would be nicer, if DialogGuide would set the Buttons |
|
322 switch (request) { |
|
323 case (UI_CALCULATE_1): |
|
324 if (phase_ == DIALOGPHASE_SPECIFY) |
|
325 request = UI_SPECIFY_TO_SOLVE;//WN##################### |
|
326 else |
|
327 request = UI_SOLVE_CALCULATE_1; |
|
328 break; |
|
329 case (UI_CALCULATE_ALL): |
|
330 if (phase_ == DIALOGPHASE_SPECIFY) |
|
331 request = UI_SPECIFY_CALCULATE_ALL; |
|
332 else |
|
333 request = UI_SOLVE_CALCULATE_ALL; |
|
334 } |
|
335 // all other userActions belong to a certain dialogphase |
|
336 |
|
337 switch (phase_) { |
|
338 case DIALOGPHASE_IDLE: |
|
339 throw new DialogProtocolException(request, phase_); |
|
340 case DIALOGPHASE_SPECIFY: |
|
341 if (request < UI_DUMMY_FIRST_SPECIFY |
|
342 || request > UI_DUMMY_LAST_SPECIFY) |
|
343 throw new DialogProtocolException(request, phase_); |
|
344 break; |
|
345 case DIALOGPHASE_SOLVE: |
|
346 if (request < UI_DUMMY_FIRST_SOLVE || request > UI_DUMMY_LAST_SOLVE) |
|
347 throw new DialogProtocolException(request, phase_); |
|
348 break; |
|
349 } |
|
350 |
|
351 //*********** handle IUserAction's ********************** |
|
352 CalcHead calc_head = new CalcHead();//WN0502023????????? |
|
353 try { |
|
354 calc_head = (CalcHead) calc_tree_.iterator().getFormula(); |
|
355 } catch (Exception e) { |
|
356 e.printStackTrace(); |
|
357 } |
|
358 switch (request) { |
|
359 case UI_SPECIFY_TRY_MATCH: |
|
360 throw new DialogNotImplementedException(request, phase_); |
|
361 // try { |
|
362 // tryMatch(calc_head, ((UserActionOnCalcHeadCompoundID) action) |
|
363 // .getObjectID()); |
|
364 // } catch (NotInSpecificationPhaseException e) { |
|
365 // throw new DialogMathException(request, phase_, e); |
|
366 // } |
|
367 // break; |
|
368 |
|
369 case UI_SPECIFY_TRY_REFINE: |
|
370 throw new DialogNotImplementedException(request, phase_); |
|
371 // try { |
|
372 // tryRefine(calc_head, ((UserActionOnCalcHeadCompoundID) action) |
|
373 // .getObjectID()); |
|
374 // } catch (NotInSpecificationPhaseException e) { |
|
375 // throw new DialogMathException(request, phase_, e); |
|
376 // } |
|
377 // break; |
|
378 |
|
379 case UI_SPECIFY_CHANGE_VIEW: |
|
380 calc_head.setViewStyle(((UserActionOnInt) action).getInt()); |
|
381 break; |
|
382 |
|
383 case UI_SPECIFY_COMPLETE_CALCHEAD: |
|
384 calc_tree_.completeCalcHead(); |
|
385 // old-style filling the fields of the calc-head by setting |
|
386 // the HELP_ME flag |
|
387 // calc_head_.setCalcHeadStatus(CalcHead.MODEL_ITEM_HELP_ME); |
|
388 // modifyCalcHead(calc_head_); |
|
389 break; |
|
390 case UI_SPECIFY_COMPLETE_METHOD: |
|
391 case UI_SPECIFY_COMPLETE_THEORY: |
|
392 case UI_SPECIFY_COMPLETE_PROBLEM: |
|
393 case UI_SPECIFY_COMPLETE_GIVEN: |
|
394 case UI_SPECIFY_COMPLETE_FIND: |
|
395 case UI_SPECIFY_COMPLETE_RELATE: |
|
396 throw new DialogNotImplementedException(request, phase_); |
|
397 |
|
398 case UI_SPECIFY_CHECK_CALCHEAD: |
|
399 calc_tree_.modifyCalcHead(calc_head); |
|
400 break; |
|
401 |
|
402 // was: startCalculation() WN050428 ? really ? |
|
403 case UI_SPECIFY_TO_SOLVE: |
|
404 case UI_SPECIFY_CALCULATE_ALL: |
|
405 //if (user_settings_.getValue("")) |
|
406 if (true) |
|
407 calc_tree_.completeCalcHead(); |
|
408 else |
|
409 calc_tree_.modifyCalcHead(calc_head); |
|
410 |
|
411 if (calc_head.getCalcHeadStatus() != CalcHead.MODEL_ITEM_CORRECT) |
|
412 return false; |
|
413 |
|
414 try { |
|
415 calc_tree_.startSolving(); |
|
416 } catch (Exception e) { |
|
417 // TODO Auto-generated catch block |
|
418 e.printStackTrace(); |
|
419 } |
|
420 // calc_tree_ = MathEngine.getMathEngine().startSolving(calcHead); |
|
421 // FIXME: AK020224: do not register with the calc_tree_ if finished |
|
422 // specifying a SUBPROBLEM |
|
423 //calc_tree_.addDataChangeListener(this);//WN050420-->startCalculation |
|
424 |
|
425 phase_ = DIALOGPHASE_SOLVE;//FIXXXME.WN050428 |
|
426 // fall through to calculate |
|
427 |
|
428 case UI_SOLVE_CALCULATE_1: |
|
429 //WN050420 why not at (*) here ? |
|
430 case UI_SOLVE_CALCULATE_ALL: |
|
431 switch (request) { |
|
432 case UI_SPECIFY_CALCULATE_ALL: |
|
433 case UI_SOLVE_CALCULATE_ALL: |
|
434 calc_tree_.autoCalculate(IToCalc.SCOPE_CALCULATION, 0); |
|
435 break; |
|
436 case UI_SPECIFY_TO_SOLVE://WN050420 ??? |
|
437 // break; |
|
438 default: |
|
439 calc_tree_.autoCalculate(IToCalc.SCOPE_CALCULATION, 1); |
|
440 //why not at (*) above ? |
|
441 break; |
|
442 } |
|
443 break; |
|
444 |
|
445 case UI_SOLVE_CALCULATE_SUBPROBLEM: |
|
446 calc_tree_.autoCalculate(IToCalc.SCOPE_SUBPROBLEM, 0); |
|
447 break; |
|
448 |
|
449 case UI_SOLVE_EDIT_ACTIVE_FORMULA: |
|
450 ui_control_listener_.doUIAction(new UserAction(UI_DO_EDIT_FORMULA)); |
|
451 break; |
|
452 |
|
453 case UI_SOLVE_EDIT_ACTIVE_FORMULA_COMPLETE: |
|
454 CalcFormula formula = (CalcFormula) ((UserActionOnCalcElement) action) |
|
455 .getCalcElement(); |
|
456 // if the position is null, the formula did not exist, so we try to |
|
457 // append a new formula |
|
458 if (formula.getPosition() == null) { |
|
459 calc_tree_.appendFormula(formula); |
|
460 } else { |
|
461 calc_tree_.replaceFormula(formula); |
|
462 } |
|
463 break; |
|
464 |
|
465 case UI_SOLVE_APPEND_USER_FORMULA: |
|
466 // appendFormula((Formula) ((UserActionOnCalcElement) |
|
467 // action).getCalcElement()); |
|
468 ui_control_listener_ |
|
469 .doUIAction(new UserAction(UI_DO_APPEND_FORMULA)); |
|
470 break; |
|
471 |
|
472 case UI_SOLVE_MOVE_ACTIVE_FORMULA: |
|
473 calc_tree_.moveActiveFormula(((UserActionOnIterator) action) |
|
474 .getPosition()); |
|
475 break; |
|
476 |
|
477 case UI_SOLVE_GET_PROPOSED_TACTIC: |
|
478 throw new DialogNotImplementedException(request, phase_); |
|
479 |
|
480 case UI_SOLVE_GET_APPLICABLE_TACTICS: |
|
481 throw new DialogNotImplementedException(request, phase_); |
|
482 |
|
483 case UI_SOLVE_SET_NEXT_TACTIC: |
|
484 calc_tree_ |
|
485 .setNextTactic((Tactic) ((UserActionOnCalcElement) action) |
|
486 .getCalcElement()); |
|
487 //WN041126 extracted from isac.bridge.CalcTree#setNextTactic @@@ |
|
488 //autoCalculate(SCOPE_CALCULATION, 1); |
|
489 break; |
|
490 |
|
491 case UI_SOLVE_HELP_ENTERING_FORMULA: |
|
492 throw new DialogNotImplementedException(request, phase_); |
|
493 |
|
494 case UI_SOLVE_SHOW_ASSUMPTIONS: |
|
495 throw new DialogNotImplementedException(request, phase_); |
|
496 |
|
497 case UI_SOLVE_SHOW_DETAILS: |
|
498 throw new DialogNotImplementedException(request, phase_); |
|
499 |
|
500 default: |
|
501 throw new DialogUnknownActionException(request, phase_); |
|
502 } |
|
503 return true; |
|
504 } |
|
505 |
|
506 private void rmiBind() { |
|
507 if (System.getSecurityManager() == null) { |
|
508 System.setSecurityManager(new RMISecurityManager()); |
|
509 } |
|
510 |
|
511 try { |
|
512 LocateRegistry.createRegistry(1099); |
|
513 } catch (java.rmi.RemoteException exc2) { |
|
514 System.err.println("can not create registry: " + exc2.getMessage()); |
|
515 } |
|
516 |
|
517 String name = "//localhost/isac-DialogGuide"; |
|
518 try { |
|
519 System.out.println("try to bind as " + name); |
|
520 Naming.rebind(name, this); |
|
521 System.out.println("Dialog Guide bound to " + name); |
|
522 //WN040906 was Object Manager ... |
|
523 } catch (java.rmi.ConnectException e) { |
|
524 System.err.println("failed to contact as " + name |
|
525 + " (creating RMI-Server on localhost: 1099)"); |
|
526 } catch (RemoteException e) { |
|
527 // TODO Auto-generated catch block |
|
528 e.printStackTrace(); |
|
529 } catch (MalformedURLException e) { |
|
530 // TODO Auto-generated catch block |
|
531 e.printStackTrace(); |
|
532 } |
|
533 } |
|
534 |
|
535 // public static void main(String[] args) { |
|
536 // try { |
|
537 // new DialogGuide(args[0]); |
|
538 // |
|
539 // } catch (RemoteException e) { |
|
540 // e.printStackTrace(); |
|
541 // } |
|
542 // } |
|
543 |
|
544 // /** |
|
545 // * @see |
|
546 // isac.util.interfaces.IToCalc#completeCalcHead(isac.util.formulae.CalcHead) |
|
547 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
548 // */ |
|
549 // public void completeCalcHead(CalcHead calcHead) { |
|
550 // // TODO Auto-generated method stub |
|
551 // |
|
552 // } |
|
553 // |
|
554 // /** |
|
555 // * @see |
|
556 // isac.util.interfaces.IToCalc#completeCalcHead(isac.util.formulae.CalcHead, |
|
557 // * int) |
|
558 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
559 // */ |
|
560 // public void completeCalcHead(CalcHead calcHead, int completeItem) { |
|
561 // // TODO Auto-generated method stub |
|
562 // |
|
563 // } |
|
564 // |
|
565 // /** |
|
566 // * (non-Javadoc) |
|
567 // * |
|
568 // * @see isac.util.interfaces.IToCalc#completeCalcHead() |
|
569 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
570 // */ |
|
571 // public void completeCalcHead() throws RemoteException { |
|
572 // // TODO Auto-generated method stub WN050223 |
|
573 // |
|
574 // } |
|
575 // |
|
576 // /** |
|
577 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
578 // * |
|
579 // * @see |
|
580 // isac.util.interfaces.IToCalc#intermediateSteps(isac.util.interfaces.ICalcIterator) |
|
581 // */ |
|
582 // public int intermediateSteps(ICalcIterator i) throws RemoteException { |
|
583 // // TODO Auto-generated method stub |
|
584 // return 0; |
|
585 // } |
|
586 // |
|
587 // /** |
|
588 // * @see |
|
589 // isac.util.interfaces.IToCalc#getElementsFromTo(isac.util.interfaces.ICalcIterator, |
|
590 // * isac.util.interfaces.ICalcIterator, java.lang.Integer, boolean) |
|
591 // * @deprecated Use {@link #notifyUserAction(IUserAction)}instead |
|
592 // */ |
|
593 // public Vector getElementsFromTo(ICalcIterator iterator_from, |
|
594 // ICalcIterator iterator_to, Integer level, |
|
595 // boolean result_includes_tactics) throws RemoteException { |
|
596 // // TODO Auto-generated method stub |
|
597 // return null; |
|
598 // } |
|
599 |
124 } |
600 } |