X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FAddDeleteUpdateOp.java;h=3f4b6bfdad3dc95464e496aff1b7d4b9326b9428;hb=refs%2Fchanges%2F79%2F3779%2F1;hp=901dc19ecbd027b25eead4cf6cc73efab4a82d18;hpb=1e5befdca54cd12daed18b964da34a5902c02bac;p=simantics%2Finterop.git diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/AddDeleteUpdateOp.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/AddDeleteUpdateOp.java index 901dc19..3f4b6bf 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/AddDeleteUpdateOp.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/AddDeleteUpdateOp.java @@ -24,6 +24,11 @@ public abstract class AddDeleteUpdateOp extends UpdateOp { super(changes); } + public AddDeleteUpdateOp(boolean add, GraphChanges changes) { + super(changes); + this.add = add; + } + @Override public boolean isAdd() { return add; @@ -35,38 +40,77 @@ public abstract class AddDeleteUpdateOp extends UpdateOp { } @Override - public boolean requiresParentOps() { - return add; + public boolean requiresOp(UpdateOp op) { + if (add) { + if (getParentOps().contains(op) && op.isAdd()) + return true; + } else { + if (getSubOps().contains(op) && op.isDelete()) + return true; + } + return false; } - + @Override - public boolean requiresSubOps() { - return !add; + public boolean selectOp(UpdateOp op, boolean select) { + if (select) { + return requiresOp(op); + } else { + return op.requiresOp(this); + } } - protected static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException { + public static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException { Layer0 l0 = Layer0.getInstance(g); for (Statement s : g.getStatements(source, l0.HasProperty)) { if (s.isAsserted(source)) continue; - Object value = g.getPossibleValue(s.getObject()); - System.out.println(NameUtils.getSafeName(g, s.getSubject()) + " " + NameUtils.getSafeName(g, s.getPredicate()) + " " + NameUtils.getSafeName(g, s.getObject()) + " " + value); - if (value != null) { - Statement valueStm = g.getPossibleStatement(destination, s.getPredicate()); - Resource valueResource = null; - if (valueStm != null && !valueStm.isAsserted(destination)) - valueResource = valueStm.getObject(); - if (valueResource == null) { - valueResource = g.newResource(); - g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf)); - g.claim(destination, s.getPredicate(), valueResource); + if (g.isInstanceOf(s.getObject(), l0.Literal)) { + Object value = g.getPossibleValue(s.getObject()); + System.out.println(NameUtils.getSafeName(g, s.getSubject()) + " " + NameUtils.getSafeName(g, s.getPredicate()) + " " + NameUtils.getSafeName(g, s.getObject()) + " " + value); + if (value != null) { + Statement valueStm = g.getPossibleStatement(destination, s.getPredicate()); + Resource valueResource = null; + if (valueStm != null && !valueStm.isAsserted(destination)) + valueResource = valueStm.getObject(); + if (valueResource == null) { + valueResource = g.newResource(); + g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf)); + g.claim(destination, s.getPredicate(), valueResource); + } + g.claimValue(valueResource, value); + //g.claimLiteral(destination, s.getPredicate(), value); } - g.claimValue(valueResource, value); - //g.claimLiteral(destination, s.getPredicate(), value); + } else if (g.isInstanceOf(s.getObject(), l0.SCLValue)) { + Resource valueResource = g.newResource(); + g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf)); + g.claim(destination, s.getPredicate(), valueResource); + copyProperties(g, s.getObject(), valueResource); + } else { + throw new DatabaseException("Expected to copy property resource " + s.getObject()); } } } + public static void copyTags(WriteGraph g, Resource source, Resource destination) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(g); + for (Statement s : g.getStatements(source, L0.IsWeaklyRelatedTo)) { + if (s.getObject().equals(source)) { + g.claim(destination, s.getPredicate(), destination); + } + } + } + + public static void copyTypes(WriteGraph g, Resource source, Resource destination) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(g); + for (Resource r : g.getObjects(source, L0.InstanceOf)) + g.claim(destination, L0.InstanceOf, r); + for (Resource r : g.getObjects(source, L0.Inherits)) + g.claim(destination, L0.Inherits, r); + for (Resource r : g.getObjects(source, L0.SubrelationOf)) + g.claim(destination, L0.SubrelationOf, r); + } + protected void copyIssues(WriteGraph g, Resource source, Resource destination) throws DatabaseException { Layer0 l0 = Layer0.getInstance(g); IssueResource ir = IssueResource.getInstance(g);