1 package org.simantics.interop.update.model;
3 import java.util.ArrayList;
4 import java.util.Collection;
6 import org.simantics.db.Resource;
7 import org.simantics.db.WriteGraph;
8 import org.simantics.db.exception.DatabaseException;
9 import org.simantics.interop.test.GraphChanges;
12 * Base class for update operations (adding and deleting objects)
14 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
17 public abstract class UpdateOp {
19 private GraphChanges changes;
21 private boolean selected = false;
22 private boolean manualSelection = false;
23 protected boolean applied = false;
25 private Collection<UpdateOp> parentOps = new ArrayList<UpdateOp>();
26 private Collection<UpdateOp> subOps = new ArrayList<UpdateOp>();
29 public UpdateOp(GraphChanges changes) {
30 this.changes = changes;
33 public Collection<UpdateOp> getParentOps() {
37 public Collection<UpdateOp> getSubOps() {
41 public void addParentOp(UpdateOp op) {
42 assert (!op.equals(this));
46 public void addSubOp(UpdateOp op) {
47 assert (!op.equals(this));
51 public void removeParentOp(UpdateOp op) {
55 public void removeSubOp(UpdateOp op) {
59 public GraphChanges getChanges() {
63 public abstract boolean isAdd();
64 public abstract boolean isDelete();
66 public abstract boolean requiresParentOps();
67 public abstract boolean requiresSubOps();
69 public boolean select(boolean select) {
70 boolean b = _select(select);
72 manualSelection = true;
76 private boolean _select(boolean select) {
77 if (select == selected)
80 if (requiresParentOps()) {
81 for (UpdateOp op : parentOps)
86 manualSelection = false;
87 if (requiresSubOps()) {
88 for (UpdateOp op : subOps)
94 manualSelection = false;
95 for (UpdateOp op : subOps) {
96 if (op.requiresParentOps())
98 else if (!op.manualSelection)
101 for (UpdateOp op : parentOps)
102 if (op.requiresSubOps())
108 public boolean selected() {
112 public boolean applied() {
115 public void apply(WriteGraph g) throws DatabaseException {
123 protected abstract void _apply(WriteGraph g) throws DatabaseException;
126 * Returns resource that this operation is changing.
129 public abstract Resource getResource();
132 * Returns resource that this operation created during apply operation. If operation did not add anything, this returns null.
135 public abstract Resource getCreatedResource();