From c4c152bf639475b85efad1e8bd6ea007c08a9e1f Mon Sep 17 00:00:00 2001 From: Antti Villberg Date: Thu, 15 Jun 2017 06:22:24 +0300 Subject: [PATCH] Default property editing restores assertions refs #7302 Change-Id: I6e3b189cae025bcea85ae1265b4c80ade2dc9d16 --- .../org/simantics/db/layer0/util/Layer0Utils.java | 14 ++++++++++++++ .../org/simantics/selectionview/function/All.java | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java index 08dd63ce0..103c9bb01 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java @@ -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 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; + } + } diff --git a/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java b/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java index 5137dd742..150bbb825 100644 --- a/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java +++ b/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java @@ -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); -- 2.47.1