diff src/main/gov/nasa/jpf/util/json/CreatorsFactory.java @ 0:61d41facf527

initial v8 import (history reset)
author Peter Mehlitz <Peter.C.Mehlitz@nasa.gov>
date Fri, 23 Jan 2015 10:14:01 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/gov/nasa/jpf/util/json/CreatorsFactory.java	Fri Jan 23 10:14:01 2015 -0800
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2014, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All rights reserved.
+ *
+ * The Java Pathfinder core (jpf-core) platform is licensed under the
+ * Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0. 
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package gov.nasa.jpf.util.json;
+
+import gov.nasa.jpf.vm.ElementInfo;
+import gov.nasa.jpf.vm.MJIEnv;
+
+import java.util.HashMap;
+
+public class CreatorsFactory {
+
+  static private final HashMap<String, Creator> creatorsTable = new HashMap<String, Creator>();
+
+  static {
+    creatorsTable.put("java.lang.Boolean", new BoxedBoolCreator());
+    creatorsTable.put("java.lang.Byte", new BoxedByteCreator());
+    creatorsTable.put("java.lang.Short", new BoxedShortCreator());
+    creatorsTable.put("java.lang.Integer", new BoxedIntCreator());
+    creatorsTable.put("java.lang.Long", new BoxedLongCreator());
+    creatorsTable.put("java.lang.Float", new BoxedFloatCreator());
+    creatorsTable.put("java.lang.Double", new BoxedDoubleCreator());
+    creatorsTable.put("java.lang.String", new StringCreator());
+  }
+
+  public static Creator getCreator(String typeName) {
+
+    return creatorsTable.get(typeName);
+  }
+}
+
+
+class BoxedBoolCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Boolean read = value.getBoolean();
+    int boolRef = MJIEnv.NULL;
+
+    if (read != null) {
+      boolRef = env.newObject("java.lang.Boolean");
+      ElementInfo ei = env.getModifiableElementInfo(boolRef);
+      ei.setBooleanField("value", (read == true));
+    }
+
+    return boolRef;
+  }
+}
+
+class BoxedByteCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Double read = value.getDouble();
+    int byteRef = MJIEnv.NULL;
+
+    if (read != null) {
+      byteRef = env.newObject("java.lang.Byte");
+      ElementInfo ei = env.getModifiableElementInfo(byteRef);
+      ei.setByteField("value", read.byteValue());
+    }
+
+    return byteRef;
+  }
+}
+
+class BoxedShortCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Double read = value.getDouble();
+    int shortRef = MJIEnv.NULL;
+
+    if (read != null) {
+      shortRef = env.newObject("java.lang.Short");
+      ElementInfo ei = env.getModifiableElementInfo(shortRef);
+      ei.setShortField("value", read.shortValue());
+    }
+
+    return shortRef;
+  }
+}
+
+class BoxedIntCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Double read = value.getDouble();
+    int intRef = MJIEnv.NULL;
+
+    if (read != null) {
+      intRef = env.newObject("java.lang.Integer");
+      ElementInfo ei = env.getModifiableElementInfo(intRef);
+      ei.setIntField("value", read.intValue());
+    }
+
+    return intRef;
+  }
+}
+
+class BoxedLongCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Double read = value.getDouble();
+    int longRef = MJIEnv.NULL;
+
+    if (read != null) {
+      longRef = env.newObject("java.lang.Long");
+      ElementInfo ei = env.getModifiableElementInfo(longRef);
+      ei.setLongField("value", read.longValue());
+    }
+
+    return longRef;
+  }
+}
+
+class BoxedFloatCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Double read = value.getDouble();
+    int floatRef = MJIEnv.NULL;
+
+    if (read != null) {
+      floatRef = env.newObject("java.lang.Float");
+      ElementInfo ei = env.getModifiableElementInfo(floatRef);
+      ei.setFloatField("value", read.floatValue());
+    }
+
+    return floatRef;
+  }
+}
+
+class BoxedDoubleCreator implements Creator {
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    Double read = value.getDouble();
+    int doubleRef = MJIEnv.NULL;
+
+    if (read != null) {
+      doubleRef = env.newObject("java.lang.Double");
+      ElementInfo ei = env.getModifiableElementInfo(doubleRef);
+      ei.setDoubleField("value", read.doubleValue());
+    }
+
+    return doubleRef;
+  }
+}
+
+class StringCreator implements Creator {
+
+  @Override
+  public int create(MJIEnv env, String typeName, Value value) {
+    String strVal = value.getString();
+    int stringRef = MJIEnv.NULL;
+
+    if (strVal != null) {
+      stringRef = env.newString(strVal);
+    }
+
+    return stringRef;
+  }
+}