src/java/isac/bridge/BridgeRMI.java
author wneuper
Thu, 28 Jul 2005 17:13:07 +0200
changeset 2750 84d36097ccdb
parent 2736 cd104677377a
child 2830 b9152cfaa978
permissions -rw-r--r--
created isac.interfaces, isac.useractions
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@2750
     7
import isac.interfaces.ICalcElement;
wneuper@2750
     8
import isac.interfaces.ICalcIterator;
wneuper@2750
     9
import isac.interfaces.IToCalc;
wneuper@1976
    10
import isac.util.CalcChanged;
rgradisc@1088
    11
import isac.util.Formalization;
rgradisc@1133
    12
import isac.util.Message;
rgradisc@1134
    13
import isac.util.ResponseWrapper;
wneuper@2100
    14
import isac.util.formulae.Assumptions;
rgradisc@1311
    15
import isac.util.formulae.CalcHead;
wneuper@2511
    16
import isac.util.formulae.KEStoreID;
rgradisc@1311
    17
import isac.util.formulae.CalcHeadSimpleID;
wneuper@2051
    18
import isac.util.formulae.CalcFormula;
wneuper@2065
    19
import isac.util.formulae.FormHeadsContainer;
wneuper@2523
    20
import isac.util.formulae.Match;
wneuper@1861
    21
import isac.util.formulae.Position;
wneuper@2524
    22
import isac.util.formulae.ProblemID;
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@2736
    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
     */
wneuper@2736
   297
    public int getCalcTree(Formalization formalization) {
mlang@2448
   298
        int javaCalcID = smallestFreeCalcID();
mlang@2448
   299
        this.bridge_.log(1, "-----smallest free javaCalcID = " + javaCalcID);
mlang@2448
   300
        int smlCalcID = newCalculation(javaCalcID, "CalcTree "
mlang@2448
   301
                + formalization.toSMLString() + ";", false);
mlang@2448
   302
        //javaCalcIDtoSmlCalcID.put(new Integer(javaCalcID), new
mlang@2448
   303
        // Integer(smlCalcID));
mlang@2448
   304
        return javaCalcID;
mlang@2448
   305
    }
rgradisc@1586
   306
wneuper@2736
   307
    /**
wneuper@2736
   308
     * causes a CalcChanged event for the first line on the Worksheet
wneuper@2736
   309
     * 
wneuper@2736
   310
     * @param id
wneuper@2736
   311
     *            for the CalcTree (unused)
wneuper@2736
   312
     * @return CalcChanged with Iterators pointing at the root of the CalcTree
wneuper@2736
   313
     */
wneuper@2736
   314
    public CalcChanged startCalculate(int id) {
wneuper@2736
   315
        Position p = new Position();
wneuper@2736
   316
        p.setKind("Pbl");// toSMLString --> ([],"Pbl")
wneuper@2736
   317
        CalcChanged cc = new CalcChanged();
wneuper@2736
   318
        cc.setLastUnchanged(p);
wneuper@2736
   319
        cc.setLastDeleted(p);
wneuper@2736
   320
        cc.setLastGenerated(p);
wneuper@2736
   321
        return cc;
wneuper@2736
   322
    }
wneuper@2736
   323
mlang@2448
   324
    /*
mlang@2448
   325
     * // this function is no longer needed here, // MathEngine handels the
mlang@2448
   326
     * startSolving now public boolean startSolving(int calcID) { //TODO: check
mlang@2448
   327
     * activeCalcHead for completeness return true; }
mlang@2448
   328
     */
rgradisc@1618
   329
wneuper@2543
   330
    /**
wneuper@2543
   331
     * @deprecated
wneuper@2543
   332
     */
mlang@2448
   333
    public void completeCalcHead(int id, CalcHead calcHead, int completeItem) {
mlang@2448
   334
        ResponseWrapper wrapper = interpretSML(calcHead.getCalcTreeID(),
mlang@2448
   335
                "autoCalculate @calcid@ CompleteCalcHead;", false);
mlang@2448
   336
        CalcHead result = (CalcHead) wrapper.getResponse();
mlang@2448
   337
        result.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
mlang@2448
   338
        //return result; WN040924 miniupdate
mlang@2448
   339
    }
rgradisc@1618
   340
wneuper@2543
   341
    /**
wneuper@2543
   342
     * FIXXME.WN05 completeCalcHead MUST return CalcChanged !
wneuper@2543
   343
     */
mlang@2448
   344
    public void completeCalcHead(int id) {
mlang@2448
   345
        logger_.warn("begin completeCalcHead");
mlang@2448
   346
        ResponseWrapper wrapper = interpretSML(id, //calc_head_.getCalcTreeID(),
mlang@2448
   347
                "autoCalculate @calcid@ CompleteCalcHead;", false);
wneuper@2543
   348
        //return CalcChanged !!!
wneuper@2543
   349
        //        if (wrapper == null)
wneuper@2543
   350
        //            return null;
wneuper@2543
   351
        //        else if (wrapper.getResponse() instanceof Message)
wneuper@2543
   352
        //            return null;//TODO.WN041209 handle messages
wneuper@2543
   353
        //        else
wneuper@2543
   354
        //            return (CalcChanged) wrapper.getResponse();
mlang@2448
   355
    }
rgradisc@1065
   356
mlang@2448
   357
    public int setNextTactic(int id, Tactic tactic) {
mlang@2448
   358
        ResponseWrapper wrapper = interpretSML(id, "setNextTactic @calcid@ ("
mlang@2448
   359
                + tactic.toSMLString() + ");", false);
mlang@2448
   360
        if (wrapper == null) //WN050223 response ... MESSAGE wird nicht
wneuper@2523
   361
            // ausgeparst !!!
wneuper@2523
   362
            return -1;
mlang@2448
   363
        if (wrapper.getResponse() == null) {
wneuper@2726
   364
            //WN041126 ---> isac.wsdialog.WorksheetDialog#notifyUserAction #@#
wneuper@2608
   365
            //autoCalculate(id, /* scope */1, /* steps */1);
mlang@2448
   366
            return 0; //Everything is ok
mlang@2448
   367
        } else {
mlang@2448
   368
            return -1; //An Error occcured
mlang@2448
   369
        }
mlang@2448
   370
    }
rgradisc@1215
   371
mlang@2448
   372
    public Tactic fetchProposedTactic(int id) {
mlang@2448
   373
        ResponseWrapper wrapper = interpretSML(id,
mlang@2448
   374
                "fetchProposedTactic @calcid@;", false);
wneuper@2523
   375
        if (wrapper == null) {
wneuper@2523
   376
            return null;
wneuper@2523
   377
        }
mlang@2448
   378
        // wrapper != null
mlang@2448
   379
        return (Tactic) wrapper.getResponse();
mlang@2448
   380
    }
rgradisc@1016
   381
mlang@2448
   382
    public CalcChanged autoCalculate(int id, int scope, int nSteps) {
mlang@2448
   383
        logger_.debug("BridgeRMI#autoCalculate: id=" + id + ", scope" + scope
mlang@2448
   384
                + ", nSteps" + nSteps);
mlang@2448
   385
        ResponseWrapper wrapper = null;
mlang@2448
   386
        //3 means IToCalc.SCOPE_CALCHEAD:
mlang@2448
   387
        if ((scope == 3) && (nSteps == 0)) {
mlang@2448
   388
            wrapper = interpretSML(id,
mlang@2448
   389
                    "autoCalculate @calcid@ CompleteCalcHead;", false);
wneuper@2543
   390
            //FIXXXME.WN040624 nSteps == 0 hides mismatch in specifications
mlang@2448
   391
        } else if ((scope == IToCalc.SCOPE_CALCULATION) && (nSteps == 0)) {
mlang@2448
   392
            wrapper = interpretSML(id, "autoCalculate @calcid@ CompleteCalc;",
mlang@2448
   393
                    false);
rgradisc@1016
   394
wneuper@2543
   395
        } else if ((scope == IToCalc.SCOPE_MODEL) && (nSteps == 0)) {
wneuper@2543
   396
            wrapper = interpretSML(id, "autoCalculate @calcid@ CompleteModel;",
wneuper@2543
   397
                    false);
wneuper@2543
   398
mlang@2448
   399
        } else if ((scope == IToCalc.SCOPE_SUBCALCULATION) && (nSteps == 0)) {
mlang@2448
   400
            wrapper = interpretSML(id,
mlang@2448
   401
                    "autoCalculate @calcid@ CompleteToSubpbl;", false);
rgradisc@1016
   402
mlang@2448
   403
        } else if ((scope == IToCalc.SCOPE_SUBPROBLEM) && (nSteps == 0)) {
mlang@2448
   404
            wrapper = interpretSML(id,
mlang@2448
   405
                    "autoCalculate @calcid@ CompleteSubpbl;", false);
mlang@2448
   406
        } else {
mlang@2448
   407
            //FIXXXME040624: steps do not regard the scope
mlang@2448
   408
            wrapper = interpretSML(id, "autoCalculate @calcid@ (Step " + nSteps
mlang@2448
   409
                    + ");", false);
mlang@2448
   410
        }
mlang@2448
   411
        if (wrapper == null)
mlang@2448
   412
            return null;
mlang@2448
   413
        else if (wrapper.getResponse() instanceof Message)
mlang@2448
   414
            return null;//TODO.WN041209 handle messages
mlang@2448
   415
        else
mlang@2448
   416
            return (CalcChanged) wrapper.getResponse();
mlang@2448
   417
    }
rgradisc@1016
   418
mlang@2448
   419
    public CalcChanged replaceFormula(int id, CalcFormula f) {
mlang@2448
   420
        ResponseWrapper wrapper = null;
mlang@2448
   421
        wrapper = interpretSML(id, "replaceFormula @calcid@ \""
mlang@2448
   422
                + f.toSMLString() + "\";", false);
mlang@2448
   423
        if (wrapper == null)
mlang@2448
   424
            return null;
mlang@2448
   425
        else if (wrapper.getResponse() instanceof Message)
mlang@2448
   426
            return null;//TODO.WN041209 handle messages
mlang@2448
   427
        else
mlang@2448
   428
            return (CalcChanged) wrapper.getResponse();
mlang@2448
   429
    }
wneuper@1997
   430
mlang@2448
   431
    public CalcChanged appendFormula(int id, CalcFormula f) {
mlang@2448
   432
        ResponseWrapper wrapper = null;
mlang@2448
   433
        wrapper = interpretSML(id, "appendFormula @calcid@ \""
mlang@2448
   434
                + f.toSMLString() + "\";", false);
mlang@2448
   435
        if (wrapper == null)
mlang@2448
   436
            return null;
mlang@2448
   437
        else if (wrapper.getResponse() instanceof Message)
mlang@2448
   438
            return null;//TODO.WN041209 handle messages
mlang@2448
   439
        else
mlang@2448
   440
            return (CalcChanged) wrapper.getResponse();
mlang@2448
   441
    }
wneuper@2003
   442
mlang@2448
   443
    public CalcChanged intermediateSteps(int id, ICalcIterator ci) {
mlang@2448
   444
        ResponseWrapper wrapper = null;
mlang@2448
   445
        wrapper = interpretSML(id, "interSteps @calcid@ " + ci.toSMLString()
mlang@2448
   446
                + ";", false);
mlang@2448
   447
        if (wrapper == null)
mlang@2448
   448
            return null;
mlang@2448
   449
        else if (wrapper.getResponse() instanceof Message)
mlang@2448
   450
            return null;//TODO.WN041209 handle messages
mlang@2448
   451
        else
mlang@2448
   452
            return (CalcChanged) wrapper.getResponse();
mlang@2448
   453
    }
wneuper@2069
   454
mlang@2448
   455
    public Vector getElementsFromTo(int id, ICalcIterator iterator_from,
mlang@2448
   456
            ICalcIterator iterator_to, Integer level,
mlang@2448
   457
            boolean result_includes_tactics) {
mlang@2448
   458
        ResponseWrapper wrapper = null;
mlang@2448
   459
        // getElementsFromTo 1 unc gen 1 false;
mlang@2448
   460
        wrapper = interpretSML(id, "getElementsFromTo @calcid@ "
mlang@2448
   461
                + iterator_from.toSMLString() + " " + iterator_to.toSMLString()
mlang@2448
   462
                + " " + level + " " + result_includes_tactics + ";", false);
wneuper@2523
   463
        if (wrapper == null)
wneuper@2523
   464
            return null;
mlang@2448
   465
        FormHeadsContainer con = (FormHeadsContainer) wrapper.getResponse();
mlang@2448
   466
        return con.getElements();
mlang@2448
   467
    }
wneuper@2104
   468
mlang@2448
   469
    public int iterator(int id) {
mlang@2448
   470
        logger_.warn("iterator: id=" + id);
mlang@2448
   471
        //		ResponseWrapper wrapper = null;
mlang@2448
   472
        //		wrapper = interpretSML(id, "Iterator @calcid@;", false);
mlang@2448
   473
        //		if (wrapper == null)
mlang@2448
   474
        //			return -1;
mlang@2448
   475
        //		return Integer.parseInt(((CalcHeadSimpleID)
mlang@2448
   476
        //                               wrapper.getResponse()).getID());
mlang@2448
   477
        if (id == 1) {
mlang@2448
   478
            ResponseWrapper wrapper = interpretSML(id, "Iterator @calcid@;",
mlang@2448
   479
                    false);
mlang@2448
   480
            if (wrapper == null)
mlang@2448
   481
                return -1;
mlang@2448
   482
            else
mlang@2448
   483
                return Integer.parseInt(((CalcHeadSimpleID) wrapper
mlang@2448
   484
                        .getResponse()).getID());
mlang@2448
   485
        } else
mlang@2448
   486
            return 4711;//TODO.WN041208 drop CalcIterator.iteratorID_
mlang@2448
   487
    }
rgradisc@1252
   488
mlang@2448
   489
    //	private Position moveSuccess(ResponseWrapper wrapper) {
mlang@2448
   490
    //		if (wrapper == null)
mlang@2448
   491
    //			return null;
mlang@2448
   492
    //		else {
mlang@2448
   493
    //			if (wrapper.getResponse() instanceof Message)
mlang@2448
   494
    //				return null;//TODO.WN041209 handle messages
mlang@2448
   495
    //			else {
mlang@2448
   496
    //				Position p = (Position) wrapper.getPosition();
mlang@2448
   497
    //				return p;
mlang@2448
   498
    //			}
mlang@2448
   499
    //		}
mlang@2448
   500
    //	}
mlang@2448
   501
    private Position moveSuccess(ResponseWrapper wrapper) {
mlang@2448
   502
        if (wrapper == null)
mlang@2448
   503
            return null;
mlang@2448
   504
        else {
mlang@2448
   505
            Object r = wrapper.getResponse();
mlang@2448
   506
            if (r instanceof Message)
mlang@2448
   507
                return null;//TODO.WN041209 handle messages
mlang@2448
   508
            else {
mlang@2448
   509
                Position p = (Position) wrapper.getResponse();
mlang@2448
   510
                return p;
mlang@2448
   511
            }
mlang@2448
   512
        }
mlang@2448
   513
    }
rgradisc@1252
   514
mlang@2448
   515
    //returns Position for uniformity with move*; not required elsewhere
mlang@2448
   516
    public Position moveActiveFormula(int javaCalcID, Position p) {
mlang@2448
   517
        logger_.debug("moveDown: javaCalcID=" + javaCalcID + ", sml_pos="
mlang@2448
   518
                + p.toSMLString());
mlang@2448
   519
        ResponseWrapper wrapper = interpretSML(javaCalcID,
mlang@2448
   520
                "moveActiveFormula @calcid@ " + p.toSMLString() + ";", false);
mlang@2448
   521
        return moveSuccess(wrapper);
mlang@2448
   522
    }
wneuper@2002
   523
mlang@2448
   524
    public Position moveRoot(int javaCalcID, int iteratorID) {
mlang@2448
   525
        logger_.warn("moveRoot: javaCalcID=" + javaCalcID);
mlang@2448
   526
        ResponseWrapper wrapper = null;
mlang@2448
   527
        if (iteratorID == 1)
mlang@2448
   528
            wrapper = interpretSML(javaCalcID, "moveActiveRoot @calcid@" + ";",
mlang@2448
   529
                    false);
mlang@2448
   530
        else
mlang@2448
   531
            wrapper = interpretSML(javaCalcID, "moveRoot @calcid@ " + ";",
mlang@2448
   532
                    false);
mlang@2448
   533
        return moveSuccess(wrapper);
mlang@2448
   534
    }
rgradisc@1107
   535
mlang@2448
   536
    public Position moveUp(int javaCalcID, int iteratorID, Position p) {
mlang@2448
   537
        ResponseWrapper wrapper = null;
mlang@2448
   538
        if (iteratorID == 1)
mlang@2448
   539
            wrapper = interpretSML(javaCalcID, "moveActiveUp @calcid@" + ";",
mlang@2448
   540
                    false);
mlang@2448
   541
        else
mlang@2448
   542
            wrapper = interpretSML(javaCalcID, "moveUp @calcid@ "
mlang@2448
   543
                    + p.toSMLString() + ";", false);
mlang@2448
   544
        return moveSuccess(wrapper);
mlang@2448
   545
    }
rgradisc@1252
   546
mlang@2448
   547
    public Position moveDown(int javaCalcID, int iteratorID, Position p) {
mlang@2448
   548
        logger_.debug("moveDown: javaCalcID=" + javaCalcID + ", sml_pos="
mlang@2448
   549
                + p.toSMLString());
mlang@2448
   550
        ResponseWrapper wrapper = null;
mlang@2448
   551
        if (iteratorID == 1)
mlang@2448
   552
            wrapper = interpretSML(javaCalcID, "moveActiveDown @calcid@" + ";",
mlang@2448
   553
                    false);
mlang@2448
   554
        else
mlang@2448
   555
            wrapper = interpretSML(javaCalcID, "moveDown @calcid@ "
mlang@2448
   556
                    + p.toSMLString() + ";", false);
mlang@2448
   557
        return moveSuccess(wrapper);
mlang@2448
   558
    }
rgradisc@1178
   559
mlang@2448
   560
    public Position moveLevelUp(int javaCalcID, int iteratorID, Position p) {
mlang@2448
   561
        ResponseWrapper wrapper = null;
mlang@2448
   562
        if (iteratorID == 1)
mlang@2448
   563
            wrapper = interpretSML(javaCalcID, "moveActiveLevelUp @calcid@"
mlang@2448
   564
                    + ";", false);
mlang@2448
   565
        else
mlang@2448
   566
            wrapper = interpretSML(javaCalcID, "moveLevelUp @calcid@ "
mlang@2448
   567
                    + p.toSMLString() + ";", false);
mlang@2448
   568
        return moveSuccess(wrapper);
mlang@2448
   569
    }
rgradisc@1191
   570
mlang@2448
   571
    public Position moveLevelDown(int javaCalcID, int iteratorID, Position p) {
mlang@2448
   572
        ResponseWrapper wrapper = null;
mlang@2448
   573
        if (iteratorID == 1)
mlang@2448
   574
            wrapper = interpretSML(javaCalcID, "moveActiveLevelDown @calcid@"
mlang@2448
   575
                    + ";", false);
mlang@2448
   576
        else
mlang@2448
   577
            wrapper = interpretSML(javaCalcID, "moveLevelDown @calcid@ " + " "
mlang@2448
   578
                    + p.toSMLString() + ";", false);
mlang@2448
   579
        return moveSuccess(wrapper);
mlang@2448
   580
    }
rgradisc@1191
   581
mlang@2448
   582
    public Position moveCalcHead(int javaCalcID, int iteratorID, Position p) {
mlang@2448
   583
        ResponseWrapper wrapper = null;
mlang@2448
   584
        if (iteratorID == 1)
mlang@2448
   585
            wrapper = interpretSML(javaCalcID, "moveActiveCalcHead @calcid@"
mlang@2448
   586
                    + ";", false);
mlang@2448
   587
        else
mlang@2448
   588
            wrapper = interpretSML(javaCalcID, "moveCalcHead @calcid@ " + " "
mlang@2448
   589
                    + p.toSMLString() + ";", false);
mlang@2448
   590
        return moveSuccess(wrapper);
mlang@2448
   591
    }
wneuper@1989
   592
mlang@2448
   593
    /**
mlang@2448
   594
     * @deprecated in favour of getTactic
mlang@2448
   595
     */
mlang@2448
   596
    public boolean moveTactic(int javaCalcID, int iteratorID) {
mlang@2448
   597
        ResponseWrapper wrapper = interpretSML(javaCalcID,
mlang@2448
   598
                "moveTactic @calcid@ " + iteratorID + ";", false);
mlang@2448
   599
        return true;//WN041208 moveSuccess(wrapper);
mlang@2448
   600
    }
rgradisc@1191
   601
mlang@2448
   602
    /**
mlang@2448
   603
     * @deprecated in favour of getFormula
mlang@2448
   604
     */
mlang@2448
   605
    public boolean moveFormula(int javaCalcID, int iteratorID) {
mlang@2448
   606
        ResponseWrapper wrapper = interpretSML(javaCalcID,
mlang@2448
   607
                "moveFormula @calcid@ " + iteratorID + ";", false);
mlang@2448
   608
        return true;//WN041208 moveSuccess(wrapper);
mlang@2448
   609
    }
rgradisc@1191
   610
mlang@2448
   611
    public int smlCalcIDtoJavaCalcID(int smlID) {
mlang@2448
   612
        Iterator it = java_calcid_to_smlcalcid_.keySet().iterator();
mlang@2448
   613
        while (it.hasNext()) {
mlang@2448
   614
            Object key = it.next();
mlang@2448
   615
            Integer value = (Integer) java_calcid_to_smlcalcid_.get(key);
wneuper@2523
   616
            if (value.intValue() == smlID) {
wneuper@2523
   617
                return ((Integer) key).intValue();
wneuper@2523
   618
            }
mlang@2448
   619
        }
mlang@2448
   620
        return -1;
mlang@2448
   621
    }
rgradisc@1196
   622
mlang@2448
   623
    public boolean destruct(int javaCalcID) {
mlang@2448
   624
        ResponseWrapper wrapper = interpretSML(javaCalcID,
mlang@2448
   625
                "DEconstrCalcTree @calcid@;", false);
wneuper@2523
   626
        if (wrapper == null) {
wneuper@2523
   627
            return false;
wneuper@2523
   628
        }
mlang@2448
   629
        java_calcid_to_smlcalcid_.remove(new Integer(javaCalcID));
mlang@2448
   630
        inputs_.remove(new Integer(javaCalcID));
mlang@2448
   631
        return true;
mlang@2448
   632
    }
wneuper@1875
   633
mlang@2448
   634
    public Map getInputs() {
mlang@2448
   635
        return inputs_;
mlang@2448
   636
    }
wneuper@1875
   637
mlang@2448
   638
    public int getRmiID() {
mlang@2448
   639
        return rmiid_;
mlang@2448
   640
    }
wneuper@1875
   641
mlang@2448
   642
    public void setRmiID(int i) {
mlang@2448
   643
        logger_.warn("setRmiID: i=" + i);
mlang@2448
   644
        rmiid_ = i;
mlang@2448
   645
    }
wneuper@1875
   646
mlang@2448
   647
    /**
mlang@2448
   648
     * Save a calcTree for later restoring (probably to another SML Kernel)
mlang@2448
   649
     * 
mlang@2448
   650
     * @param calcTreeID
mlang@2448
   651
     *            the ID of the calcTree
mlang@2448
   652
     * @return a vector containing strings. This is representatation of the
mlang@2448
   653
     *         status of the calcTree
mlang@2448
   654
     */
mlang@2448
   655
    public Vector saveCalcTree(int calcTreeID) {
mlang@2448
   656
        this.bridge_.log(1, "----------------begin saving calcTree "
mlang@2448
   657
                + calcTreeID + "------------");
mlang@2448
   658
        return (Vector) inputs_.get(new Integer(calcTreeID));
mlang@2448
   659
    }
wneuper@1976
   660
mlang@2448
   661
    /**
mlang@2448
   662
     * Restore a saved calcTree.
mlang@2448
   663
     * 
mlang@2448
   664
     * @param v
mlang@2448
   665
     *            Vector containing strings
mlang@2448
   666
     * @return Java CalcTreeID (not SML-ID)
mlang@2448
   667
     */
mlang@2448
   668
    public int loadCalcTree(Vector v) {
mlang@2448
   669
        this.bridge_.log(1, "----------------begin loading------------");
mlang@2448
   670
        int javaCalcID = smallestFreeCalcID();
mlang@2448
   671
        this.bridge_.log(1, "-----smallest free  = " + javaCalcID);
mlang@2448
   672
        restoreToSML(javaCalcID, v);
mlang@2448
   673
        this.bridge_.log(1, "----------------done loading-------------");
mlang@2448
   674
        return javaCalcID;
mlang@2448
   675
    }
wneuper@1976
   676
mlang@2448
   677
    private void restoreToSML(int javaCalcID, Vector v) {
mlang@2448
   678
        Iterator it = ((Vector) v.clone()).iterator();
mlang@2448
   679
        CalcTree result = null;
mlang@2448
   680
        String s = (String) it.next();
mlang@2448
   681
        int smlCalcID = newCalculation(javaCalcID, s, true);
mlang@2448
   682
        //javaCalcIDtoSmlCalcID.put(new Integer(javaCalcID), new
mlang@2448
   683
        // Integer(smlCalcID));
mlang@2448
   684
        //int smlID = ((Integer)javaCalcIDtoSmlCalcID.get(new
mlang@2448
   685
        // Integer(calcID))).intValue();
mlang@2448
   686
        while (it.hasNext()) {
mlang@2448
   687
            s = (String) it.next();
mlang@2448
   688
            interpretSML(javaCalcID, s, true);
mlang@2448
   689
        }
mlang@2448
   690
    }
wneuper@1976
   691
mlang@2448
   692
    /**
mlang@2448
   693
     * This method is used when the kernel crashes and the CalcTrees need to be
mlang@2448
   694
     * entered again to the kernel to restore the previous state. The
mlang@2448
   695
     * Java-CalcIDs stay the same
mlang@2448
   696
     */
mlang@2448
   697
    public void restoreExistingCalcTrees() {
mlang@2448
   698
        bridge_.log(1, "---- entering restoreExistingCalcTrees");
mlang@2448
   699
        Iterator it = java_calcid_to_smlcalcid_.keySet().iterator();
mlang@2448
   700
        // keySet = javaCalcIDs
mlang@2448
   701
        int javaCalcID, newSmlCalcID;
mlang@2448
   702
        Vector v;
mlang@2448
   703
        while (it.hasNext()) {
mlang@2448
   704
            //bridge.log(1, "1");
mlang@2448
   705
            //int i = ((Integer)it.next()).intValue();
mlang@2448
   706
            javaCalcID = ((Integer) it.next()).intValue();
mlang@2448
   707
            //bridge.log(1, "2");
mlang@2448
   708
            v = saveCalcTree(javaCalcID);
mlang@2448
   709
            //bridge.log(1, "3");
mlang@2448
   710
            this.restoreToSML(javaCalcID, v);
mlang@2448
   711
        }
mlang@2448
   712
        bridge_.log(1, "---- done restoreExistingCalcTrees");
mlang@2448
   713
    }
wneuper@1976
   714
mlang@2448
   715
    /**
mlang@2448
   716
     * @see isac.bridge.IBridgeRMI#getElement(int, int)
mlang@2448
   717
     * @deprecated in favour of getFormula, getTactic, getAssumption
mlang@2448
   718
     */
mlang@2448
   719
    public ICalcElement getElement(int javaCalcID, Position p) {
mlang@2448
   720
        ResponseWrapper wrapper = interpretSML(javaCalcID,
mlang@2448
   721
                "refFormula @calcid@ " + p.toSMLString() + ";", false);
wneuper@2523
   722
        if (wrapper == null)
wneuper@2523
   723
            return null;
wneuper@1976
   724
mlang@2448
   725
        ICalcElement ce = (ICalcElement) wrapper.getResponse();
mlang@2448
   726
        if (ce instanceof CalcFormula) {
mlang@2448
   727
            //			((CalcFormula) ce).setPosition(wrapper.getPosition());
mlang@2448
   728
        } else if (ce instanceof CalcHead) {
mlang@2448
   729
            //			((CalcHead) ce).setPosition(wrapper.getPosition());
mlang@2448
   730
            ((CalcHead) ce).setCalcTreeID(javaCalcID);
mlang@2448
   731
        }
mlang@2448
   732
        return ce;
mlang@2448
   733
    }
wneuper@1976
   734
mlang@2448
   735
    /**
mlang@2448
   736
     * @see isac.bridge.IBridgeRMI#getFormula(int, int)
mlang@2448
   737
     */
mlang@2448
   738
    public ICalcElement getFormula(int calcTreeID, Position p)
mlang@2448
   739
            throws RemoteException {
mlang@2448
   740
        ResponseWrapper wrapper = interpretSML(calcTreeID,
mlang@2448
   741
                "refFormula @calcid@ " + p.toSMLString() + ";", false);
wneuper@2523
   742
        if (wrapper == null)
wneuper@2523
   743
            return null;
wneuper@1976
   744
mlang@2448
   745
        ICalcElement ce = (ICalcElement) wrapper.getResponse();
mlang@2448
   746
        if (ce instanceof CalcFormula) {
mlang@2448
   747
            //			((CalcFormula) ce).setPosition(wrapper.getPosition());
mlang@2448
   748
        } else if (ce instanceof CalcHead) {
mlang@2448
   749
            //			((CalcHead) ce).setPosition(wrapper.getPosition());
mlang@2448
   750
            ((CalcHead) ce).setCalcTreeID(calcTreeID);
mlang@2448
   751
        }
mlang@2448
   752
        return ce;
mlang@2448
   753
    }
wneuper@1976
   754
mlang@2448
   755
    /*
mlang@2448
   756
     * (non-Javadoc)
mlang@2448
   757
     * 
mlang@2448
   758
     * @see isac.bridge.IBridgeRMI#getTactic(int, int)
mlang@2448
   759
     */
mlang@2448
   760
    public Tactic getTactic(int calcTreeID, Position pos)
mlang@2448
   761
            throws RemoteException {
mlang@2448
   762
        ResponseWrapper wrapper = interpretSML(calcTreeID,
mlang@2448
   763
                "getTactic @calcid@ " + pos.toSMLString() + ";", false);
mlang@2448
   764
        return (Tactic) wrapper.getResponse();
mlang@2448
   765
    }
wneuper@1976
   766
mlang@2448
   767
    //	 WN050217 public Tactic[] fetchAppliableTactics(int id, int scope) {
mlang@2448
   768
    public Vector getAppliableTactics(int id, int scope, Position pos) {
mlang@2448
   769
        ResponseWrapper wrapper = interpretSML(id,
mlang@2448
   770
                "fetchApplicableTactics @calcid@ " + scope + pos.toSMLString()
mlang@2448
   771
                        + ";", false);
wneuper@2523
   772
        if (wrapper == null)
wneuper@2523
   773
            return null;
mlang@2448
   774
        TacticsContainer tc = (TacticsContainer) wrapper.getResponse();
mlang@2448
   775
        Vector v = tc.getTactics();
mlang@2448
   776
        //		Object[] result = new Tactic[v.size()];
mlang@2448
   777
        //		return (Tactic[]) v.toArray(result);
mlang@2448
   778
        return v;
mlang@2448
   779
    }
wneuper@2104
   780
mlang@2448
   781
    /**
mlang@2448
   782
     * @see isac.bridge.IBridgeRMI#getAssumption(int, int)
mlang@2448
   783
     */
mlang@2448
   784
    public Assumptions getAssumptions(int calcTreeID, Position pos)
mlang@2448
   785
            throws RemoteException {
mlang@2448
   786
        ResponseWrapper wrapper = interpretSML(calcTreeID,
mlang@2448
   787
                "getAssumptions @calcid@ " + pos.toSMLString() + ";", false);
mlang@2448
   788
        return (Assumptions) wrapper.getResponse();
mlang@2448
   789
    }
wneuper@2104
   790
mlang@2448
   791
    /**
mlang@2448
   792
     * @see isac.bridge.IBridgeRMI#getAccumulatedAssumptions(int,
mlang@2448
   793
     *      isac.util.formulae.Position)
mlang@2448
   794
     */
mlang@2448
   795
    public Assumptions getAccumulatedAssumptions(int calcTreeID, Position pos)
mlang@2448
   796
            throws RemoteException {
mlang@2448
   797
        ResponseWrapper wrapper = interpretSML(calcTreeID,
mlang@2448
   798
                "getAccumulatedAsms @calcid@ " + pos.toSMLString() + ";", false);
mlang@2448
   799
        return (Assumptions) wrapper.getResponse();
mlang@2448
   800
    }
wneuper@2523
   801
wneuper@2523
   802
    /**
wneuper@2750
   803
     * @see isac.interfaces.ICalcIterator#tryMatchProblem(KEStoreID)
wneuper@2523
   804
     */
wneuper@2524
   805
    public Match tryMatchProblem(int javaCalcID, ProblemID problemID) {
wneuper@2523
   806
        ResponseWrapper wrapper = interpretSML(javaCalcID,
wneuper@2523
   807
                "tryMatchProblem @calcid@ " + problemID.toSMLString() + ";",
wneuper@2523
   808
                false);
wneuper@2523
   809
        Object response = wrapper.getResponse();
wneuper@2523
   810
        CalcHead ch = (CalcHead) response;
wneuper@2523
   811
        //ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
wneuper@2523
   812
        Match m = new Match(ch.getSpecification().getProblem(), ch
wneuper@2523
   813
                .getStatusString(), ch.getHeadLine(), ch.getModel());
wneuper@2523
   814
        return m;
wneuper@2523
   815
    }
wneuper@2523
   816
wneuper@2523
   817
    /**
wneuper@2750
   818
     * @see isac.interfaces.ICalcIterator#tryRefineProblem(KEStoreID)
wneuper@2523
   819
     */
wneuper@2524
   820
    public Match tryRefineProblem(int javaCalcID, ProblemID problemID) {
wneuper@2523
   821
        ResponseWrapper wrapper = interpretSML(javaCalcID,
wneuper@2523
   822
                "tryRefineProblem @calcid@ " + problemID.toSMLString() + ";",
wneuper@2523
   823
                false);
wneuper@2523
   824
        Object response = wrapper.getResponse();
wneuper@2523
   825
        CalcHead ch = (CalcHead) response;
wneuper@2523
   826
        //ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
wneuper@2523
   827
        Match m = new Match(ch.getSpecification().getProblem(), ch
wneuper@2523
   828
                .getStatusString(), ch.getHeadLine(), ch.getModel());
wneuper@2523
   829
        return m;
wneuper@2523
   830
    }
wneuper@2523
   831
wneuper@2523
   832
    /**
wneuper@2750
   833
     * @see isac.interfaces.ICalcIterator#tryMatchMethod(KEStoreID)
wneuper@2524
   834
     * @deprecated is not impl. in math-engine !!!
wneuper@2523
   835
     */
wneuper@2523
   836
    public Match tryMatchMethod(int javaCalcID, KEStoreID keStoreID)
wneuper@2523
   837
            throws RemoteException {
wneuper@2523
   838
        ResponseWrapper wrapper = interpretSML(javaCalcID,
wneuper@2523
   839
                "tryMatchMethod @calcid@ " + keStoreID.toSMLString() + ";",
wneuper@2523
   840
                false);
wneuper@2523
   841
        Object response = wrapper.getResponse();
wneuper@2523
   842
        CalcHead ch = (CalcHead) response;
wneuper@2523
   843
        //ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
wneuper@2523
   844
        Match m = new Match(ch.getSpecification().getProblem(), ch
wneuper@2523
   845
                .getStatusString(), ch.getHeadLine(), ch.getModel());
wneuper@2523
   846
        return m;
wneuper@2523
   847
    }
wneuper@2523
   848
wneuper@2523
   849
    /**
wneuper@2750
   850
     * @see isac.interfaces.ICalcIterator#tryRefineMethod(KEStoreID)
wneuper@2524
   851
     * @deprecated is not impl. in math-engine !!!
wneuper@2523
   852
     */
wneuper@2523
   853
    public Match tryRefineMethod(int javaCalcID, KEStoreID keStoreID)
wneuper@2524
   854
            throws RemoteException {
wneuper@2523
   855
        ResponseWrapper wrapper = interpretSML(javaCalcID,
wneuper@2523
   856
                "tryRefineMethod @calcid@ " + keStoreID.toSMLString() + ";",
wneuper@2523
   857
                false);
wneuper@2523
   858
        Object response = wrapper.getResponse();
wneuper@2523
   859
        CalcHead ch = (CalcHead) response;
wneuper@2523
   860
        //ch.setCalcTreeID(smlCalcIDtoJavaCalcID(wrapper.getCalcID()));
wneuper@2523
   861
        Match m = new Match(ch.getSpecification().getProblem(), ch
wneuper@2523
   862
                .getStatusString(), ch.getHeadLine(), ch.getModel());
wneuper@2523
   863
        return m;
wneuper@2523
   864
    }
wneuper@2523
   865
wneuper@1976
   866
}