Skip to content
Snippets Groups Projects
Commit 1206afc2 authored by Christian Wulf's avatar Christian Wulf
Browse files

added a draft for a traversor

parent 31a26e22
No related branches found
No related tags found
No related merge requests found
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
*/ */
package teetime.framework; package teetime.framework;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
...@@ -32,16 +34,24 @@ import teetime.framework.validation.InvalidPortConnection; ...@@ -32,16 +34,24 @@ import teetime.framework.validation.InvalidPortConnection;
* @author Christian Wulf, Nelson Tavares de Sousa * @author Christian Wulf, Nelson Tavares de Sousa
* *
*/ */
@SuppressWarnings("PMD.AbstractNaming")
public abstract class AbstractCompositeStage extends Stage { public abstract class AbstractCompositeStage extends Stage {
private static final IPipeFactory INTRA_PIPE_FACTORY = PipeFactoryRegistry.INSTANCE private static final IPipeFactory INTRA_PIPE_FACTORY = PipeFactoryRegistry.INSTANCE
.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false); .getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false);
private final List<OutputPort<?>> outputPorts;
protected abstract Stage getFirstStage(); protected abstract Stage getFirstStage();
protected abstract Collection<? extends Stage> getLastStages(); protected abstract Collection<? extends Stage> getLastStages();
public AbstractCompositeStage() {
outputPorts = new ArrayList<OutputPort<?>>();
for (final Stage s : getLastStages()) {
outputPorts.addAll(Arrays.asList(s.getOutputPorts()));
}
}
@Override @Override
protected final void executeStage() { protected final void executeStage() {
getFirstStage().executeStage(); getFirstStage().executeStage();
...@@ -72,6 +82,11 @@ public abstract class AbstractCompositeStage extends Stage { ...@@ -72,6 +82,11 @@ public abstract class AbstractCompositeStage extends Stage {
return getFirstStage().getInputPorts(); return getFirstStage().getInputPorts();
} }
@Override
protected OutputPort<?>[] getOutputPorts() {
return outputPorts.toArray(new OutputPort[0]);
}
@Override @Override
public final StageState getCurrentState() { public final StageState getCurrentState() {
return getFirstStage().getCurrentState(); return getFirstStage().getCurrentState();
......
...@@ -119,6 +119,8 @@ public abstract class Stage { ...@@ -119,6 +119,8 @@ public abstract class Stage {
protected abstract InputPort<?>[] getInputPorts(); protected abstract InputPort<?>[] getInputPorts();
protected abstract OutputPort<?>[] getOutputPorts();
// events // events
public abstract void onValidating(List<InvalidPortConnection> invalidPortConnections); public abstract void onValidating(List<InvalidPortConnection> invalidPortConnections);
......
package teetime.framework;
public interface StageVisitor {
public enum VisitorBehavior {
CONTINUE, STOP
}
VisitorBehavior visit(Stage stage);
}
package teetime.framework;
import teetime.framework.StageVisitor.VisitorBehavior;
import teetime.framework.pipe.IPipe;
public class Traversor {
private final StageVisitor stageVisitor;
public Traversor(final StageVisitor stageVisitor) {
this.stageVisitor = stageVisitor;
}
public void traverse(final Stage stage) {
VisitorBehavior visitorBehavior = stageVisitor.visit(stage);
if (visitorBehavior == VisitorBehavior.STOP) {
return;
}
OutputPort<?>[] outputPorts = stage.getOutputPorts();
for (OutputPort<?> outputPort : outputPorts) {
IPipe pipe = outputPort.getPipe();
if (null != pipe) {
Stage owningStage = pipe.getTargetPort().getOwningStage();
traverse(owningStage); // recursive call
}
}
}
}
wiki @ 0e447457
Subproject commit 162510ff4d2f04011498ba6920aae0c78347c6c8 Subproject commit 0e4474577e1f49bc96e734c286b2d9e0363895e8
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment