1 package org.simantics.modeling;
3 import gnu.trove.map.hash.THashMap;
5 import org.simantics.databoard.type.ArrayType;
6 import org.simantics.databoard.type.BooleanType;
7 import org.simantics.databoard.type.ByteType;
8 import org.simantics.databoard.type.Datatype;
9 import org.simantics.databoard.type.DoubleType;
10 import org.simantics.databoard.type.FloatType;
11 import org.simantics.databoard.type.IntegerType;
12 import org.simantics.databoard.type.LongType;
13 import org.simantics.databoard.type.StringType;
14 import org.simantics.db.layer0.request.PropertyInfo;
15 import org.simantics.scl.compiler.types.TCon;
16 import org.simantics.scl.compiler.types.Type;
17 import org.simantics.scl.compiler.types.Types;
18 import org.simantics.scl.compiler.types.kinds.Kinds;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
22 public class SCLTypeUtils {
23 private static final Logger LOGGER = LoggerFactory.getLogger(SCLTypeUtils.class);
24 private static final THashMap<String, Type> TYPE_MAP = new THashMap<String, Type>();
26 private static void add(TCon type) {
27 TYPE_MAP.put(type.name, type);
41 TYPE_MAP.put("[Boolean]", Types.list(Types.BOOLEAN));
42 TYPE_MAP.put("[Byte]", Types.list(Types.BYTE));
43 TYPE_MAP.put("[Character]", Types.list(Types.CHARACTER));
44 TYPE_MAP.put("[Short]", Types.list(Types.SHORT));
45 TYPE_MAP.put("[Integer]", Types.list(Types.INTEGER));
46 TYPE_MAP.put("[Long]", Types.list(Types.LONG));
47 TYPE_MAP.put("[Float]", Types.list(Types.FLOAT));
48 TYPE_MAP.put("[Double]", Types.list(Types.DOUBLE));
49 TYPE_MAP.put("[String]", Types.list(Types.STRING));
51 TYPE_MAP.put("Vector Boolean", Types.vector(Types.BOOLEAN));
52 TYPE_MAP.put("Vector Byte", Types.vector(Types.BYTE));
53 TYPE_MAP.put("Vector Character", Types.vector(Types.CHARACTER));
54 TYPE_MAP.put("Vector Short", Types.vector(Types.SHORT));
55 TYPE_MAP.put("Vector Integer", Types.vector(Types.INTEGER));
56 TYPE_MAP.put("Vector Long", Types.vector(Types.LONG));
57 TYPE_MAP.put("Vector Float", Types.vector(Types.FLOAT));
58 TYPE_MAP.put("Vector Double", Types.vector(Types.DOUBLE));
59 TYPE_MAP.put("Vector String", Types.vector(Types.STRING));
60 TYPE_MAP.put("ByteArray", Types.BYTE_ARRAY);
62 add((TCon)Types.RESOURCE);
63 add(Types.con("Simantics/GUID", "GUID")); // L0.GUID
64 add(Types.con("Simantics/Variables", "StructuredProperty")); // L0.methods
65 add(Types.con("Simantics/Variables", "ValueAccessor")); // L0.ValueAccessor
66 add(Types.con("Simantics/Variables", "VariableMap"));
70 * This is very rude method for converting SCL type text to SCL type.
71 * All uses of this method should be replaced in the future by use of SCL compiler
72 * and actual lookups to dependent SCL modules
74 public static Type getType(String typeText) {
75 Type type = TYPE_MAP.get(typeText);
77 LOGGER.warn("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default.");
78 return Types.var(Kinds.STAR);
83 public static Type getType(Datatype dataType) {
84 if(dataType instanceof DoubleType)
86 else if(dataType instanceof IntegerType)
88 else if(dataType instanceof StringType)
90 else if(dataType instanceof BooleanType)
92 else if(dataType instanceof FloatType)
94 else if(dataType instanceof LongType)
96 else if(dataType instanceof ByteType)
98 else if(dataType instanceof ArrayType)
99 return Types.list(getType(((ArrayType)dataType).componentType));
101 LOGGER.warn("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default.");
102 return Types.var(Kinds.STAR);
106 public static Type getType(PropertyInfo propertyInfo) {
107 if(propertyInfo.requiredValueType != null)
108 return getType(propertyInfo.requiredValueType);
109 else if(propertyInfo.requiredDatatype != null)
110 return getType(propertyInfo.requiredDatatype);
112 LOGGER.warn(propertyInfo.name + " doesn't have type information. Returns a as default.");
113 return Types.var(Kinds.STAR);