]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / SCLTypeUtils.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java
new file mode 100644 (file)
index 0000000..2672272
--- /dev/null
@@ -0,0 +1,110 @@
+package org.simantics.modeling;\r
+\r
+import gnu.trove.map.hash.THashMap;\r
+\r
+import org.simantics.databoard.type.ArrayType;\r
+import org.simantics.databoard.type.BooleanType;\r
+import org.simantics.databoard.type.ByteType;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.databoard.type.DoubleType;\r
+import org.simantics.databoard.type.FloatType;\r
+import org.simantics.databoard.type.IntegerType;\r
+import org.simantics.databoard.type.LongType;\r
+import org.simantics.databoard.type.StringType;\r
+import org.simantics.db.layer0.request.PropertyInfo;\r
+import org.simantics.scl.compiler.types.TCon;\r
+import org.simantics.scl.compiler.types.Type;\r
+import org.simantics.scl.compiler.types.Types;\r
+import org.simantics.scl.compiler.types.kinds.Kinds;\r
+\r
+public class SCLTypeUtils {\r
+    private static final THashMap<String, Type> TYPE_MAP = new THashMap<String, Type>();\r
+    \r
+    private static void add(TCon type) {\r
+        TYPE_MAP.put(type.name, type);\r
+    }\r
+    \r
+    static {\r
+        add(Types.BOOLEAN);\r
+        add(Types.BYTE);\r
+        add(Types.CHARACTER);\r
+        add(Types.SHORT);\r
+        add(Types.INTEGER);\r
+        add(Types.LONG);\r
+        add(Types.FLOAT);\r
+        add(Types.DOUBLE);\r
+        add(Types.STRING);\r
+        \r
+        TYPE_MAP.put("[Boolean]", Types.list(Types.BOOLEAN));\r
+        TYPE_MAP.put("[Byte]", Types.list(Types.BYTE));\r
+        TYPE_MAP.put("[Character]", Types.list(Types.CHARACTER));\r
+        TYPE_MAP.put("[Short]", Types.list(Types.SHORT));\r
+        TYPE_MAP.put("[Integer]", Types.list(Types.INTEGER));\r
+        TYPE_MAP.put("[Long]", Types.list(Types.LONG));\r
+        TYPE_MAP.put("[Float]", Types.list(Types.FLOAT));\r
+        TYPE_MAP.put("[Double]", Types.list(Types.DOUBLE));\r
+        TYPE_MAP.put("[String]", Types.list(Types.STRING));\r
+        \r
+        TYPE_MAP.put("Vector Boolean", Types.vector(Types.BOOLEAN));\r
+        TYPE_MAP.put("Vector Byte", Types.vector(Types.BYTE));\r
+        TYPE_MAP.put("Vector Character", Types.vector(Types.CHARACTER));\r
+        TYPE_MAP.put("Vector Short", Types.vector(Types.SHORT));\r
+        TYPE_MAP.put("Vector Integer", Types.vector(Types.INTEGER));\r
+        TYPE_MAP.put("Vector Long", Types.vector(Types.LONG));\r
+        TYPE_MAP.put("Vector Float", Types.vector(Types.FLOAT));\r
+        TYPE_MAP.put("Vector Double", Types.vector(Types.DOUBLE));\r
+        TYPE_MAP.put("Vector String", Types.vector(Types.STRING));\r
+        \r
+        add(Types.BYTE_ARRAY);\r
+        add((TCon)Types.RESOURCE);\r
+        add(Types.con("Simantics/Variables", "VariableMap"));\r
+    }\r
+    \r
+    /**\r
+     * This is very rude method for converting SCL type text to SCL type.\r
+     * All uses of this method should be replaced in the future by use of SCL compiler\r
+     * and actual lookups to dependent SCL modules \r
+     */\r
+    public static Type getType(String typeText) {\r
+        Type type = TYPE_MAP.get(typeText);\r
+        if(type == null) {\r
+            System.err.println("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default.");\r
+            return Types.var(Kinds.STAR);\r
+        }\r
+        return type;\r
+    }\r
+    \r
+    public static Type getType(Datatype dataType) {\r
+        if(dataType instanceof DoubleType)\r
+            return Types.DOUBLE;\r
+        else if(dataType instanceof IntegerType)\r
+            return Types.INTEGER;\r
+        else if(dataType instanceof StringType)\r
+            return Types.STRING;\r
+        else if(dataType instanceof BooleanType)\r
+            return Types.BOOLEAN;\r
+        else if(dataType instanceof FloatType)\r
+            return Types.FLOAT;\r
+        else if(dataType instanceof LongType)\r
+            return Types.LONG;\r
+        else if(dataType instanceof ByteType)\r
+            return Types.BYTE;\r
+        else if(dataType instanceof ArrayType)\r
+            return Types.list(getType(((ArrayType)dataType).componentType));\r
+        else {\r
+            System.err.println("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default.");\r
+            return Types.var(Kinds.STAR);\r
+        }\r
+    }\r
+    \r
+    public static Type getType(PropertyInfo propertyInfo) {\r
+        if(propertyInfo.requiredValueType != null)\r
+            return getType(propertyInfo.requiredValueType);\r
+        else if(propertyInfo.requiredDatatype != null)\r
+            return getType(propertyInfo.requiredDatatype);\r
+        else {\r
+            System.err.println(propertyInfo.name + " doesn't have type information. Returns a as default.");\r
+            return Types.var(Kinds.STAR);\r
+        }\r
+    }\r
+}\r