Wire in visitors to RocketComponent. Added some abstract
implementations of RocketComponentVisitior which provide for recursive actions.
This commit is contained in:
parent
6d190095a7
commit
30ffb12d7f
@ -23,7 +23,7 @@ import net.sf.openrocket.util.SimpleStack;
|
||||
import net.sf.openrocket.util.UniqueID;
|
||||
|
||||
|
||||
public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable<RocketComponent> {
|
||||
public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable<RocketComponent>, Visitable<RocketComponentVisitor,RocketComponent> {
|
||||
private static final LogHelper log = Application.getLogger();
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
|
||||
@ -1691,8 +1691,12 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
return id.hashCode();
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////// Visitor pattern implementation
|
||||
@Override
|
||||
public void accept(RocketComponentVisitor visitor) {
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
//////////// Helper methods for subclasses
|
||||
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
public interface RocketComponentVisitor extends Visitor<RocketComponentVisitor, RocketComponent> {
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package net.sf.openrocket.rocketvisitors;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponentVisitor;
|
||||
|
||||
public abstract class BredthFirstRecusiveVisitor implements RocketComponentVisitor {
|
||||
|
||||
@Override
|
||||
public final void visit(RocketComponent visitable) {
|
||||
|
||||
for ( RocketComponent child: visitable.getChildren() ) {
|
||||
this.visit(child);
|
||||
}
|
||||
|
||||
this.doAction(visitable);
|
||||
|
||||
}
|
||||
|
||||
protected abstract void doAction( RocketComponent visitable );
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package net.sf.openrocket.rocketvisitors;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponentVisitor;
|
||||
|
||||
public abstract class DepthFirstRecusiveVisitor implements RocketComponentVisitor {
|
||||
|
||||
@Override
|
||||
public final void visit(RocketComponent visitable) {
|
||||
|
||||
this.doAction(visitable);
|
||||
|
||||
for ( RocketComponent child: visitable.getChildren() ) {
|
||||
this.visit(child);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected abstract void doAction( RocketComponent visitable );
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user