X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FPropertyChange.java;h=d1a64afb9843a71bd5cba32edcbc815ac16ead21;hb=28413fd27e56ea8b5018ce5a11b1fd132d5425d7;hp=5220736d4259f803da5ed032273c8e6f20d46a56;hpb=a4470f2cf50c3f6d4c586930ccd8eaa55ded25a5;p=simantics%2Finterop.git diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/PropertyChange.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/PropertyChange.java index 5220736..d1a64af 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/PropertyChange.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/PropertyChange.java @@ -81,7 +81,15 @@ public class PropertyChange { if (obj.getClass() != this.getClass()) return false; PropertyChange c = (PropertyChange)obj; - return pair.equals(c.pair); + if (!leftSubject.equals(c.leftSubject)) + return false; + if (!rightSubject.equals(c.rightSubject)) + return false; + if (pair.first != null && pair.first.equals(c.pair.first)) + return true; + if (pair.second != null && pair.second.equals(c.pair.second)) + return true; + return false; } public void apply(WriteGraph graph) throws DatabaseException { @@ -95,21 +103,28 @@ public class PropertyChange { Resource s = leftSubject; if (graph.isInstanceOf(pair.second.getObject(), L0.Literal)) { Object value = null; + Resource type = null; if (customValue != null) value = customValue; else if (graph.hasValue(pair.second.getObject())) { value = graph.getValue(pair.second.getObject()); } + type = graph.getPossibleType(pair.second.getObject(), L0.Literal); Resource pred = pair.second.getPredicate(); if (getChanges().getComparable().containsRight(pred)) pred = getChanges().getComparable().getLeft(pred); if (value != null) { graph.deny(s, pred); - graph.claimLiteral(s, pred, value); + if (type != null) { + graph.claimLiteral(s, pred, type, value); + } else { + graph.claimLiteral(s, pred, value); + } } else { graph.deny(s,pred); } + applied = true; } else if (graph.isInstanceOf(pair.second.getObject(), L0.SCLValue)) { Resource pred = pair.second.getPredicate(); graph.deny(s, pred); @@ -117,8 +132,18 @@ public class PropertyChange { graph.claim(valueResource, L0.InstanceOf, graph.getSingleObject(pair.second.getObject(), L0.InstanceOf)); AddDeleteUpdateOp.copyProperties(graph, pair.second.getObject(), valueResource); graph.claim(s, pred, valueResource); + applied = true; + } else { + Resource type = graph.getPossibleType(pair.second.getObject(), L0.Value); + if (type != null && graph.hasStatement(type, L0.Enumeration, type)) { + Resource pred = pair.second.getPredicate(); + graph.deny(s, pred); + graph.claim(s, pred, pair.second.getObject()); + applied = true; + } + } - applied = true; + } /** @@ -198,6 +223,9 @@ public class PropertyChange { } public void setCustomValue(Object customValue) { + if (applied) { + throw new RuntimeException("Cannot change already applied value"); + } this.customValue = customValue; }