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.Statement;
8 import org.simantics.db.WriteGraph;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.interop.test.GraphChanges;
13 * Base class for update operations (adding and deleting objects)
15 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
18 public abstract class UpdateOp {
20 private GraphChanges changes;
22 private boolean selected = false;
23 private boolean manualSelection = false;
24 protected boolean applied = false;
25 protected boolean visible = true;
27 private Collection<UpdateOp> parentOps = new ArrayList<UpdateOp>();
28 private Collection<UpdateOp> subOps = new ArrayList<UpdateOp>();
31 public UpdateOp(GraphChanges changes) {
32 this.changes = changes;
35 public Collection<UpdateOp> getParentOps() {
39 public Collection<UpdateOp> getSubOps() {
43 public void addParentOp(UpdateOp op) {
44 assert (!op.equals(this));
48 public void addSubOp(UpdateOp op) {
49 assert (!op.equals(this));
53 public void removeParentOp(UpdateOp op) {
57 public void removeSubOp(UpdateOp op) {
61 public GraphChanges getChanges() {
65 public abstract boolean isAdd();
66 public abstract boolean isDelete();
68 public boolean isChange() {
69 return isAdd() || isDelete();
73 * Is parent operation applied before this.
76 public abstract boolean requiresParentOps();
78 * Is child operation applied before this.
81 public abstract boolean requiresSubOps();
84 * Is parent operation selected when this is selected
87 public boolean selectParentOps() {
88 return requiresParentOps();
92 * Is child operation selected when this is selected
95 public boolean selectSubOps() {
96 return requiresSubOps();
99 public boolean select(boolean select) {
100 boolean b = _select(select);
102 manualSelection = true;
106 private boolean _select(boolean select) {
107 if (select == selected)
112 if (selectParentOps()) {
113 for (UpdateOp op : parentOps)
118 manualSelection = false;
119 if (selectSubOps()) {
120 for (UpdateOp op : subOps)
126 manualSelection = false;
127 for (UpdateOp op : subOps) {
128 if (op.selectParentOps())
130 else if (!op.manualSelection)
133 for (UpdateOp op : parentOps)
134 if (op.selectSubOps())
140 public boolean selected() {
144 public boolean applied() {
148 public boolean isVisible() {
153 public void apply(WriteGraph g) throws DatabaseException {
162 * Applies the changes into the database.
165 * @throws DatabaseException
167 protected abstract void _apply(WriteGraph g) throws DatabaseException;
170 * Returns resource that this operation is changing.
173 public abstract Resource getResource();
176 * Returns resource that this operation is changing.
179 public abstract Statement getStatement();
182 * Returns resource that this operation created during apply operation. If operation did not add anything, this returns null.
185 public abstract Resource getCreatedResource();