Default property editing restores assertions 27/627/1
authorAntti Villberg <antti.villberg@semantum.fi>
Thu, 15 Jun 2017 03:22:24 +0000 (06:22 +0300)
committerAntti Villberg <antti.villberg@semantum.fi>
Thu, 15 Jun 2017 03:22:24 +0000 (06:22 +0300)
refs #7302

Change-Id: I6e3b189cae025bcea85ae1265b4c80ade2dc9d16

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 08dd63ce0e25c4bf11084bc8402eb802cd51a49d..103c9bb0129259bd5dd0c2000410a95fc147bc53 100644 (file)
@@ -1386,4 +1386,18 @@ public class Layer0Utils {
         return PrettyPrintTG.print(tg);
     }
 
+    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);