X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop.update%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fupdate%2Fmodel%2FUpdateOp.java;h=2bd3718f6a39cc96d5741611e8cb85f3b5f59771;hb=961c51d828eace5c9ab9db9499f0af9a78f16192;hp=50954ec1ffca968cc3e06a6dfbd1b09a59e4765e;hpb=e75decb773efdb18e98b6951986c62adf52707f0;p=simantics%2Finterop.git diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOp.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOp.java index 50954ec..2bd3718 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOp.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateOp.java @@ -2,12 +2,15 @@ package org.simantics.interop.update.model; import java.util.ArrayList; import java.util.Collection; +import java.util.List; +import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Statement; import org.simantics.db.WriteGraph; import org.simantics.db.exception.DatabaseException; import org.simantics.interop.test.GraphChanges; +import org.simantics.layer0.Layer0; /** * Base class for update operations (adding and deleting objects) @@ -37,17 +40,37 @@ public abstract class UpdateOp { return parentOps; } + public Collection getParentOpsWithClass(Class cls) { + List ops = new ArrayList(parentOps.size()); + for (UpdateOp op : parentOps) + if (cls.isAssignableFrom(op.getClass())) + ops.add((T)op); + return ops; + } + public Collection getSubOps() { return subOps; } + public Collection getSubOpsWithClass(Class cls) { + List ops = new ArrayList(subOps.size()); + for (UpdateOp op : subOps) + if (cls.isAssignableFrom(op.getClass())) + ops.add((T)op); + return ops; + } + public void addParentOp(UpdateOp op) { assert (!op.equals(this)); + if (parentOps.contains(op)) + return; parentOps.add(op); } public void addSubOp(UpdateOp op) { assert (!op.equals(this)); + if (subOps.contains(op)) + return; subOps.add(op); } @@ -195,6 +218,12 @@ public abstract class UpdateOp { */ public abstract Resource getCreatedResource(); + public Resource getParentResource(ReadGraph g) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(g); + return g.getPossibleObject(getResource(), l0.PartOf); + } + + @Override public String toString() { String s = this.getClass().getSimpleName();