src/java/isac/bridge/MathEngine.java
author rgradisc
Mon, 27 Oct 2003 14:32:20 +0100
changeset 1052 9cda7aee684f
parent 1048 5d999d98a5b9
child 1074 821012b70aaf
permissions -rw-r--r--
*** empty log message ***
rgradisc@1027
     1
/*
rgradisc@1027
     2
 * Created on Oct 20, 2003
rgradisc@1027
     3
 */
rgradisc@1027
     4
package isac.bridge;
rgradisc@1027
     5
rgradisc@1035
     6
import isac.util.CalcElement;
rgradisc@1035
     7
import isac.util.ModSpec;
rgradisc@1035
     8
import isac.util.Tactic;
rgradisc@1035
     9
rgradisc@1035
    10
import java.io.Serializable;
rgradisc@1035
    11
import java.rmi.Naming;
rgradisc@1035
    12
import java.rmi.RemoteException;
rgradisc@1035
    13
rgradisc@1027
    14
/**
rgradisc@1027
    15
 * @author rgradisc
rgradisc@1027
    16
 */
rgradisc@1035
    17
public class MathEngine implements Serializable {
rgradisc@1027
    18
rgradisc@1036
    19
  private static MathEngine singleton;
rgradisc@1036
    20
rgradisc@1035
    21
  private IBridgeRMI bridgeRMI;
rgradisc@1035
    22
rgradisc@1036
    23
  // Singleton Class: private constructor
rgradisc@1036
    24
  private MathEngine(String hostName) {
rgradisc@1035
    25
    //connect to bridge    
rgradisc@1035
    26
    try {
rgradisc@1035
    27
      bridgeRMI = (IBridgeRMI)Naming.lookup("//" + hostName + "/BridgeRMI");
rgradisc@1035
    28
      System.out.println(
rgradisc@1052
    29
        "MathEngine Constr: connected to Bridge: " + bridgeRMI.toString());
rgradisc@1035
    30
      if (bridgeRMI == null)
rgradisc@1035
    31
        System.out.println("Bridge null!");
rgradisc@1035
    32
    } catch (Exception e) {
rgradisc@1048
    33
      System.out.println(
rgradisc@1048
    34
        "Could not connect to Bridge via RMI\n"
rgradisc@1048
    35
          + "Please make sure that the Bridge is running and connected");
rgradisc@1035
    36
      e.printStackTrace();
rgradisc@1035
    37
    }
rgradisc@1035
    38
    //states:= []; // only for testing: reset states for every new CalcTree
rgradisc@1035
    39
  }
rgradisc@1035
    40
rgradisc@1036
    41
  public static void init(String hostName) {
rgradisc@1036
    42
    singleton = new MathEngine(hostName);
rgradisc@1036
    43
  }
rgradisc@1048
    44
rgradisc@1036
    45
  public static MathEngine getMathEngine() {
rgradisc@1036
    46
    return singleton;
rgradisc@1036
    47
  }
rgradisc@1036
    48
rgradisc@1035
    49
  public CalcTree newCalculation(ModSpec modSpec) {
rgradisc@1035
    50
    CalcTree calcTree = null;
rgradisc@1052
    51
	System.out.println("MathEngine.newCalculation: start");
rgradisc@1052
    52
    try {      
rgradisc@1035
    53
      int id = bridgeRMI.calcTree(modSpec);
rgradisc@1035
    54
      calcTree = new CalcTree(this, id);
rgradisc@1052
    55
    } catch (RemoteException e) {      
rgradisc@1052
    56
      e.printStackTrace();
rgradisc@1035
    57
    }
rgradisc@1052
    58
	System.out.println("MathEngine.newCalculation: end");
rgradisc@1035
    59
    return calcTree;
rgradisc@1035
    60
  }
rgradisc@1035
    61
rgradisc@1035
    62
  /**
rgradisc@1035
    63
  	This is a static method to check a ModSpec object for completeness 
rgradisc@1035
    64
  	and consistency. 
rgradisc@1035
    65
  	<p>This Method may change the passed ModSpec object to hint at 
rgradisc@1035
    66
  	incomplete or contradictory specifications.
rgradisc@1035
    67
  	* @param modSpec The ModSpec to be changed
rgradisc@1035
    68
  	* @return success value: 0 == success, else no success
rgradisc@1035
    69
  	*/
rgradisc@1035
    70
  public int checkModSpec(ModSpec modSpec) {
rgradisc@1036
    71
    //TODO: implement
rgradisc@1035
    72
    try {
rgradisc@1035
    73
      return bridgeRMI.checkModSpec(modSpec);
rgradisc@1035
    74
    } catch (RemoteException e) {
rgradisc@1035
    75
      // TODO Auto-generated catch block
rgradisc@1035
    76
      e.printStackTrace();
rgradisc@1035
    77
    }
rgradisc@1035
    78
    return -1;
rgradisc@1035
    79
  }
rgradisc@1035
    80
rgradisc@1048
    81
  // Delegated methods from CalcTree/Iterator
rgradisc@1048
    82
  int calcTree(ModSpec modSpec) throws RemoteException {
rgradisc@1035
    83
    return bridgeRMI.calcTree(modSpec);
rgradisc@1035
    84
  }
rgradisc@1035
    85
rgradisc@1048
    86
  int setNextTactic(int id, Tactic tactic) throws RemoteException {
rgradisc@1035
    87
    return bridgeRMI.setNextTactic(id, tactic);
rgradisc@1035
    88
  }
rgradisc@1035
    89
rgradisc@1048
    90
  Tactic fetchProposedTactic(int id) throws RemoteException {
rgradisc@1035
    91
    return bridgeRMI.fetchProposedTactic(id);
rgradisc@1035
    92
  }
rgradisc@1035
    93
rgradisc@1048
    94
  Tactic[] fetchAppliableTactics(int id, int scope) throws RemoteException {
rgradisc@1035
    95
    return bridgeRMI.fetchAppliableTactics(id, scope);
rgradisc@1035
    96
  }
rgradisc@1035
    97
rgradisc@1048
    98
  int autoCalculate(int id, int scope, int nSteps) throws RemoteException {
rgradisc@1035
    99
    return bridgeRMI.autoCalculate(id, scope, nSteps);
rgradisc@1035
   100
  }
rgradisc@1035
   101
rgradisc@1048
   102
  int iterator(int id) throws RemoteException {
rgradisc@1035
   103
    return bridgeRMI.iterator(id);
rgradisc@1035
   104
  }
rgradisc@1035
   105
rgradisc@1048
   106
  boolean moveRoot(int calcTreeID, int iteratorID) throws RemoteException {
rgradisc@1035
   107
    return bridgeRMI.moveRoot(calcTreeID, iteratorID);
rgradisc@1035
   108
  }
rgradisc@1035
   109
rgradisc@1048
   110
  boolean moveUp(int calcTreeID, int iteratorID) throws RemoteException {
rgradisc@1035
   111
    return bridgeRMI.moveUp(calcTreeID, iteratorID);
rgradisc@1035
   112
  }
rgradisc@1035
   113
rgradisc@1048
   114
  boolean moveDown(int calcTreeID, int iteratorID) throws RemoteException {
rgradisc@1035
   115
    return bridgeRMI.moveDown(calcTreeID, iteratorID);
rgradisc@1035
   116
  }
rgradisc@1035
   117
rgradisc@1048
   118
  boolean moveLevelUp(int calcTreeID, int iteratorID) throws RemoteException {
rgradisc@1035
   119
    return bridgeRMI.moveLevelUp(calcTreeID, iteratorID);
rgradisc@1035
   120
  }
rgradisc@1035
   121
rgradisc@1048
   122
  boolean moveLevelDown(int calcTreeID, int iteratorID)
rgradisc@1035
   123
    throws RemoteException {
rgradisc@1035
   124
    return bridgeRMI.moveLevelDown(calcTreeID, iteratorID);
rgradisc@1035
   125
  }
rgradisc@1035
   126
rgradisc@1048
   127
  boolean moveTactic(int calcTreeID, int iteratorID) throws RemoteException {
rgradisc@1035
   128
    return bridgeRMI.moveTactic(calcTreeID, iteratorID);
rgradisc@1035
   129
  }
rgradisc@1035
   130
rgradisc@1048
   131
  boolean moveFormula(int calcTreeID, int iteratorID) throws RemoteException {
rgradisc@1035
   132
    return bridgeRMI.moveFormula(calcTreeID, iteratorID);
rgradisc@1035
   133
  }
rgradisc@1035
   134
rgradisc@1048
   135
  CalcElement getElement(int calcTreeID, int iteratorID)
rgradisc@1035
   136
    throws RemoteException {
rgradisc@1035
   137
    return bridgeRMI.getElement(calcTreeID, iteratorID);
rgradisc@1035
   138
  }
rgradisc@1027
   139
}