public void ensureValid(TopologyDag dag) { if (dag.getComponents().isEmpty()) { throw new IllegalStateException("Empty topology"); } java.util.Optional<OutputComponent> processor = dag.getOutputComponents().stream() .filter(x -> x instanceof StreamlineProcessor) .findFirst(); if (!processor.isPresent()) { java.util.Optional<OutputComponent> sourceWithOutgoingEdge = dag.getOutputComponents().stream() .filter(x -> x instanceof StreamlineSource && !dag.getEdgesFrom(x).isEmpty()) .findFirst(); if (!sourceWithOutgoingEdge.isPresent()) { throw new IllegalStateException("Topology does not contain a processor or a source with an outgoing edge"); } } Optional<Edge> edge = dag.getAllEdges().stream() .filter(e -> e.getStreamGroupings().stream().anyMatch(g -> !g.isValid())) .findFirst(); if (edge.isPresent()) { throw new IllegalStateException("Topology edge between " + edge.get().getFrom().getName() + " and " + edge.get().getTo().getName() + " has invalid stream grouping."); } }
private void copyEdges(InputComponent inputComponent) { List<Edge> edgesTo = originTopologyDag.getEdgesTo(inputComponent); edgesTo.forEach(e -> { OutputComponent from = e.getFrom(); InputComponent to = e.getTo(); Edge newEdge = new Edge(e.getId(), e.getFrom(), e.getTo(), e.getStreamGroupings()); StreamlineSource replacedSource = sourceToReplacedTestSourceMap.get(from.getName()); StreamlineProcessor replacedProcessorSource = processorToReplacedTestProcessorMap.get(from.getName()); StreamlineSink replacedSink = sinkToReplacedTestSinkMap.get(to.getName()); StreamlineProcessor replacedProcessorSink = processorToReplacedTestProcessorMap.get(to.getName()); if (replacedSource != null) { newEdge.setFrom(replacedSource); } else if (replacedProcessorSource != null) { newEdge.setFrom(replacedProcessorSource); } if (replacedSink != null) { newEdge.setTo(replacedSink); } else if (replacedProcessorSink != null) { newEdge.setTo(replacedProcessorSink); } testTopologyDag.addEdge(newEdge); }); }