Adjusting and cleaning up ZigbeeTest to install Vigilia ZigBee gateway and devices.
[iot2.git] / iotjava / iotrmi / Java / sample / TestClass_Skeleton.java
index a1647400bda010ae0749d4b5aff92fbf2472aded..822e0644c318090528f08697baf85a3b6f9a2198 100644 (file)
@@ -2,9 +2,8 @@ package iotrmi.Java.sample;
 
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.Set;
-import java.util.Map;
-import java.util.HashMap;
+
+import java.util.List;
 
 import iotrmi.Java.IoTRMIObject;
 import iotrmi.Java.IoTRMICall;
@@ -14,30 +13,20 @@ public class TestClass_Skeleton implements TestClassInterface {
        /**
         * Class Constants
         */
-       private int objectId = 0;       // Default value is 0
-       private static int objIdCnt = 0; // Counter for callback object Ids
-       private final static String[] methodSignatures = {
-
-               "voidsetA(int)",
-               "voidsetB(float)",
-               "voidsetC(string)",
-               "sumArray(string[])",
-               "intsetAndGetA(int)",
-               "intsetACAndGetA(string,int)",
-               "intcallBack()",
-               "voidregisterCallBack(CallBackInterface)",
-               "voidregisterCallBack(CallBackInterface[])",
-               "registercallback",
-               "handleStruct(StructJ[])",
-               "structsize"
-       };
-
        private TestClassInterface tc;
        private int port;
        private IoTRMIObject rmiObj;
+
+       // Callback stuff
+       private static int objIdCnt = 0; // Counter for callback object Ids
        private IoTRMICall rmiCall;
        private CallBackInterface cbstub;
 
+       // Object permission
+       private int object0Id = 0;
+       private static Integer[] object0Permission = { 0, 1, 2, 3, 4, 5 };
+       private List<Integer> set0Allowed;
+
 
        /**
         * Constructors
@@ -48,7 +37,8 @@ public class TestClass_Skeleton implements TestClassInterface {
 
                tc = _tc;
                port = _port;
-               rmiObj = new IoTRMIObject(_port, methodSignatures);
+               rmiObj = new IoTRMIObject(_port);
+               set0Allowed = Arrays.asList(object0Permission);
                ___waitRequestInvokeMethod();
        }
 
@@ -62,7 +52,7 @@ public class TestClass_Skeleton implements TestClassInterface {
        public void ___setA() {
 
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
+                       new Class<?>[] { null });
                setA((int) paramObj[0]);
        }
        
@@ -76,7 +66,7 @@ public class TestClass_Skeleton implements TestClassInterface {
        public void ___setB() {
 
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { float.class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
+                       new Class<?>[] { null });
                setB((float) paramObj[0]);
        }
        
@@ -90,7 +80,7 @@ public class TestClass_Skeleton implements TestClassInterface {
        public void ___setC() {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { String.class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
+                       new Class<?>[] { null });
                setC((String) paramObj[0]);
        }
        
@@ -101,11 +91,12 @@ public class TestClass_Skeleton implements TestClassInterface {
        }
        
        
-       public String ___sumArray() {
+       public void ___sumArray() throws IOException {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { String[].class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
-               return sumArray((String[]) paramObj[0]);
+                       new Class<?>[] { null });
+               Object retObj = sumArray((String[]) paramObj[0]);
+               rmiObj.sendReturnObj(retObj);
        }
        
        
@@ -115,11 +106,12 @@ public class TestClass_Skeleton implements TestClassInterface {
        }
        
        
-       public int ___setAndGetA() {
+       public void ___setAndGetA() throws IOException {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
-               return setAndGetA((int) paramObj[0]);
+                       new Class<?>[] { null });
+               Object retObj = setAndGetA((int) paramObj[0]);
+               rmiObj.sendReturnObj(retObj);
        }
        
        
@@ -129,11 +121,12 @@ public class TestClass_Skeleton implements TestClassInterface {
        }
        
        
-       public int ___setACAndGetA() {
+       public void ___setACAndGetA() throws IOException {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { String.class, int.class }, 
-                       new Class<?>[] { null, null }, new Class<?>[] { null, null });
-               return setACAndGetA((String) paramObj[0], (int) paramObj[1]);
+                       new Class<?>[] { null, null });
+               Object retObj = setACAndGetA((String) paramObj[0], (int) paramObj[1]);
+               rmiObj.sendReturnObj(retObj);
        }
        
        
@@ -146,7 +139,7 @@ public class TestClass_Skeleton implements TestClassInterface {
        public void ___registerCallback() throws IOException {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class, String.class, int.class }, 
-                       new Class<?>[] { null, null, null }, new Class<?>[] { null, null, null });
+                       new Class<?>[] { null, null, null });
                CallBackInterface cbstub = new CallBack_Stub((int) paramObj[0], (String) paramObj[1], (int) paramObj[2]);
                registerCallback((CallBackInterface) cbstub);
        }
@@ -162,7 +155,7 @@ public class TestClass_Skeleton implements TestClassInterface {
        public void ____registerCallback() throws IOException {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
+                       new Class<?>[] { null });
                int numStubs = (int) paramObj[0];
                CallBackInterface[] stub = new CallBackInterface[numStubs];
                for (int objId = 0; objId < numStubs; objId++) {
@@ -176,9 +169,9 @@ public class TestClass_Skeleton implements TestClassInterface {
        public void ___regCB() throws IOException {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class, String.class, int.class }, 
-                       new Class<?>[] { null, null, null }, new Class<?>[] { null, null, null });
-               String[] methodSignatures = CallBack_CBStub.getMethodSignatures();
-               rmiCall = new IoTRMICall((int) paramObj[0], (String) paramObj[1], (int) paramObj[2], methodSignatures);
+                       new Class<?>[] { null, null, null });
+               //String[] methodSignatures = CallBack_CBStub.getMethodSignatures();
+               rmiCall = new IoTRMICall((int) paramObj[0], (String) paramObj[1], (int) paramObj[2]);
                System.out.println("Creating a new IoTRMICall object");
        }
        
@@ -189,45 +182,42 @@ public class TestClass_Skeleton implements TestClassInterface {
        }
        
        
-       public int ___callBack() {
+       public void ___callBack() throws IOException {
                
-               return callBack();
+               Object retObj = callBack();
+               rmiObj.sendReturnObj(retObj);
        }
        
 
-       public void handleStruct(StructJ[] data) {
+       public StructJ[] handleStruct(StructJ[] data) {
 
-               tc.handleStruct(data);
+               return tc.handleStruct(data);
        }
        
        
        public int ___structSize() {
                
                Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class }, 
-                       new Class<?>[] { null }, new Class<?>[] { null });
-               return (int) paramObj[0];               
+                       new Class<?>[] { null });
+               return (int) paramObj[0];
        }
        
        
-       public void ___handleStruct(int structsize1) {
+       public void ___handleStruct(int structsize1) throws IOException {
 
                Class<?>[] paramCls = new Class<?>[3*structsize1];
-               Class<?>[] paramClsTyp1 = new Class<?>[3*structsize1];
-               Class<?>[] paramClsTyp2 = new Class<?>[3*structsize1];
+               Class<?>[] paramClsVal = new Class<?>[3*structsize1];
                int pos = 0;
                for(int i=0; i < structsize1; i++) {
                        paramCls[pos] = String.class;
-                       paramClsTyp1[pos] = null;
-                       paramClsTyp2[pos++] = null;
+                       paramClsVal[pos++] = null;
                        paramCls[pos] = float.class;
-                       paramClsTyp1[pos] = null;
-                       paramClsTyp2[pos++] = null;
+                       paramClsVal[pos++] = null;
                        paramCls[pos] = int.class;
-                       paramClsTyp1[pos] = null;
-                       paramClsTyp2[pos++] = null;
+                       paramClsVal[pos++] = null;
                }
                Object[] paramObj = rmiObj.getMethodParams(paramCls, 
-                       paramClsTyp1, paramClsTyp2);
+                       paramClsVal);
                StructJ[] data = new StructJ[structsize1];
                for (int i=0; i < structsize1; i++) {
                        data[i] = new StructJ();
@@ -238,65 +228,108 @@ public class TestClass_Skeleton implements TestClassInterface {
                        data[i].value = (float) paramObj[pos++];
                        data[i].year = (int) paramObj[pos++];
                }
-               tc.handleStruct(data);
+               // Just the following if there is no returned value
+               //tc.handleStruct(data);
+               StructJ[] retStruct = tc.handleStruct(data);
+               // Return length first
+               int structsize2 = retStruct.length;
+               Object retObj = structsize2;
+               rmiObj.sendReturnObj(retObj);           
+               // Send the actual struct members
+               // Calculate the size of the array
+               Class<?>[] retCls = new Class<?>[3*structsize2];
+               Object[] retObj2 = new Object[3*structsize2];
+               // Handle with for loop
+               pos = 0;
+               for(int i = 0; i < structsize2; i++) {
+                       retCls[pos] = String.class;
+                       retObj2[pos++] = data[i].name;
+                       retCls[pos] = float.class;
+                       retObj2[pos++] = data[i].value;
+                       retCls[pos] = int.class;
+                       retObj2[pos++] = data[i].year;
+               }
+               rmiObj.sendReturnObj(retCls, retObj2);
+       }
+
+
+       public EnumJ[] handleEnum(EnumJ[] en) {
+
+               return tc.handleEnum(en);
+       }
+
+
+       public void ___handleEnum() throws IOException {
+
+               Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int[].class }, 
+                       new Class<?>[] { null }); 
+               // Encoder/decoder
+               int paramInt[] = (int[]) paramObj[0];
+               int enumSize1 = paramInt.length;
+               EnumJ[] enumJ = EnumJ.values();
+               EnumJ[] data = new EnumJ[enumSize1];
+               for (int i=0; i < enumSize1; i++) {
+                       data[i] = enumJ[paramInt[i]];
+               }
+               // if void, just "handleEnum(data)"
+               // this is when we have return value EnumJ[]
+               EnumJ[] retEnum = handleEnum(data);
+               // Get length first
+               int enumSize2 = retEnum.length;
+               // Now send the array of integers
+               int[] retEnumInt = new int[enumSize2];
+               for (int i=0; i < enumSize2; i++) {
+                       retEnumInt[i] = retEnum[i].ordinal();
+               }
+               Object retObj = retEnumInt;
+               rmiObj.sendReturnObj(retObj);
        }
        
 
        private void ___waitRequestInvokeMethod() throws IOException {
 
                // Struct size
-               int structsize1 = 0;
+               int structSize1 = 0;
+               int enumSize1 = 0;
                // Loop continuously waiting for incoming bytes
                while (true) {
 
                        rmiObj.getMethodBytes();
                        int _objectId = rmiObj.getObjectId();
-                       if (_objectId == objectId) {
+                       int methodId = rmiObj.getMethodId();
+                       if (_objectId == object0Id) {
                        // Multiplex based on object Id
-                               String methodSign = rmiObj.getSignature();
-                               Object retObj = null;
-                               if (methodSign.equals("voidsetA(int)")) {
-                                       ___setA();
-                               } else if (methodSign.equals("voidsetB(float)")) {
-                                       ___setB();
-                               } else if (methodSign.equals("voidsetC(string)")) {
-                                       ___setC();
-                               } else if (methodSign.equals("sumArray(string[])")) {
-                                       retObj = ___sumArray();
-                               } else if (methodSign.equals("intsetAndGetA(int)")) {
-                                       retObj = ___setAndGetA();
-                               } else if (methodSign.equals("intsetACAndGetA(string,int)")) {
-                                       retObj = ___setACAndGetA();
-                               } else if (methodSign.equals("voidregisterCallBack(CallBackInterface)")) {
-                                       ___registerCallback();
-                               } else if (methodSign.equals("voidregisterCallBack(CallBackInterface[])")) {
-                                       ____registerCallback();
-                               } else if (methodSign.equals("intcallBack()")) {
-                                       retObj = ___callBack();
+                               // Complain if the method is not allowed
+                               if (!set0Allowed.contains(methodId))
+                                       throw new Error("TestClass_Skeleton: This object is not allowed to access method " + methodId);
+                       // If we have more than 1 object Id...
+                       //else if (_objectId == object1Id) {
+
+                       } else
+                               throw new Error("TestClass_Skeleton: Unrecognizable object Id: " + _objectId);
+
+                       switch (methodId) {
+
+                               case 0: ___setA(); break;
+                               case 1: ___setB(); break;
+                               case 2: ___setC(); break;
+                               case 3: ___sumArray(); break;
+                               case 4: ___setAndGetA(); break;
+                               case 5: ___setACAndGetA(); break;
+                               case 6: ___callBack(); break; 
+                               case 7: ___registerCallback(); break;
+                               case 8: ____registerCallback(); break;
                                // Special option to register callback
-                               } else if (methodSign.equals("registercallback")) {
-                                       ___regCB();
+                               case 9: ___regCB(); break;
                                // Struct handling (3 is the size of the struct)
-                               } else if (methodSign.equals("structsize")) {
-                                       structsize1 = ___structSize();
-                               } else if (methodSign.equals("handleStruct(StructJ[])")) {
-                                       ___handleStruct(structsize1);
-                               } else
-                                       throw new Error("Signature not recognized!");
-
-                               if (retObj != null) {
-                                       rmiObj.sendReturnObj(retObj);
-                               }
-                               System.out.println("Servicing remote call for object: " + objectId + " - method: " + methodSign);
+                               case 10: ___handleStruct(structSize1); break;
+                               case 11: structSize1 = ___structSize(); break;
+                               case 12: ___handleEnum(); break;
+                               default:
+                                       throw new Error("Method Id " + methodId + " not recognized!");
                        }
-               }
-       }
-
-
-       // Return method signatures
-       public static String[] getMethodSignatures() {
 
-               return methodSignatures;
+               }
        }
        
        
@@ -306,51 +339,5 @@ public class TestClass_Skeleton implements TestClassInterface {
                TestClass tc = new TestClass(3, 5f, "7911");
                TestClass_Skeleton tcSkel = new TestClass_Skeleton(tc, port);
 
-/*             String[] methodSignatures = TestClass_CBSkeleton.getMethodSignatures();
-               IoTRMIObject rmiObj = new IoTRMIObject(port, methodSignatures);
-               Map<Integer,TestClassInterface> mapCBObject = new HashMap<Integer,TestClassInterface>();
-
-               // Can replace for-loop with while-loop if necessary
-               for (int i = 1; i < 3; i++) {
-                       TestClassInterface tcSkel = new TestClass_CBSkeleton(tc, i);
-                       mapCBObject.put(i, tcSkel);
-               }
-
-               Object retObj = null;
-               while (true) {
-                       byte[] method = rmiObj.getMethodBytes();
-                       int objId = IoTRMIObject.getObjectId(method);
-                       TestClass_CBSkeleton tcSkel = (TestClass_CBSkeleton) mapCBObject.get(objId);
-                       if (tcSkel != null) {
-                               rmiObj.setMethodBytes(method);
-                               retObj = tcSkel.invokeMethod(rmiObj);
-                       }
-                       if (retObj != null) {
-                               rmiObj.sendReturnObj(retObj);
-                       }
-               }
-*/
-               //int objectId = 1;
-               //System.out.println("Creating 0 object");
-               //TestClass_Skeleton tcSkel1 = new TestClass_Skeleton(tc, rmiObj, objectId);
-               //System.out.println("Creating 1 object");
-               //objectId = 2;
-               //TestClass_Skeleton tcSkel2 = new TestClass_Skeleton(tc, rmiObj, objectId);
-               //System.out.println("Creating 2 object");
-
-               /*for (int i = 1; i < 3; i++) {
-                       final int objectId = i;
-                       Thread thread = new Thread() {
-                               public void run() {
-                               try{
-                                               TestClass_Skeleton tcSkel = new TestClass_Skeleton(tc, rmiObj, objectId);
-                                       } catch (Exception ex){
-                                               ex.printStackTrace();
-                                               throw new Error("Error instantiating class CallBack_Skeleton!");
-                               }
-                           }
-                       };
-                       thread.start();
-               }*/
        }
 }