Merge "Default property editing restores assertions"
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Fri, 16 Jun 2017 07:09:47 +0000 (10:09 +0300)
committerGerrit Code Review <gerrit2@www.simantics.org>
Fri, 16 Jun 2017 07:09:47 +0000 (10:09 +0300)
bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java
bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java

index 198ee41b77e060ad4cdf205e46a10038cbaa494b..5ccfcf325f49df3f919f6ee54f34b3d0f2033960 100644 (file)
@@ -1387,4 +1387,18 @@ public class Layer0Utils {
         return PrettyPrintTG.print(tg, ignoreIdentifiers);
     }
 
+    public static Resource getPossibleAssertedObject(ReadGraph graph, Resource resource, Resource predicate) throws DatabaseException {
+       Resource result = null;
+       for(Resource type : graph.getPrincipalTypes(resource)) {
+               Collection<Resource> rs = graph.getAssertedObjects(type, predicate);
+               if(rs.size() > 1) return null;
+               if(rs.size() == 1) {
+                       Resource ass = rs.iterator().next();
+                       if (result != null && !result.equals(ass)) return null;
+                       result = ass;
+               }
+       }
+       return result;
+    }
+    
 }
index 5137dd742ded7dfa2294364aa0e9340cea1fc904..150bbb8252346f61bfe6b6aca6b8eef3ff8d9a11 100644 (file)
@@ -293,6 +293,19 @@ public class All {
 
                }
 
+               if(!asserted) {
+                       Resource assertedObject = Layer0Utils.getPossibleAssertedObject(graph, container, property);
+                       if(assertedObject != null) {
+                               if(graph.isInstanceOf(assertedObject, newType)) {
+                                       Object assertedValue = graph.getValue(assertedObject, (Binding)_binding);
+                                       if(assertedValue.equals(value)) {
+                                               graph.deny(container, property);
+                                               return null;
+                                       }
+                               }
+                       }
+               }
+               
                Datatype datatype = variable.getDatatype(graph);
                Binding binding = (Binding)_binding;
                Layer0Utils.claimAdaptedValue(graph, objectResource, value, binding, datatype);