X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=inline;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FUpdateOperations.java;h=0814ecf7fe524b0077c4cec85774af7d9c418144;hb=e2f57d7e61d6c52b6341f793f6988c123daa1647;hp=9c929c59cc4f267d14d1cc5f867d05fce23c00d6;hpb=2a37041c6da8864656e7217dbcc3d6dae8cd65be;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 9c929c5..0814ecf 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,7 +21,8 @@ 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) { @@ -29,7 +30,11 @@ public abstract class UpdateOperations { } 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 { @@ -52,6 +57,14 @@ public abstract class UpdateOperations { 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(); @@ -61,8 +74,10 @@ 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()) @@ -85,21 +100,30 @@ public abstract class UpdateOperations { } protected void addOp(Resource r, UpdateOp op) { - opMap.put(r, op); + resourceMap.put(r, op); + operations.add(op); + } + + protected void addOp(Statement s, UpdateOp op) { + statementMap.put(s, op); operations.add(op); } protected void replaceOp(Resource r, UpdateOp op) { - UpdateOp oldOp = opMap.remove(r); + UpdateOp oldOp = resourceMap.remove(r); if (oldOp != null) { operations.remove(oldOp); } - opMap.put(r, op); + resourceMap.put(r, op); operations.add(op); } protected UpdateOp getOP(Resource r) { - return opMap.get(r); + return resourceMap.get(r); + } + + protected UpdateOp getOP(Statement r) { + return statementMap.get(r); } public abstract void populate(ReadGraph g) throws DatabaseException;