]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java
Add utility class org.simantics.modeling.help.HelpContexts
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / SCLTypeUtils.java
index 2672272012b1c177d7ad597169a0f2e1e86ce65e..eeabbd960b4e6583bc0a05d35d2b89998e5f8883 100644 (file)
-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
+package org.simantics.modeling;
+
+import gnu.trove.map.hash.THashMap;
+
+import org.simantics.databoard.type.ArrayType;
+import org.simantics.databoard.type.BooleanType;
+import org.simantics.databoard.type.ByteType;
+import org.simantics.databoard.type.Datatype;
+import org.simantics.databoard.type.DoubleType;
+import org.simantics.databoard.type.FloatType;
+import org.simantics.databoard.type.IntegerType;
+import org.simantics.databoard.type.LongType;
+import org.simantics.databoard.type.StringType;
+import org.simantics.db.layer0.request.PropertyInfo;
+import org.simantics.scl.compiler.types.TCon;
+import org.simantics.scl.compiler.types.TVar;
+import org.simantics.scl.compiler.types.Type;
+import org.simantics.scl.compiler.types.Types;
+import org.simantics.scl.compiler.types.kinds.Kinds;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SCLTypeUtils {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SCLTypeUtils.class);
+    private static final THashMap<String, Type> TYPE_MAP = new THashMap<String, Type>();
+    
+    private static final TVar STAR = Types.var(Kinds.STAR);
+    
+    private static void add(TCon type) {
+        TYPE_MAP.put(type.name, type);
+    }
+    
+    static {
+        add(Types.BOOLEAN);
+        add(Types.BYTE);
+        add(Types.CHARACTER);
+        add(Types.SHORT);
+        add(Types.INTEGER);
+        add(Types.LONG);
+        add(Types.FLOAT);
+        add(Types.DOUBLE);
+        add(Types.STRING);
+        
+        TYPE_MAP.put("[Boolean]", Types.list(Types.BOOLEAN));
+        TYPE_MAP.put("[Byte]", Types.list(Types.BYTE));
+        TYPE_MAP.put("[Character]", Types.list(Types.CHARACTER));
+        TYPE_MAP.put("[Short]", Types.list(Types.SHORT));
+        TYPE_MAP.put("[Integer]", Types.list(Types.INTEGER));
+        TYPE_MAP.put("[Long]", Types.list(Types.LONG));
+        TYPE_MAP.put("[Float]", Types.list(Types.FLOAT));
+        TYPE_MAP.put("[Double]", Types.list(Types.DOUBLE));
+        TYPE_MAP.put("[String]", Types.list(Types.STRING));
+        
+        TYPE_MAP.put("Vector Boolean", Types.vector(Types.BOOLEAN));
+        TYPE_MAP.put("Vector Byte", Types.vector(Types.BYTE));
+        TYPE_MAP.put("Vector Character", Types.vector(Types.CHARACTER));
+        TYPE_MAP.put("Vector Short", Types.vector(Types.SHORT));
+        TYPE_MAP.put("Vector Integer", Types.vector(Types.INTEGER));
+        TYPE_MAP.put("Vector Long", Types.vector(Types.LONG));
+        TYPE_MAP.put("Vector Float", Types.vector(Types.FLOAT));
+        TYPE_MAP.put("Vector Double", Types.vector(Types.DOUBLE));
+        TYPE_MAP.put("Vector String", Types.vector(Types.STRING));
+        TYPE_MAP.put("ByteArray", Types.BYTE_ARRAY);
+
+        // #83: L0.typeResource
+        TCon variable = Types.con("Simantics/Variables", "Variable");
+        add(variable);
+        TYPE_MAP.put("Variable -> Resource -> <ReadGraph> Resource",
+                Types.functionE(new Type[] {variable, Types.RESOURCE}, Types.READ_GRAPH, Types.RESOURCE));
+
+        add((TCon)Types.RESOURCE);
+        add(Types.con("Simantics/ChangeInformation", "ChangeInformation")); // MOD.ChangeInformation
+        add(Types.con("Simantics/GUID", "GUID")); // L0.GUID
+        add(Types.con("Simantics/Variables", "StructuredProperty")); // L0.methods
+        add(Types.con("Simantics/Variables", "ValueAccessor")); // L0.ValueAccessor
+        add(Types.con("Simantics/Variables", "VariableMap"));
+    }
+    
+    /**
+     * This is very rude method for converting SCL type text to SCL type.
+     * All uses of this method should be replaced in the future by use of SCL compiler
+     * and actual lookups to dependent SCL modules 
+     */
+    public static Type getType(String typeText) {
+        Type type = TYPE_MAP.get(typeText);
+        if(type == null) {
+            LOGGER.warn("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default.");
+            return STAR;
+        }
+        return type;
+    }
+    
+    public static Type getType(Datatype dataType) {
+        if(dataType instanceof DoubleType)
+            return Types.DOUBLE;
+        else if(dataType instanceof IntegerType)
+            return Types.INTEGER;
+        else if(dataType instanceof StringType)
+            return Types.STRING;
+        else if(dataType instanceof BooleanType)
+            return Types.BOOLEAN;
+        else if(dataType instanceof FloatType)
+            return Types.FLOAT;
+        else if(dataType instanceof LongType)
+            return Types.LONG;
+        else if(dataType instanceof ByteType)
+            return Types.BYTE;
+        else if(dataType instanceof ArrayType)
+            return Types.list(getType(((ArrayType)dataType).componentType));
+        else {
+            LOGGER.warn("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default.");
+            return STAR;
+        }
+    }
+    
+    public static Type getType(PropertyInfo propertyInfo, boolean warnOfNoTypeInformation) {
+        if(propertyInfo.requiredValueType != null)
+            return getType(propertyInfo.requiredValueType);
+        else if(propertyInfo.requiredDatatype != null)
+            return getType(propertyInfo.requiredDatatype);
+        else {
+            if (warnOfNoTypeInformation)
+                LOGGER.warn(propertyInfo.name + " doesn't have type information. Returns a as default.");
+            return STAR;
+        }
+    }
+    
+    public static Type getType(PropertyInfo propertyInfo) {
+        return getType(propertyInfo, propertyInfo.isHasProperty);
+    }
+}