import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
+import org.simantics.db.Session;
import org.simantics.db.Statement;
import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.ReadRequest;
import org.simantics.db.exception.DatabaseException;
import org.simantics.interop.test.GraphChanges;
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);
- }
+ 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);
}
public abstract void populate(ReadGraph g) throws DatabaseException;
+ /**
+ * Secondary populate method. Override this for chunked DB operations.
+ * @param session
+ * @throws DatabaseException
+ */
+ public void populate(Session session) throws DatabaseException {
+ session.syncRequest(new ReadRequest() {
+
+ @Override
+ public void run(ReadGraph graph) throws DatabaseException {
+ populate(graph);
+ }
+ });
+ }
+
protected boolean compares(Resource r1, Resource r2) {
if (r1.equals(r2))
return true;