X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FPropertyChange.java;h=772289f2478f80570a28f23cbde1adacc0b8e325;hb=refs%2Fchanges%2F43%2F4643%2F1;hp=b9555484e51481a5d733b41b742cee68a541a562;hpb=0403f09aa2c8b17a99acdd6f82d893bc1cdf88fb;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 b955548..772289f 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 @@ -103,30 +103,52 @@ 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()); } - Resource pred = pair.second.getPredicate(); - if (getChanges().getComparable().containsRight(pred)) - pred = getChanges().getComparable().getLeft(pred); + type = graph.getPossibleType(pair.second.getObject(), L0.Literal); + Resource pred = _getPredicate(); 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(); + Resource pred = _getPredicate(); graph.deny(s, pred); Resource valueResource = graph.newResource(); 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 = _getPredicate(); + graph.deny(s, pred); + graph.claim(s, pred, pair.second.getObject()); + applied = true; + } + } - applied = true; + + } + + private Resource _getPredicate() { + Resource pred = pair.second.getPredicate(); + if (getChanges().getComparable().containsRight(pred)) + pred = getChanges().getComparable().getLeft(pred); + return pred; } /**