X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FUpdateTree.java;h=a2066f4108c33e35a92d10b28ab9314c2153c34f;hb=fad28e2a01ee43b7448cffaef1bc6ba2eed84e39;hp=5af784eba193427f77b465a156c4f1bffece4358;hpb=9b518092a4217216dbe2a8b90c5aaad1d1e4ec21;p=simantics%2Finterop.git diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java index 5af784e..a2066f4 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java @@ -7,10 +7,9 @@ import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.interop.test.GraphChanges; -import org.simantics.interop.update.model.UpdateNode.Status; -public abstract class UpdateTree { +public class UpdateTree { private UpdateNode rootNode; private Map nodes; @@ -21,7 +20,7 @@ public abstract class UpdateTree { public UpdateTree(ReadGraph g, GraphChanges changes, UpdateOperations updateOps) throws DatabaseException { this.changes = changes; this.nodes = new HashMap(); - this.rootNode = createNode(Status.EXIST, changes.getResource1()); + this.rootNode = createNode(g, UpdateStatus.EXIST, changes.getResource1()); nodes.put(changes.getResource1(), rootNode); nodes.put(changes.getResource2(), rootNode); this.updateOps = updateOps; @@ -37,57 +36,29 @@ public abstract class UpdateTree { return rootNode; } -<<<<<<< HEAD - protected abstract UpdateNode createNode(Status status, Resource r); - protected abstract UpdateNode createNode(Status status, UpdateOp op); - - private UpdateNode createNode(Resource r1, Resource r2) { - UpdateNode node = null; - if (r1 != null && r2 != null) { - node = createNode(Status.EXIST, r1); - nodes.put(r1, node); - nodes.put(r2, node); - } else if (r1 != null) { - node = createNode(Status.DELETED ,updateOps.getUpdateOp(r1)); - nodes.put(r1, node); - } else if (r2 != null) { - node = createNode(Status.NEW, updateOps.getUpdateOp(r2)); - nodes.put(r2, node); - } - return node; + public GraphChanges getChanges() { + return changes; } - public UpdateNode addNode(ReadGraph g, Resource r1, Resource r2) throws DatabaseException { - if (r1 != null && r2 != null) { - return null; - } - if (nodes.containsKey(r1)) - return nodes.get(r1); - if (nodes.containsKey(r2)) - return nodes.get(r2); - - UpdateNode node = createNode(r1, r2); - connectParent(g,node); - return node; - + protected UpdateNode createNode(ReadGraph g, UpdateStatus status, Resource r) throws DatabaseException { + return new UpdateNode(g,status, r); } - protected boolean connectParent(ReadGraph g, UpdateNode node) throws DatabaseException { -======= - protected abstract UpdateNode createNode(Status staus, Resource r); - protected abstract UpdateNode createNode(Status staus, UpdateOp op); + protected UpdateNode createNode(ReadGraph g, UpdateStatus status, UpdateOp op) throws DatabaseException{ + return new UpdateNode(g,status, op); + } - private UpdateNode createNode(Resource r1, Resource r2) { + private UpdateNode createNode(ReadGraph g, Resource r1, Resource r2) throws DatabaseException { UpdateNode node = null; if (r1 != null && r2 != null) { - node = createNode(Status.EXIST, r1); + node = createNode(g, UpdateStatus.EXIST, r1); nodes.put(r1, node); nodes.put(r2, node); } else if (r1 != null) { - node = createNode(Status.DELETED ,updateOps.getUpdateOp(r1)); + node = createNode(g,UpdateStatus.DELETED ,updateOps.getUpdateOp(r1)); nodes.put(r1, node); } else if (r2 != null) { - node = createNode(Status.NEW, updateOps.getUpdateOp(r2)); + node = createNode(g,UpdateStatus.NEW, updateOps.getUpdateOp(r2)); nodes.put(r2, node); } return node; @@ -102,26 +73,24 @@ public abstract class UpdateTree { if (nodes.containsKey(r2)) return nodes.get(r2); - UpdateNode node = createNode(r1, r2); + UpdateNode node = createNode(g, r1, r2); connectParent(g,node); return node; - } - private boolean connectParent(ReadGraph g, UpdateNode node) throws DatabaseException { ->>>>>>> branch 'master' of ssh://luukkainen@www.simantics.org:29418/simantics/interop + public UpdateNode getNode(Resource r) { + return nodes.get(r); + } + + protected boolean connectParent(ReadGraph g, UpdateNode node) throws DatabaseException { UpdateNode parent = null; while (true) { Resource parentResource = node.getParentResource(g); parent = nodes.get(parentResource); if (parent == null) { - if (changes.getComparable().containsLeft(parentResource)) { - parent = createNode(parentResource, changes.getComparable().getRight(parentResource)); - } else if (changes.getComparable().containsRight(parentResource)) { - parent = createNode(changes.getComparable().getLeft(parentResource) ,parentResource); - } else { + parent = getOrCreate(g, parentResource); + if (parent == null) return false; - } //parent.setStatus(Status.CONTAINS); parent.addChild(node); node = parent; @@ -134,7 +103,26 @@ public abstract class UpdateTree { } } - protected abstract boolean handleCustom(ReadGraph g, UpdateOp op) throws DatabaseException; + protected UpdateNode getOrCreate(ReadGraph g, Resource parentResource) throws DatabaseException { + UpdateNode parent = nodes.get(parentResource); + if (parent == null) { + if (changes.getComparable().containsLeft(parentResource)) { + parent = createNode(g, parentResource, changes.getComparable().getRight(parentResource)); + } else if (changes.getComparable().containsRight(parentResource)) { + parent = createNode(g, changes.getComparable().getLeft(parentResource) ,parentResource); + } else { + return null; + } + //parent.setStatus(Status.CONTAINS + } + return parent; + } + + + + protected boolean handleCustom(ReadGraph g, UpdateOp op) throws DatabaseException { + return false; + } private void populate(ReadGraph g) throws DatabaseException{