GraphTargetVisitorInterface for visiting model

This commit is contained in:
Jindra Petřík
2021-01-09 15:00:20 +01:00
parent 819a739397
commit 61b9660b49

View File

@@ -501,6 +501,19 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
public List<GraphTargetItem> getAllSubItems() {
List<GraphTargetItem> ret = new ArrayList<>();
visit(new AbstractGraphTargetVisitor() {
@Override
public void visit(GraphTargetItem item) {
if (item != null) {
ret.add(item);
}
}
});
return ret;
}
public Set<GraphTargetItem> getAllSubItemsRecursively() {
Set<GraphTargetItem> ret = new HashSet<>();
visitRecursively(new AbstractGraphTargetVisitor() {
@Override
public void visit(GraphTargetItem item) {
ret.add(item);
@@ -509,6 +522,20 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
return ret;
}
public final void visitRecursively(GraphTargetVisitorInterface visitor) {
Set<GraphTargetItem> visitedItems = new HashSet<>();
visit(new AbstractGraphTargetVisitor() {
@Override
public void visit(GraphTargetItem item) {
if (item != null && !visitedItems.contains(item)) {
visitedItems.add(item);
visitor.visit(item);
item.visit(this);
}
}
});
}
public void visit(GraphTargetVisitorInterface visitor) {
if (value != null) {
visitor.visit(value);