1 package org.simantics.modeling;
\r
3 import gnu.trove.map.hash.THashMap;
\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
20 public class SCLTypeUtils {
\r
21 private static final THashMap<String, Type> TYPE_MAP = new THashMap<String, Type>();
\r
23 private static void add(TCon type) {
\r
24 TYPE_MAP.put(type.name, type);
\r
30 add(Types.CHARACTER);
\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
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
58 add(Types.BYTE_ARRAY);
\r
59 add((TCon)Types.RESOURCE);
\r
60 add(Types.con("Simantics/Variables", "VariableMap"));
\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
68 public static Type getType(String typeText) {
\r
69 Type type = TYPE_MAP.get(typeText);
\r
71 System.err.println("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default.");
\r
72 return Types.var(Kinds.STAR);
\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
88 else if(dataType instanceof LongType)
\r
90 else if(dataType instanceof ByteType)
\r
92 else if(dataType instanceof ArrayType)
\r
93 return Types.list(getType(((ArrayType)dataType).componentType));
\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
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
106 System.err.println(propertyInfo.name + " doesn't have type information. Returns a as default.");
\r
107 return Types.var(Kinds.STAR);
\r