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 // #83: L0.typeResource
63 TCon variable = Types.con("Simantics/Variables", "Variable");
65 TYPE_MAP.put("Variable -> Resource -> <ReadGraph> Resource",
66 Types.functionE(new Type[] {variable, Types.RESOURCE}, Types.READ_GRAPH, Types.RESOURCE));
68 add((TCon)Types.RESOURCE);
69 add(Types.con("Simantics/GUID", "GUID")); // L0.GUID
70 add(Types.con("Simantics/Variables", "StructuredProperty")); // L0.methods
71 add(Types.con("Simantics/Variables", "ValueAccessor")); // L0.ValueAccessor
72 add(Types.con("Simantics/Variables", "VariableMap"));
76 * This is very rude method for converting SCL type text to SCL type.
77 * All uses of this method should be replaced in the future by use of SCL compiler
78 * and actual lookups to dependent SCL modules
80 public static Type getType(String typeText) {
81 Type type = TYPE_MAP.get(typeText);
83 LOGGER.warn("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default.");
84 return Types.var(Kinds.STAR);
89 public static Type getType(Datatype dataType) {
90 if(dataType instanceof DoubleType)
92 else if(dataType instanceof IntegerType)
94 else if(dataType instanceof StringType)
96 else if(dataType instanceof BooleanType)
98 else if(dataType instanceof FloatType)
100 else if(dataType instanceof LongType)
102 else if(dataType instanceof ByteType)
104 else if(dataType instanceof ArrayType)
105 return Types.list(getType(((ArrayType)dataType).componentType));
107 LOGGER.warn("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default.");
108 return Types.var(Kinds.STAR);
112 public static Type getType(PropertyInfo propertyInfo) {
113 if(propertyInfo.requiredValueType != null)
114 return getType(propertyInfo.requiredValueType);
115 else if(propertyInfo.requiredDatatype != null)
116 return getType(propertyInfo.requiredDatatype);
118 LOGGER.warn(propertyInfo.name + " doesn't have type information. Returns a as default.");
119 return Types.var(Kinds.STAR);