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 @@
*/
package teetime.framework;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
......@@ -32,16 +34,24 @@ import teetime.framework.validation.InvalidPortConnection;
* @author Christian Wulf, Nelson Tavares de Sousa
*
*/
@SuppressWarnings("PMD.AbstractNaming")
public abstract class AbstractCompositeStage extends Stage {
private static final IPipeFactory INTRA_PIPE_FACTORY = PipeFactoryRegistry.INSTANCE
.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false);
private final List<OutputPort<?>> outputPorts;
protected abstract Stage getFirstStage();
protected abstract Collection<? extends Stage> getLastStages();
public AbstractCompositeStage() {
outputPorts = new ArrayList<OutputPort<?>>();
for (final Stage s : getLastStages()) {
outputPorts.addAll(Arrays.asList(s.getOutputPorts()));
}
}
@Override
protected final void executeStage() {
getFirstStage().executeStage();
......@@ -72,6 +82,11 @@ public abstract class AbstractCompositeStage extends Stage {
return getFirstStage().getInputPorts();
}
@Override
protected OutputPort<?>[] getOutputPorts() {
return outputPorts.toArray(new OutputPort[0]);
}
@Override
public final StageState getCurrentState() {
return getFirstStage().getCurrentState();
......
......@@ -119,6 +119,8 @@ public abstract class Stage {
protected abstract InputPort<?>[] getInputPorts();
protected abstract OutputPort<?>[] getOutputPorts();
// events
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