src/java/isac/bridge/BridgeRMI.java
author wneuper
Tue, 26 Jul 2005 15:55:32 +0200
changeset 2707 6973cc026d5d
parent 2608 05951bfc0958
child 2726 ca80f46c126c
permissions -rw-r--r--
review of (retired) authors, shifted user.SuccessInfo
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
}