This implementation replaces previous, direction (parent/sub) specific
propagation.
This is API change, implementations must be updated.
gitlab #16
Change-Id: I1da59958636495ee2e9c90cc6b86ce0cfb99c186
- public boolean requiresParentOps() {
- return add;
+ public boolean requiresOp(UpdateOp op) {
+ if (add) {
+ if (getParentOps().contains(op))
+ return true;
+ } else {
+ if (getSubOps().contains(op))
+ return true;
+ }
+ return false;
- public boolean requiresSubOps() {
- return !add;
+ public boolean selectOp(UpdateOp op, boolean select) {
+ if (select) {
+ return requiresOp(op);
+ } else {
+ return op.requiresOp(this);
+ }
}
protected static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
}
protected static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
- public boolean requiresParentOps() {
- return false;
+ public boolean requiresOp(UpdateOp op) {
+ return false;
- public boolean requiresSubOps() {
- return false;
+ public boolean selectOp(UpdateOp op, boolean select) {
+ return false;
public boolean isChange() {
return isAdd() || isDelete();
}
public boolean isChange() {
return isAdd() || isDelete();
}
-
- /**
- * Is parent operation applied before this.
- * @return
- */
- public abstract boolean requiresParentOps();
- /**
- * Is child operation applied before this.
- * @return
- */
- public abstract boolean requiresSubOps();
-
- * Is parent operation selected when this is selected
+ * Should given operation to be applied before this operation.
+ * @param op
- public boolean selectParentOps() {
- return requiresParentOps();
+ public boolean requiresOp(UpdateOp op) {
+ return false;
- * Is child operation selected when this is selected
+ * Should selection state to be propagated to given op.
+ * @param op parent or sub op of this.
+ * @param select selection flag.
- public boolean selectSubOps() {
- return requiresSubOps();
- }
+ public boolean selectOp(UpdateOp op, boolean select) {
+ return requiresOp(op);
+ }
public boolean select(boolean select) {
if (!enabled)
public boolean select(boolean select) {
if (!enabled)
manualSelection = true;
return b;
}
manualSelection = true;
return b;
}
private boolean _select(boolean select) {
if (select == selected)
return true;
if (applied)
return false;
private boolean _select(boolean select) {
if (select == selected)
return true;
if (applied)
return false;
- if (!isChange())
- return false;
- if (selectParentOps()) {
- for (UpdateOp op : parentOps)
- op._select(true);
- }
-
- selected = true;
- manualSelection = false;
- if (selectSubOps()) {
- for (UpdateOp op : subOps)
- op._select(true);
- }
-
+ selected = true;
+ manualSelection = false;
+ for (UpdateOp op : parentOps) {
+ if (selectOp(op,true))
+ op._select(true);
+ }
+ for (UpdateOp op : subOps) {
+ if (selectOp(op,true))
+ op._select(true);
+ }
+ return true;
} else {
selected = false;
manualSelection = false;
for (UpdateOp op : subOps) {
} else {
selected = false;
manualSelection = false;
for (UpdateOp op : subOps) {
- if (op.selectParentOps())
- op._select(false);
- else if (!op.manualSelection)
- op._select(false);
- }
+ if (selectOp(op, false))
+ op._select(false);
+ else if (!op.manualSelection)
+ op._select(false);
+ }
for (UpdateOp op : parentOps)
for (UpdateOp op : parentOps)
- if (op.selectSubOps())
- op._select(false);
+ if (selectOp(op, false))
+ op._select(false);
public boolean selected() {
public boolean selected() {
+ if (!isChange())
+ // Non change operations are not really selected, but the selected flag may be used for selection propagation
+ return false;
* @return
*/
public abstract Resource getCreatedResource();
* @return
*/
public abstract Resource getCreatedResource();
+
+ @Override
+ public String toString() {
+ String s = this.getClass().getSimpleName();
+ if (selected)
+ s += " selected";
+ if (enabled)
+ s += " enabled";
+ if (visible)
+ s += " visible";
+ if (applied)
+ s += " applied";
+ return s;
+ }
return;
}
stack.push(op);
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);
}
stack.pop();
op.apply(g);
}