--- /dev/null
+package org.simantics.db.common.validation;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.layer0.Layer0;\r
+\r
+public class L0Validations {\r
+\r
+ public static String checkValueType(ReadGraph graph, Resource subject, Resource predicate) throws DatabaseException {\r
+ if (subject == null)\r
+ return null;\r
+ if (predicate == null)\r
+ return null;\r
+\r
+ Layer0 L0 = Layer0.getInstance(graph);\r
+ if(graph.isSubrelationOf(predicate, L0.HasProperty)) {\r
+ Resource object = graph.getPossibleObject(subject, predicate);\r
+ if(object == null) return null;\r
+ String valueType = graph.getPossibleRelatedValue(predicate, L0.RequiresValueType, Bindings.STRING);\r
+ if(valueType != null) {\r
+ String valueType2 = graph.getPossibleRelatedValue(object, L0.HasValueType, Bindings.STRING);\r
+ if(!valueType.equals(valueType2)) {\r
+ StringBuilder sb = new StringBuilder()\r
+ .append("The value type ")\r
+ .append(valueType)\r
+ .append(" of predicate ")\r
+ .append(NameUtils.getSafeName(graph, predicate, true))\r
+ .append(" does not match the value type ")\r
+ .append(valueType2)\r
+ .append(" of object ")\r
+ .append(NameUtils.getSafeName(graph, object, true))\r
+ .append(".");\r
+ return sb.toString();\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ \r
+}\r