]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java
Sync git svn branch with SVN repository r33366.
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / SCLTypeUtils.java
1 package org.simantics.modeling;\r
2 \r
3 import gnu.trove.map.hash.THashMap;\r
4 \r
5 import org.simantics.databoard.type.ArrayType;\r
6 import org.simantics.databoard.type.BooleanType;\r
7 import org.simantics.databoard.type.ByteType;\r
8 import org.simantics.databoard.type.Datatype;\r
9 import org.simantics.databoard.type.DoubleType;\r
10 import org.simantics.databoard.type.FloatType;\r
11 import org.simantics.databoard.type.IntegerType;\r
12 import org.simantics.databoard.type.LongType;\r
13 import org.simantics.databoard.type.StringType;\r
14 import org.simantics.db.layer0.request.PropertyInfo;\r
15 import org.simantics.scl.compiler.types.TCon;\r
16 import org.simantics.scl.compiler.types.Type;\r
17 import org.simantics.scl.compiler.types.Types;\r
18 import org.simantics.scl.compiler.types.kinds.Kinds;\r
19 \r
20 public class SCLTypeUtils {\r
21     private static final THashMap<String, Type> TYPE_MAP = new THashMap<String, Type>();\r
22     \r
23     private static void add(TCon type) {\r
24         TYPE_MAP.put(type.name, type);\r
25     }\r
26     \r
27     static {\r
28         add(Types.BOOLEAN);\r
29         add(Types.BYTE);\r
30         add(Types.CHARACTER);\r
31         add(Types.SHORT);\r
32         add(Types.INTEGER);\r
33         add(Types.LONG);\r
34         add(Types.FLOAT);\r
35         add(Types.DOUBLE);\r
36         add(Types.STRING);\r
37         \r
38         TYPE_MAP.put("[Boolean]", Types.list(Types.BOOLEAN));\r
39         TYPE_MAP.put("[Byte]", Types.list(Types.BYTE));\r
40         TYPE_MAP.put("[Character]", Types.list(Types.CHARACTER));\r
41         TYPE_MAP.put("[Short]", Types.list(Types.SHORT));\r
42         TYPE_MAP.put("[Integer]", Types.list(Types.INTEGER));\r
43         TYPE_MAP.put("[Long]", Types.list(Types.LONG));\r
44         TYPE_MAP.put("[Float]", Types.list(Types.FLOAT));\r
45         TYPE_MAP.put("[Double]", Types.list(Types.DOUBLE));\r
46         TYPE_MAP.put("[String]", Types.list(Types.STRING));\r
47         \r
48         TYPE_MAP.put("Vector Boolean", Types.vector(Types.BOOLEAN));\r
49         TYPE_MAP.put("Vector Byte", Types.vector(Types.BYTE));\r
50         TYPE_MAP.put("Vector Character", Types.vector(Types.CHARACTER));\r
51         TYPE_MAP.put("Vector Short", Types.vector(Types.SHORT));\r
52         TYPE_MAP.put("Vector Integer", Types.vector(Types.INTEGER));\r
53         TYPE_MAP.put("Vector Long", Types.vector(Types.LONG));\r
54         TYPE_MAP.put("Vector Float", Types.vector(Types.FLOAT));\r
55         TYPE_MAP.put("Vector Double", Types.vector(Types.DOUBLE));\r
56         TYPE_MAP.put("Vector String", Types.vector(Types.STRING));\r
57         \r
58         add(Types.BYTE_ARRAY);\r
59         add((TCon)Types.RESOURCE);\r
60         add(Types.con("Simantics/Variables", "VariableMap"));\r
61     }\r
62     \r
63     /**\r
64      * This is very rude method for converting SCL type text to SCL type.\r
65      * All uses of this method should be replaced in the future by use of SCL compiler\r
66      * and actual lookups to dependent SCL modules \r
67      */\r
68     public static Type getType(String typeText) {\r
69         Type type = TYPE_MAP.get(typeText);\r
70         if(type == null) {\r
71             System.err.println("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default.");\r
72             return Types.var(Kinds.STAR);\r
73         }\r
74         return type;\r
75     }\r
76     \r
77     public static Type getType(Datatype dataType) {\r
78         if(dataType instanceof DoubleType)\r
79             return Types.DOUBLE;\r
80         else if(dataType instanceof IntegerType)\r
81             return Types.INTEGER;\r
82         else if(dataType instanceof StringType)\r
83             return Types.STRING;\r
84         else if(dataType instanceof BooleanType)\r
85             return Types.BOOLEAN;\r
86         else if(dataType instanceof FloatType)\r
87             return Types.FLOAT;\r
88         else if(dataType instanceof LongType)\r
89             return Types.LONG;\r
90         else if(dataType instanceof ByteType)\r
91             return Types.BYTE;\r
92         else if(dataType instanceof ArrayType)\r
93             return Types.list(getType(((ArrayType)dataType).componentType));\r
94         else {\r
95             System.err.println("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default.");\r
96             return Types.var(Kinds.STAR);\r
97         }\r
98     }\r
99     \r
100     public static Type getType(PropertyInfo propertyInfo) {\r
101         if(propertyInfo.requiredValueType != null)\r
102             return getType(propertyInfo.requiredValueType);\r
103         else if(propertyInfo.requiredDatatype != null)\r
104             return getType(propertyInfo.requiredDatatype);\r
105         else {\r
106             System.err.println(propertyInfo.name + " doesn't have type information. Returns a as default.");\r
107             return Types.var(Kinds.STAR);\r
108         }\r
109     }\r
110 }\r