src/java/isac/bridge/MathEngine.java
author wneuper
Tue, 14 Jun 2005 17:22:50 +0200
changeset 2391 59a60ef2a2c8
parent 2293 aedf91a318c5
child 2443 8e3991a49d1f
permissions -rw-r--r--
java: minor changes preparing tryMatch
rgradisc@1027
     1
/*
rgradisc@1027
     2
 * Created on Oct 20, 2003
rgradisc@1027
     3
 */
rgradisc@1027
     4
package isac.bridge;
rgradisc@1027
     5
wneuper@1976
     6
import isac.util.CalcChanged;
rgradisc@1088
     7
import isac.util.Formalization;
rgradisc@1191
     8
import isac.util.NotInSpecificationPhaseException;
wneuper@2106
     9
import isac.util.formulae.Assumptions;
rgradisc@1311
    10
import isac.util.formulae.CalcHead;
rgradisc@1311
    11
import isac.util.formulae.CalcHeadCompoundID;
wneuper@2051
    12
import isac.util.formulae.CalcFormula;
wneuper@1989
    13
import isac.util.formulae.Position;
rgradisc@1311
    14
import isac.util.interfaces.ICalcElement;
rgradisc@1311
    15
import isac.util.interfaces.ICalcIterator;
rgradisc@1311
    16
import isac.util.tactics.Tactic;
rgradisc@1035
    17
rgradisc@1035
    18
import java.io.Serializable;
rgradisc@1035
    19
import java.rmi.Naming;
rgradisc@1035
    20
import java.rmi.RemoteException;
rgradisc@1191
    21
import java.util.HashMap;
rgradisc@1191
    22
import java.util.Map;
rgradisc@1198
    23
import java.util.Vector;
rgradisc@1035
    24
wneuper@1863
    25
import org.apache.log4j.Logger;
wneuper@1863
    26
rgradisc@1027
    27
/**
wneuper@2065
    28
 * Class MathEngine: This class is called by the Dialog and communicates with
wneuper@2065
    29
 * the Bridge via RMI. It also delegates the methods of the CalcTree and the
wneuper@2065
    30
 * CalcIterator to the Bridge.
wneuper@2065
    31
 * 
rgradisc@1027
    32
 * @author rgradisc
rgradisc@1027
    33
 */
rgradisc@1035
    34
public class MathEngine implements Serializable {
rgradisc@1027
    35
wneuper@2065
    36
	private static MathEngine singleton;
rgradisc@1036
    37
wneuper@2065
    38
	private IBridgeRMI bridgeRMI;
rgradisc@1635
    39
wneuper@2065
    40
	// Stores the calcTrees after call of startSpecifying //WN00827
wneuper@2065
    41
	// startCalculation
wneuper@2065
    42
	// and hands them out to the dialog after startSolving//WN00827 ???
wneuper@2065
    43
	private Map calcTrees;
rgradisc@1191
    44
wneuper@2065
    45
	static Logger logger = Logger.getLogger(MathEngine.class.getName());
wneuper@1863
    46
wneuper@2065
    47
	// This is a Singleton Class: A private constructor is needed
wneuper@2065
    48
	private MathEngine(String hostName) {
wneuper@2065
    49
		logger.debug("MathEngine(" + hostName + ")");
wneuper@2065
    50
		try {
wneuper@2065
    51
			//connect to bridge
wneuper@2065
    52
			bridgeRMI = (IBridgeRMI) Naming.lookup("//" + hostName
wneuper@2065
    53
					+ "/BridgeRMI");
wneuper@2065
    54
			System.out.println("MathEngine Constr: connected to Bridge: "
wneuper@2065
    55
					+ bridgeRMI.toString());
wneuper@2065
    56
			if (bridgeRMI == null)
wneuper@2065
    57
				System.out
wneuper@2065
    58
						.println("Error occured: The Bridge could not be found!");
wneuper@2065
    59
		} catch (Exception e) {
wneuper@2065
    60
			System.out
wneuper@2065
    61
					.println("Could not connect to Bridge via RMI\n"
wneuper@2065
    62
							+ "Please make sure that the Bridge is running and connected");
wneuper@2065
    63
			e.printStackTrace();
wneuper@2065
    64
		}
wneuper@2065
    65
		calcTrees = new HashMap();
wneuper@2065
    66
	}
rgradisc@1035
    67
wneuper@2065
    68
	/*
wneuper@2065
    69
	 * FIXME.WN040924 just to make the old bridge continue work
wneuper@2065
    70
	 */
wneuper@2065
    71
	protected IBridgeRMI getBridgeRMI() {
wneuper@2065
    72
		return bridgeRMI;
wneuper@2065
    73
	}
rgradisc@1048
    74
wneuper@2065
    75
	/**
wneuper@2065
    76
	 * Initialize the MathEngine
wneuper@2065
    77
	 * 
wneuper@2065
    78
	 * @param hostName:
wneuper@2065
    79
	 *            Host name on which the Bridge is running
wneuper@2065
    80
	 */
wneuper@2065
    81
	public static void init(String hostName) {
wneuper@2127
    82
		logger.fatal("  DG->BR: init(" + hostName + ")");
wneuper@2065
    83
		if (singleton == null) {
wneuper@2065
    84
			singleton = new MathEngine(hostName);
wneuper@2065
    85
		}
wneuper@2065
    86
	}
rgradisc@1036
    87
wneuper@2065
    88
	public static MathEngine getMathEngine() {
wneuper@2127
    89
		logger.fatal("  DG<>BR: getMathEngine()");
wneuper@2065
    90
		return singleton;
wneuper@2065
    91
	}
rgradisc@1586
    92
wneuper@2065
    93
	/**
wneuper@2065
    94
	 * Start a new calculation
wneuper@2065
    95
	 * 
wneuper@2065
    96
	 * @param f
wneuper@2065
    97
	 *            Formalization of the new calculation, from expl
wneuper@2065
    98
	 * @return CalcHead: empty for startSpecifying
wneuper@2065
    99
	 * @throws RemoteException
wneuper@2065
   100
	 *             WN040924 ???
wneuper@2065
   101
	 * 
wneuper@2065
   102
	 * int id = calcHead.getCalcTreeID();//WN040922 TODO simplify CalcHead
wneuper@2065
   103
	 * CalcTree calcTree = (CalcTree) calcTrees.get(new Integer(id));//WN040922
wneuper@2065
   104
	 * TODO simplify
wneuper@2065
   105
	 */
wneuper@2065
   106
	public CalcTree startCalculation(Formalization f) {
wneuper@2293
   107
		logger.fatal("  DG->BR: startCalculation(" + f.toSMLString() + ")");
wneuper@2065
   108
		CalcTree calcTree = null;//WN
wneuper@2065
   109
		try {
wneuper@2065
   110
			int id = bridgeRMI.startCalculation(f);
wneuper@2065
   111
			calcTree = new CalcTree(this, id);
wneuper@2065
   112
			calcTrees.put(new Integer(id), calcTree);
rgradisc@1166
   113
wneuper@2065
   114
			ICalcIterator hotSpot = calcTree.iterator();
wneuper@2065
   115
			calcTree.setHotSpot(hotSpot); //first iterator marks the hotSpot
wneuper@2065
   116
			//hotSpot.moveRoot();
wneuper@2065
   117
			int i = 111;
wneuper@2065
   118
		} catch (RemoteException e) {
wneuper@2065
   119
			e.printStackTrace();
wneuper@2065
   120
		}
wneuper@2127
   121
		logger.fatal("  DG<-BR: startCalculation <- calcTree=" + calcTree);
wneuper@2065
   122
		return calcTree;
wneuper@2065
   123
	}
rgradisc@1623
   124
wneuper@2065
   125
	/*
wneuper@2065
   126
	 * boolean autoCalculate(int id, int scope, int nSteps) throws
wneuper@2065
   127
	 * RemoteException { logger.debug("autoCalculate: id="+id+",
wneuper@2065
   128
	 * scope="+scope+", nSteps="+nSteps); return bridgeRMI.autoCalculate(id,
wneuper@2065
   129
	 * scope, nSteps); }
wneuper@2065
   130
	 */
rgradisc@1635
   131
wneuper@2065
   132
	/**
wneuper@2065
   133
	 * @see IToCalc#startSolving(), copied to CalcTree
wneuper@2065
   134
	 * 
wneuper@2065
   135
	 * public void startSolving(CalcHead calcHead) throws Exception {
wneuper@2065
   136
	 * logger.debug("startSolving: calcHead="+calcHead); int id =
wneuper@2065
   137
	 * calcHead.getCalcTreeID();//WN040922 TODO simplify CalcHead CalcTree
wneuper@2065
   138
	 * calcTree = (CalcTree) calcTrees.get(new Integer(id));//WN040922 TODO
wneuper@2065
   139
	 * simplify
wneuper@2065
   140
	 * 
wneuper@2241
   141
	 * if (calcHead.getCalcHeadStatus() != CalcHead.MODEL_ITEM_CORRECT) { throw
wneuper@2065
   142
	 * new Exception("Startsolving with incorrect CalcHead"); } Tactic t =
wneuper@2065
   143
	 * calcTree.fetchProposedTactic(); if (t.getName().compareTo("Apply_Method") !=
wneuper@2065
   144
	 * 0) { throw new Exception("Startsolving fetches " + t.getName()); } //Next
wneuper@2065
   145
	 * Tactic must always be Apply_Method calcTree.setNextTactic(t); //return
wneuper@2065
   146
	 * calcTree; }
wneuper@2065
   147
	 */
rgradisc@1191
   148
wneuper@2065
   149
	/**
wneuper@2065
   150
	 * @see IToCalc public void modifyCalcHead(CalcHead calcHead) {
wneuper@2065
   151
	 *      logger.debug("modifyCalcHead: calcHead="+calcHead); CalcHead
wneuper@2065
   152
	 *      newCalcHead = null; try { newCalcHead =
wneuper@2065
   153
	 *      bridgeRMI.modifyCalcHead(calcHead);
wneuper@2065
   154
	 *      calcHead.fillValuesfrom(newCalcHead); } catch (RemoteException e) {
wneuper@2065
   155
	 *      e.printStackTrace(); } }
wneuper@2065
   156
	 */
rgradisc@1191
   157
wneuper@2065
   158
	/*
wneuper@2065
   159
	 * @see IToCalc public void completeCalcHead(CalcHead calcHead) {
wneuper@2065
   160
	 *      logger.debug("completeCalcHead: calcHead="+calcHead); CalcHead
wneuper@2065
   161
	 *      newCalcHead = null; try { //WN040924 newCalcHead =
wneuper@2065
   162
	 *      bridgeRMI.completeCalcHead(calcHead);
wneuper@2065
   163
	 *      bridgeRMI.completeCalcHead(calcHead); //WN040924
wneuper@2065
   164
	 *      calcHead.fillValuesfrom(newCalcHead); } catch (RemoteException e) {
wneuper@2065
   165
	 *      e.printStackTrace(); } }
wneuper@2065
   166
	 */
rgradisc@1035
   167
wneuper@2065
   168
	/*
wneuper@2065
   169
	 * @see IToCalc public void completeCalcHead(CalcHead calcHead, int
wneuper@2065
   170
	 *      completeItem) { CalcHead newCalcHead; try { //WN040924 newCalcHead =
wneuper@2065
   171
	 *      bridgeRMI.completeCalcHead(calcHead, completeItem);
wneuper@2065
   172
	 *      bridgeRMI.completeCalcHead(calcHead, completeItem); //WN040924
wneuper@2065
   173
	 *      calcHead.fillValuesfrom(newCalcHead); //TODO: Remove the following
wneuper@2241
   174
	 *      line!! calcHead.setCalcHeadStatus(CalcHead.MODEL_ITEM_CORRECT); }
wneuper@2065
   175
	 *      catch (RemoteException e) { e.printStackTrace(); } }
wneuper@2065
   176
	 */
rgradisc@1035
   177
wneuper@2391
   178
//	/**
wneuper@2391
   179
//	 * Refine a given problem for this CalcTree
wneuper@2391
   180
//	 * 
wneuper@2391
   181
//	 * @param problemID
wneuper@2391
   182
//	 * @return CalcHead, if the operation was successful, else null
wneuper@2391
   183
//	 */
wneuper@2391
   184
//	public void tryRefine(CalcHead calcHead, CalcHeadCompoundID problemID)
wneuper@2391
   185
//			throws NotInSpecificationPhaseException {
wneuper@2391
   186
//		CalcHead newCalcHead = null;
wneuper@2391
   187
//		try {
wneuper@2391
   188
//			//WN040924 newCalcHead =
wneuper@2391
   189
//			// bridgeRMI.tryRefine(calcHead.getCalcTreeID(), problemID);
wneuper@2391
   190
//			bridgeRMI.tryRefine(calcHead.getCalcTreeID(), problemID);
wneuper@2391
   191
//			if (newCalcHead == null) {
wneuper@2391
   192
//				throw new NotInSpecificationPhaseException();
wneuper@2391
   193
//			}
wneuper@2391
   194
//			calcHead.fillValuesfrom(newCalcHead);
wneuper@2391
   195
//		} catch (RemoteException e) {
wneuper@2391
   196
//			// TODO Auto-generated catch block
wneuper@2391
   197
//			e.printStackTrace();
wneuper@2391
   198
//		}
wneuper@2391
   199
//	}
rgradisc@1035
   200
wneuper@2391
   201
//WN050610 transferred toCalcTree
wneuper@2391
   202
//	/**
wneuper@2391
   203
//	 * Match a given problem for this CalcTree
wneuper@2391
   204
//	 * 
wneuper@2391
   205
//	 * @param problemID
wneuper@2391
   206
//	 * @return CalcHead, if the operation was successful, else null
wneuper@2391
   207
//	 */
wneuper@2391
   208
//	public void tryMatch(CalcHead calcHead, CalcHeadCompoundID problemID)
wneuper@2391
   209
//			throws NotInSpecificationPhaseException {
wneuper@2391
   210
//		CalcHead newCalcHead = null;
wneuper@2391
   211
//		try {
wneuper@2391
   212
//			//WN040924 newCalcHead =
wneuper@2391
   213
//			// bridgeRMI.tryMatch(calcHead.getCalcTreeID(), problemID);
wneuper@2391
   214
//			bridgeRMI.tryMatch(calcHead.getCalcTreeID(), problemID);
wneuper@2391
   215
//			if (newCalcHead == null) {
wneuper@2391
   216
//				throw new NotInSpecificationPhaseException();
wneuper@2391
   217
//			}
wneuper@2391
   218
//			calcHead.fillValuesfrom(newCalcHead);
wneuper@2391
   219
//		} catch (RemoteException e) {
wneuper@2391
   220
//			// TODO Auto-generated catch block
wneuper@2391
   221
//			e.printStackTrace();
wneuper@2391
   222
//		}
wneuper@2391
   223
//	}
rgradisc@1035
   224
wneuper@2065
   225
	// Delegated methods from CalcTree/Iterator
wneuper@2065
   226
	int setNextTactic(int id, Tactic tactic) throws RemoteException {
wneuper@2065
   227
		return bridgeRMI.setNextTactic(id, tactic);
wneuper@2065
   228
	}
rgradisc@1035
   229
wneuper@2065
   230
	Tactic fetchProposedTactic(int id) throws RemoteException {
wneuper@2065
   231
		return bridgeRMI.fetchProposedTactic(id);
wneuper@2065
   232
	}
wneuper@1997
   233
wneuper@2065
   234
	CalcChanged autoCalculate(int id, int scope, int nSteps)
wneuper@2065
   235
			throws RemoteException {
wneuper@2065
   236
		logger.debug("autoCalculate: id=" + id + ", scope=" + scope
wneuper@2065
   237
				+ ", nSteps=" + nSteps);
wneuper@2065
   238
		return bridgeRMI.autoCalculate(id, scope, nSteps);
wneuper@2065
   239
	}
wneuper@2002
   240
wneuper@2065
   241
	CalcChanged replaceFormula(int id, CalcFormula f) throws RemoteException {
wneuper@2065
   242
		return bridgeRMI.replaceFormula(id, f);
wneuper@2065
   243
	}
rgradisc@1035
   244
wneuper@2065
   245
	CalcChanged appendFormula(int id, CalcFormula f) throws RemoteException {
wneuper@2065
   246
		return bridgeRMI.appendFormula(id, f);
wneuper@2065
   247
	}
rgradisc@1035
   248
wneuper@2106
   249
	CalcChanged intermediateSteps(int id, ICalcIterator ci)
wneuper@2106
   250
			throws RemoteException {
wneuper@2082
   251
		return bridgeRMI.intermediateSteps(id, ci);
wneuper@2082
   252
	}
wneuper@2082
   253
wneuper@2065
   254
	Vector getElementsFromTo(int id, ICalcIterator iterator_from,
wneuper@2065
   255
			ICalcIterator iterator_to, Integer level,
wneuper@2065
   256
			boolean result_includes_tactics) throws RemoteException {
wneuper@2065
   257
		return bridgeRMI.getElementsFromTo(id, iterator_from, iterator_to,
wneuper@2065
   258
				level, result_includes_tactics);
wneuper@2065
   259
	}
rgradisc@1035
   260
wneuper@2065
   261
	Position moveActiveFormula(int calcTreeID, Position p)
wneuper@2065
   262
			throws RemoteException {
wneuper@2065
   263
		return bridgeRMI.moveActiveFormula(calcTreeID, p);
wneuper@2065
   264
	}
rgradisc@1035
   265
wneuper@2065
   266
	int iterator(int id) throws RemoteException {
wneuper@2065
   267
		logger.debug("iterator: id=" + id);
wneuper@2065
   268
		return bridgeRMI.iterator(id);
wneuper@2065
   269
	}
rgradisc@1035
   270
wneuper@2065
   271
	Position moveRoot(int calcTreeID, int iteratorID) throws RemoteException {
wneuper@2065
   272
		logger.debug("moveRoot: calcTreeID=" + calcTreeID + ", iteratorID="
wneuper@2065
   273
				+ iteratorID);
wneuper@2065
   274
		return bridgeRMI.moveRoot(calcTreeID, iteratorID);
wneuper@2065
   275
	}
rgradisc@1035
   276
wneuper@2065
   277
	Position moveUp(int calcTreeID, int iteratorID, Position p)
wneuper@2065
   278
			throws RemoteException {
wneuper@2065
   279
		return bridgeRMI.moveUp(calcTreeID, iteratorID, p);
wneuper@2065
   280
	}
wneuper@1989
   281
wneuper@2065
   282
	Position moveDown(int calcTreeID, int iteratorID, Position p)
wneuper@2065
   283
			throws RemoteException {
wneuper@2065
   284
		logger.debug("moveDown: calcTreeID=" + calcTreeID + ", sml_pos_=" + p);
wneuper@2065
   285
		return bridgeRMI.moveDown(calcTreeID, iteratorID, p);
wneuper@2065
   286
	}
rgradisc@1035
   287
wneuper@2065
   288
	Position moveLevelUp(int calcTreeID, int iteratorID, Position p)
wneuper@2065
   289
			throws RemoteException {
wneuper@2065
   290
		return bridgeRMI.moveLevelUp(calcTreeID, iteratorID, p);
wneuper@2065
   291
	}
rgradisc@1035
   292
wneuper@2065
   293
	Position moveLevelDown(int calcTreeID, int iteratorID, Position p)
wneuper@2065
   294
			throws RemoteException {
wneuper@2065
   295
		return bridgeRMI.moveLevelDown(calcTreeID, iteratorID, p);
wneuper@2065
   296
	}
rgradisc@1304
   297
wneuper@2065
   298
	Position moveCalcHead(int calcTreeID, int iteratorID, Position p)
wneuper@2065
   299
			throws RemoteException {
wneuper@2065
   300
		return bridgeRMI.moveCalcHead(calcTreeID, iteratorID, p);
wneuper@2065
   301
	}
rgradisc@1304
   302
wneuper@2065
   303
	boolean moveTactic(int calcTreeID, int iteratorID) throws RemoteException {
wneuper@2065
   304
		return bridgeRMI.moveTactic(calcTreeID, iteratorID);
wneuper@2065
   305
	}
rgradisc@1198
   306
wneuper@2065
   307
	boolean moveFormula(int calcTreeID, int iteratorID) throws RemoteException {
wneuper@2065
   308
		return bridgeRMI.moveFormula(calcTreeID, iteratorID);
wneuper@2065
   309
	}
wneuper@2065
   310
wneuper@2065
   311
	ICalcElement getElement(int calcTreeID, Position p) throws RemoteException {
wneuper@2065
   312
		return bridgeRMI.getElement(calcTreeID, p);
wneuper@2065
   313
	}
wneuper@2065
   314
wneuper@2065
   315
	/**
wneuper@2065
   316
	 * Destruct a calcTree: Gives the memory occupied by this calcTree free
wneuper@2065
   317
	 * again. Call this method when the calcTree is no longer needed. This
wneuper@2065
   318
	 * method is irreversible.
wneuper@2065
   319
	 * 
wneuper@2065
   320
	 * @param calcTreeID
wneuper@2065
   321
	 *            id of the calcTree to be destructed
wneuper@2065
   322
	 */
wneuper@2065
   323
	public boolean destruct(int calcTreeID) throws RemoteException {
wneuper@2065
   324
		return bridgeRMI.destruct(calcTreeID);
wneuper@2065
   325
	}
wneuper@2065
   326
wneuper@2065
   327
	/**
wneuper@2065
   328
	 * Save a calcTree
wneuper@2065
   329
	 * 
wneuper@2065
   330
	 * @param calcTreeID
wneuper@2065
   331
	 *            id of the calcTree to be saved
wneuper@2065
   332
	 * @return a vector containing strings, representing the status of the
wneuper@2065
   333
	 *         calcTree
wneuper@2065
   334
	 */
wneuper@2065
   335
	public Vector saveCalcTree(int calcTreeID) {
wneuper@2065
   336
		try {
wneuper@2065
   337
			return bridgeRMI.saveCalcTree(calcTreeID);
wneuper@2065
   338
		} catch (RemoteException e) {
wneuper@2065
   339
			e.printStackTrace();
wneuper@2065
   340
		}
wneuper@2065
   341
		return null;
wneuper@2065
   342
	}
wneuper@2065
   343
wneuper@2065
   344
	/**
wneuper@2065
   345
	 * Load a previously stored calcTree
wneuper@2065
   346
	 * 
wneuper@2065
   347
	 * @param v
wneuper@2065
   348
	 *            Vector: the return value of saveCalcTree
wneuper@2065
   349
	 * @return a calcTree reference
wneuper@2065
   350
	 */
wneuper@2065
   351
	public CalcTree loadCalcTree(Vector v) {
wneuper@2065
   352
		try {
wneuper@2065
   353
			int id = bridgeRMI.loadCalcTree(v);
wneuper@2065
   354
			CalcTree calcTree = new CalcTree(this, id);
wneuper@2065
   355
			calcTrees.put(new Integer(id), calcTree);
wneuper@2065
   356
			ICalcIterator hotSpot = calcTree.iterator();
wneuper@2065
   357
			// may be not first iterator (not hotspot)
wneuper@2065
   358
			((CalcIterator) hotSpot).makeHotSpot();
wneuper@2065
   359
			// make sure it is a hotspot iterator
wneuper@2065
   360
			calcTree.setHotSpot(hotSpot);
wneuper@2065
   361
			hotSpot.moveRoot();
wneuper@2065
   362
			return calcTree;
wneuper@2065
   363
		} catch (RemoteException e) {
wneuper@2065
   364
			e.printStackTrace();
wneuper@2065
   365
		}
wneuper@2065
   366
		return null;
wneuper@2065
   367
	}
wneuper@2106
   368
wneuper@2106
   369
	/**
wneuper@2106
   370
	 * @see isac.util.interfaces.ICalcIterator#getTactic()
wneuper@2106
   371
	 */
wneuper@2106
   372
	public Tactic getTactic(int id, Position pos) throws RemoteException {
wneuper@2106
   373
		return bridgeRMI.getTactic(id, pos);
wneuper@2106
   374
	}
wneuper@2106
   375
wneuper@2106
   376
	public Vector getApplicableTactics(int calcTreeID, int scope, Position pos)
wneuper@2106
   377
			throws RemoteException {
wneuper@2106
   378
		return bridgeRMI.getAppliableTactics(calcTreeID, scope, pos);
wneuper@2106
   379
	}
wneuper@2106
   380
wneuper@2106
   381
	/**
wneuper@2106
   382
	 * @see isac.util.interfaces.ICalcIterator#getAssumptions()
wneuper@2106
   383
	 */
wneuper@2106
   384
	public Assumptions getAssumptions(int id, Position pos) throws RemoteException {
wneuper@2106
   385
		return bridgeRMI.getAssumptions(id, pos);
wneuper@2106
   386
	}
wneuper@2106
   387
wneuper@2106
   388
	/**
wneuper@2106
   389
	 * @see isac.util.interfaces.ICalcIterator#getAssumptions()
wneuper@2106
   390
	 */
wneuper@2106
   391
	public Assumptions getAccumulatedAssumptions(int id, Position pos) throws RemoteException {
wneuper@2106
   392
		return bridgeRMI.getAccumulatedAssumptions(id, pos);
wneuper@2106
   393
	}
wneuper@2106
   394
wneuper@2106
   395
wneuper@2065
   396
}