From 30ffb12d7fd014fbbd6822932700da90d664a507 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Fri, 19 Oct 2012 16:00:11 -0500 Subject: [PATCH] Wire in visitors to RocketComponent. Added some abstract implementations of RocketComponentVisitior which provide for recursive actions. --- .../rocketcomponent/RocketComponent.java | 10 ++++++--- .../RocketComponentVisitor.java | 5 +++++ .../BredthFirstRecusiveVisitor.java | 21 +++++++++++++++++++ .../DepthFirstRecusiveVisitor.java | 21 +++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 core/src/net/sf/openrocket/rocketcomponent/RocketComponentVisitor.java create mode 100644 core/src/net/sf/openrocket/rocketvisitors/BredthFirstRecusiveVisitor.java create mode 100644 core/src/net/sf/openrocket/rocketvisitors/DepthFirstRecusiveVisitor.java diff --git a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java index e941d9cf0..875079d58 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java +++ b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java @@ -23,7 +23,7 @@ import net.sf.openrocket.util.SimpleStack; import net.sf.openrocket.util.UniqueID; -public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable { +public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable, Visitable { 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 diff --git a/core/src/net/sf/openrocket/rocketcomponent/RocketComponentVisitor.java b/core/src/net/sf/openrocket/rocketcomponent/RocketComponentVisitor.java new file mode 100644 index 000000000..0a28982e1 --- /dev/null +++ b/core/src/net/sf/openrocket/rocketcomponent/RocketComponentVisitor.java @@ -0,0 +1,5 @@ +package net.sf.openrocket.rocketcomponent; + +public interface RocketComponentVisitor extends Visitor { + +} diff --git a/core/src/net/sf/openrocket/rocketvisitors/BredthFirstRecusiveVisitor.java b/core/src/net/sf/openrocket/rocketvisitors/BredthFirstRecusiveVisitor.java new file mode 100644 index 000000000..157f54619 --- /dev/null +++ b/core/src/net/sf/openrocket/rocketvisitors/BredthFirstRecusiveVisitor.java @@ -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 ); + +} diff --git a/core/src/net/sf/openrocket/rocketvisitors/DepthFirstRecusiveVisitor.java b/core/src/net/sf/openrocket/rocketvisitors/DepthFirstRecusiveVisitor.java new file mode 100644 index 000000000..f08d65080 --- /dev/null +++ b/core/src/net/sf/openrocket/rocketvisitors/DepthFirstRecusiveVisitor.java @@ -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 ); + +}