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;
|
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 LogHelper log = Application.getLogger();
|
||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
@ -1691,7 +1691,11 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
return id.hashCode();
|
return id.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////// Visitor pattern implementation
|
||||||
|
@Override
|
||||||
|
public void accept(RocketComponentVisitor visitor) {
|
||||||
|
visitor.visit(this);
|
||||||
|
}
|
||||||
|
|
||||||
//////////// Helper methods for subclasses
|
//////////// 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