Cleaning up code for runtime, installer, RMI, compiler for the Java side
[iot2.git] / iotjava / iotruntime / master / CommunicationHandler.java
index 1026b0cbb48a8a98e1c371adf62c8862d09a2c83..6445c093e10cfae506f38385e703dd43335c930a 100644 (file)
@@ -11,14 +11,14 @@ import java.util.Set;
 /** Class CommunicationHandler is a class that maintains
  *  a data structure that preserves a collection of host name,
  *  port numbers, and objects that are running
- *  +-----------------+----+--------+------------------+--------------+----------------+
- *  | HOST-ADDRESS    | ...|IN-PORT | RMIREGISTRY-PORT | RMISTUB-PORT | ACTIVE OBJECTS |
- *  +-----------------+----+--------+------------------+--------------+----------------+
- *  | XXX.XXX.XXX.XXX |    | XXXXX  | XXXXX            | XXXXX        | XXXXXXXXXXXXXX |
- *  |                 |    | XXXXX  | XXXXX            | XXXXX        | XXXXXXXXXXXXXX |
- *  |                 |    | XXXXX  | XXXXX            | XXXXX        | XXXXXXXXXXXXXX |
- *  |                 | ...| ...    | ...              | ...          | ...            |
- *  +-----------------+----+--------+------------------+--------------+----------------+
+ *  +-----------------+----+--------+------------------+--------------+----+----------------+
+ *  | HOST-ADDRESS    | ...|IN-PORT | RMIREGISTRY-PORT | RMISTUB-PORT | ...| ACTIVE OBJECTS |
+ *  +-----------------+----+--------+------------------+--------------+----+----------------+
+ *  | XXX.XXX.XXX.XXX |    | XXXXX  | XXXXX            | XXXXX        |    | XXXXXXXXXXXXXX |
+ *  |                 |    | XXXXX  | XXXXX            | XXXXX        |    | XXXXXXXXXXXXXX |
+ *  |                 |    | XXXXX  | XXXXX            | XXXXX        |    | XXXXXXXXXXXXXX |
+ *  |                 | ...| ...    | ...              | ...          | ...| ...            |
+ *  +-----------------+----+--------+------------------+--------------+----+----------------+
  *  In this case we use ACTIVE OBJECTS names as the key
  *  So ACTIVE OBJECTS maps to numbers and these numbers map to each other
  *  entry in hashmaps (HostAddress can be repetitive)
@@ -26,19 +26,6 @@ import java.util.Set;
  *                      ProximitySensorPS1 - 1
  *                      TempSensorTS1      - 2
  *                      ...
- *       IN-PORT / RMIREGISTRY-PORT / RMISTUB-PORT / HOST-ADDRESS: 0 - XXXXX
- *                                                                 1 - XXXXX
- *                                                                 2 - XXXXX
- *  +-------------+
- *  | DEVICE-PORT |
- *  +-------------+
- *  | XXXXX       |
- *  | XXXXX       |
- *  | XXXXX       |
- *  | ...         |
- *  +-------------+
- *  We add a Set structure to handle all the other ports that are used by devices
- *  when communicating with their respective drivers
  *
  * @author      Rahmadi Trimananda <rahmadi.trimananda @ uci.edu>
  * @version     1.0
@@ -67,7 +54,7 @@ public final class CommunicationHandler {
        private Map<Integer, Integer> hmRMIRegPort;
        private Map<Integer, Integer> hmRMIStubPort;
        private Set<Integer> hsDevicePort;
-       private Set<Integer> hsCallbackPort;
+       private Map<Integer, Integer> hmAdditionalPort;
        private int iNumOfObjects;
        private int iNumOfHosts;
        private boolean bVerbose;
@@ -79,7 +66,7 @@ public final class CommunicationHandler {
        private final int INT_MIN_PORT = 10000;
 
        /**
-        * Empty constructor
+        * Constructor
         */
        public CommunicationHandler(boolean _bVerbose) {
 
@@ -96,12 +83,39 @@ public final class CommunicationHandler {
                hmRMIRegPort = new HashMap<Integer, Integer>();
                hmRMIStubPort = new HashMap<Integer, Integer>();
                hsDevicePort = new HashSet<Integer>();
-               hsCallbackPort = new HashSet<Integer>();
+               hmAdditionalPort = new HashMap<Integer, Integer>();
                iNumOfObjects = 0;
                iNumOfHosts = 0;
                bVerbose = _bVerbose;
                RuntimeOutput.print("CommunicationHandler: Creating a new CommunicationHandler object!", bVerbose);
        }
+       
+       /**
+        * Method clearCommunicationHandler()
+        * <p>
+        * Clear the data structure
+        *
+        * @return  void
+        */
+       public void clearCommunicationHandler() {
+
+               listActiveControllerObj.clear();
+               listFieldObjectID.clear();
+               listObjCrtInfo.clear();
+               listArrFieldValues.clear();
+               listArrFieldClasses.clear();
+               hmActiveObj.clear();
+               hmHostAdd.clear();
+               hmHostList.clear();
+               hmComPort.clear();
+               hmRMIRegPort.clear();
+               hmRMIStubPort.clear();
+               hsDevicePort.clear();
+               hmAdditionalPort.clear();
+               iNumOfObjects = 0;
+               iNumOfHosts = 0;
+               RuntimeOutput.print("CommunicationHandler: Clearing CommunicationHandler object's data structure!", bVerbose);
+    }
 
        /**
         * Method addPortConnection()
@@ -136,21 +150,21 @@ public final class CommunicationHandler {
                int iComPort = 0;
                do {
                        iComPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
-                       // Check port existence in HashMap
+               // Check port existence in HashMap
                } while (portIsAvailable(iComPort) == false);
                hmComPort.put(iNumOfObjects, iComPort);
 
                int iRMIRegPort = 0;
                do {
                        iRMIRegPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
-                       // Check port existence in HashMap
+               // Check port existence in HashMap
                } while (portIsAvailable(iRMIRegPort) == false);
                hmRMIRegPort.put(iNumOfObjects, iRMIRegPort);
 
                int iRMIStubPort = 0;
                do {
                        iRMIStubPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
-                       // Check port existence in HashMap
+               // Check port existence in HashMap
                } while (portIsAvailable(iRMIStubPort) == false);
                hmRMIStubPort.put(iNumOfObjects, iRMIStubPort);
 
@@ -170,7 +184,7 @@ public final class CommunicationHandler {
         * @return  void
         */
        public void addActiveControllerObject(String strFieldObjectID, String strObjName, String strObjClassName,
-               String strObjClassInterfaceName, String strIoTSlaveObjectHostAdd, Object[] arrFieldValues, 
+               String strObjClassInterfaceName, String strObjStubClsIntfaceName, String strIoTSlaveObjectHostAdd, Object[] arrFieldValues, 
                Class[] arrFieldClasses) {
 
                listActiveControllerObj.add(strObjName);
@@ -178,35 +192,10 @@ public final class CommunicationHandler {
                listArrFieldValues.add(arrFieldValues);
                listArrFieldClasses.add(arrFieldClasses);
                ObjectCreationInfo objCrtInfo = new ObjectCreationInfo(strIoTSlaveObjectHostAdd, strObjName,
-                       strObjClassName, strObjClassInterfaceName);
+                       strObjClassName, strObjClassInterfaceName, strObjStubClsIntfaceName);
                listObjCrtInfo.add(objCrtInfo);
        }
 
-
-       /**
-        * Method getCallbackPort()
-        * <p>
-        * Get a new port for new connections for callback objects in the program.
-        * This newly generated port number will be recorded.
-        *
-        * @return  int[]       A set of callback ports
-        */
-       public int[] getCallbackPorts(int numOfPorts) {
-
-               int[] ports = new int[numOfPorts];
-
-               for(int i = 0; i < numOfPorts; i++) {
-                       do {
-                               ports[i] = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
-                               // Check port existence in HashMap
-                       } while (portIsAvailable(ports[i]) == false);
-                       hsCallbackPort.add(ports[i]);
-               }
-
-               return ports;
-       }
-
-
        /**
         * Method addDevicePort()
         * <p>
@@ -219,7 +208,30 @@ public final class CommunicationHandler {
        public void addDevicePort(int iDevPort) {
 
                hsDevicePort.add(iDevPort);
+       }
+
+       /**
+        * Method addAdditionalPort()
+        * <p>
+        * Add a new port for new connections for any objects in the program.
+        * This newly generated port number will be recorded.
+        *
+        * @return  int         One new port
+        */
+       public int addAdditionalPort(String sAObject) {
+
+               hmActiveObj.put(sAObject, iNumOfObjects);
 
+               int iAdditionalPort = 0;
+               do {
+                       iAdditionalPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
+               // Check port existence in HashMap
+               } while (portIsAvailable(iAdditionalPort) == false);
+               hmAdditionalPort.put(iNumOfObjects, iAdditionalPort);
+
+               iNumOfObjects++;
+
+               return iAdditionalPort;
        }
 
        /**
@@ -240,9 +252,9 @@ public final class CommunicationHandler {
                        return false;
                } else if (hmRMIStubPort.containsValue(iPortNumber) == true) {
                        return false;
-               } else if (hsDevicePort.contains(iPortNumber) == true) {
+               } else if (hmAdditionalPort.containsValue(iPortNumber) == true) {
                        return false;
-               } else if (hsCallbackPort.contains(iPortNumber) == true) {
+               } else if (hsDevicePort.contains(iPortNumber) == true) {
                        return false;
                } else {
                        return true;
@@ -335,6 +347,19 @@ public final class CommunicationHandler {
                return hmComPort.get(hmActiveObj.get(sAObject));
        }
 
+       /**
+        * Method getAdditionalPort()
+        * <p>
+        * User finds a port number using Object name
+        *
+        * @param   sAObject  String active object name
+        * @return  Integer
+        */
+       public Integer getAdditionalPort(String sAObject) {
+
+               return hmAdditionalPort.get(hmActiveObj.get(sAObject));
+       }
+
        /**
         * Method getRMIRegPort()
         * <p>
@@ -447,13 +472,13 @@ public final class CommunicationHandler {
                                RuntimeOutput.print("Communication Port: " + hmComPort.get(iIndex), bVerbose);
                                RuntimeOutput.print("RMI Registry Port: " + hmRMIRegPort.get(iIndex), bVerbose);
                                RuntimeOutput.print("RMI Stub Port: " + hmRMIStubPort.get(iIndex), bVerbose);
+                               RuntimeOutput.print("\n", bVerbose);
                        }
                }
 
                for(int iPort : hsDevicePort) {
-
                        RuntimeOutput.print("Device Port: " + iPort, bVerbose);
-
                }
+               RuntimeOutput.print("\n", bVerbose);
        }
 }