X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FUpdateOperations.java;h=0c1882c3fbcc38b6c7eadaeb5b88fa0f65ff146b;hb=refs%2Fheads%2Fmaster;hp=a324763272318d31fd08e2fa9272291dca5a33a5;hpb=2665fb66a324e6d08f28215a4734b95b001927f0;p=simantics%2Finterop.git diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOperations.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOperations.java index a324763..0c1882c 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOperations.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOperations.java @@ -21,16 +21,20 @@ import org.simantics.interop.test.GraphChanges; public abstract class UpdateOperations { private List operations = new ArrayList(); - private Map opMap = new HashMap(); + private Map resourceMap = new HashMap(); + private Map statementMap = new HashMap(); private GraphChanges changes; public UpdateOperations(GraphChanges changes) { - this.changes = changes; - + this.changes = changes; } public UpdateOp getUpdateOp(Resource r) { - return opMap.get(r); + return resourceMap.get(r); + } + + public UpdateOp getUpdateOp(Statement s) { + return statementMap.get(s); } public void applyAll(WriteGraph g) throws DatabaseException { @@ -49,6 +53,18 @@ public abstract class UpdateOperations { public List getOperations() { return operations; } + + public GraphChanges getChanges() { + return changes; + } + + public Map getResourceMap() { + return resourceMap; + } + + public Map getStatementMap() { + return statementMap; + } private void apply(WriteGraph g, UpdateOp op) throws DatabaseException { Stack stack = new Stack(); @@ -58,19 +74,21 @@ public abstract class UpdateOperations { private void _apply(WriteGraph g, Stack stack, UpdateOp op) throws DatabaseException { if (op.applied()) return; - if (stack.contains(op)) + if (stack.contains(op)) { + op.apply(g); return; - stack.push(op); - if (op.requiresParentOps()) { - for (UpdateOp pop : op.getParentOps()) - if (!pop.applied()) - _apply(g, stack, pop); - } - if (op.requiresSubOps()) { - for (UpdateOp sop : op.getSubOps()) - if (!sop.applied()) - _apply(g, stack, sop); } + stack.push(op); + for (UpdateOp pop : op.getParentOps()) + if (op.requiresOp(pop)) { + if (!pop.applied()) + _apply(g, stack, pop); + } + for (UpdateOp sop : op.getSubOps()) + if (op.requiresOp(sop)) { + if (!sop.applied()) + _apply(g, stack, sop); + } stack.pop(); op.apply(g); } @@ -82,25 +100,34 @@ public abstract class UpdateOperations { } protected void addOp(Resource r, UpdateOp op) { - opMap.put(r, op); + resourceMap.put(r, op); operations.add(op); } - protected UpdateOp getOP(Resource r) { - return opMap.get(r); + protected void addOp(Statement s, UpdateOp op) { + statementMap.put(s, op); + operations.add(op); } - - public abstract void populate(ReadGraph g) throws DatabaseException; - protected static Statement getInverse(ReadGraph g, Statement otherComponentInv) throws DatabaseException{ - Statement otherComponent = null; - for (Statement s : g.getStatements(otherComponentInv.getObject(), g.getInverse(otherComponentInv.getPredicate()))) { - if (s.getObject().equals(otherComponentInv.getSubject())) - otherComponent = s; + protected void replaceOp(Resource r, UpdateOp op) { + UpdateOp oldOp = resourceMap.remove(r); + if (oldOp != null) { + operations.remove(oldOp); } - return otherComponent; + resourceMap.put(r, op); + operations.add(op); } + protected UpdateOp getOP(Resource r) { + return resourceMap.get(r); + } + + protected UpdateOp getOP(Statement r) { + return statementMap.get(r); + } + + public abstract void populate(ReadGraph g) throws DatabaseException; + protected boolean compares(Resource r1, Resource r2) { if (r1.equals(r2)) return true;