]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/StandardVariableModifier.java
Merge commit 'ad8333027322fda6b9a8a524c7a7e15a54c52f38'
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / StandardVariableModifier.java
1 package org.simantics.db.layer0.variable;\r
2 \r
3 import java.util.Map;\r
4 \r
5 import org.simantics.databoard.Bindings;\r
6 import org.simantics.databoard.binding.Binding;\r
7 import org.simantics.databoard.type.Datatype;\r
8 import org.simantics.db.ReadGraph;\r
9 import org.simantics.db.Resource;\r
10 import org.simantics.db.Statement;\r
11 import org.simantics.db.WriteGraph;\r
12 import org.simantics.db.common.request.EnumerationMap;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.layer0.Layer0;\r
15 \r
16 public class StandardVariableModifier implements VariableModifier {\r
17 \r
18         final private static Binding datatype_binging = Bindings.getBindingUnchecked(Datatype.class);\r
19         final public static StandardVariableModifier INSTANCE = new StandardVariableModifier();\r
20 \r
21         @Override\r
22         public String isValid(Object newValue) {\r
23                 return null;\r
24         }\r
25 \r
26         @Override\r
27         public String isValid(Object newValue, Binding binding) {\r
28                 return null;\r
29         }\r
30 \r
31         @Override\r
32         public void modify(WriteGraph graph, Variable variable, Object value) throws DatabaseException {\r
33                 modify(graph, variable, value, null);\r
34         }\r
35 \r
36         boolean isEnumeration(ReadGraph graph, Resource literal) throws DatabaseException {\r
37                 \r
38                 Layer0 L0 = Layer0.getInstance(graph);\r
39                 Resource parent = graph.getPossibleObject(literal, L0.PartOf);\r
40                 if(parent == null) return false;\r
41                 return graph.hasStatement(parent, L0.Enumeration);\r
42                 \r
43         }\r
44         \r
45         @Override\r
46         public void modify(WriteGraph graph, Variable variable, Object value, Binding binding) throws DatabaseException {\r
47 \r
48                 Variable parent = variable.getParent(graph);\r
49                 Resource container = parent.getPossibleRepresents(graph);\r
50                 if(container == null) return;\r
51                 \r
52                 Resource property = variable.getPossiblePredicateResource(graph);\r
53                 if(property == null) return;\r
54                 \r
55 //              Variable parent = variable.getPossiblePropertyValue(graph, Variables.PARENT);\r
56 //              Variable predicate = variable.getPossiblePropertyValue(graph, Variables.PREDICATE);\r
57                 \r
58 //              Resource container = parent.getPossiblePropertyValue(graph, Variables.REPRESENTS);\r
59 //              if(container == null) return;\r
60 //              Resource property = predicate.getPossiblePropertyValue(graph, Variables.REPRESENTS);\r
61 //              if(property == null) return;\r
62         \r
63                 Statement object = graph.getPossibleStatement(container, property);\r
64                 if(object == null) return;\r
65                 \r
66                 Resource objectResource = object.getObject();\r
67                 if(isEnumeration(graph, objectResource)) {\r
68 \r
69                         Layer0 L0 = Layer0.getInstance(graph);\r
70                         Resource type = graph.getSingleObject(objectResource, L0.PartOf);\r
71                         \r
72                         Map<String, Resource> enumMap = graph.syncRequest(new EnumerationMap(type));\r
73                         Resource newLiteral = enumMap.get(value);\r
74                         graph.deny(container, property, objectResource);\r
75                         graph.claim(container, property, newLiteral);\r
76                         \r
77                         return;\r
78                 }\r
79                 \r
80                 if(object.isAsserted(container)) {\r
81 \r
82                         Layer0 L0 = Layer0.getInstance(graph);\r
83                         Resource type = graph.getPossibleType(objectResource, L0.Literal);\r
84 \r
85                         Statement dt = graph.getPossibleStatement(objectResource, L0.HasDataType);\r
86                         Datatype custom = dt.isAsserted(objectResource) ? null : (Datatype)graph.getValue(dt.getObject(), datatype_binging);\r
87 \r
88                         objectResource = graph.newResource();\r
89                         graph.claim(objectResource, L0.InstanceOf, null, type);\r
90                         graph.claim(container, property, objectResource);\r
91                         if(custom != null) {\r
92                                 graph.addLiteral(objectResource, L0.HasDataType, L0.HasDataType_Inverse, L0.DataType, custom, datatype_binging);\r
93                         }\r
94                         \r
95                         \r
96 //                      Resource usesUnit = graph.getPossibleResource("http://flowbat.fi/Flowbat-0.1/UsesDatatype");\r
97 //                      if(usesUnit != null) {\r
98 //                              String unit = graph.getPossibleRelatedValue(oldObject, usesUnit, Bindings.STRING);\r
99 //                              if(unit != null) {\r
100 //                                      graph.claimLiteral(objectResource, usesUnit, unit, Bindings.STRING);\r
101 //                              }\r
102 //                              Resource isDefault = graph.getResource("http://flowbat.fi/Flowbat-0.1/IsDefault");\r
103 //                              Resource isUndefined = graph.getResource("http://flowbat.fi/Flowbat-0.1/IsUndefined");\r
104 //                              graph.claimLiteral(objectResource, isDefault, false, Bindings.BOOLEAN);\r
105 //                              graph.claimLiteral(objectResource, isUndefined, false, Bindings.BOOLEAN);\r
106 //                      }\r
107                         \r
108                 }\r
109                 graph.claimValue(objectResource, value, binding);\r
110                 \r
111         }\r
112         \r
113 \r
114 }\r