@Override public String toString() { return getClass().getSimpleName() + " for " + getInputProcessorPort(); }
private Integer getPortNodeIterationDepth(PortNode portNode, Map<InputProcessorPort, Integer> inputDepths) { int myInputDepth = inputDepths.get(portNode.getInputProcessorPort()); int depthMismatch = myInputDepth - portNode.getDesiredDepth(); return (depthMismatch > 0 ? depthMismatch : 0); }
private Set<Port> getReferencedPorts(IterationStrategyTopNode bean) { Set<Port> result = new HashSet<>(); for (IterationStrategyNode subNode : bean) if (subNode instanceof PortNode) { InputProcessorPort port = ((PortNode) subNode).getInputProcessorPort(); if (port != null) result.add(port); } else result.addAll(getReferencedPorts((IterationStrategyTopNode) subNode)); return result; }
private void fillInDesiredCardinalities( IterationStrategyNode iterationStrategyNode, Map<InputProcessorPort, Integer> desiredCardinalities) { if (iterationStrategyNode instanceof IterationStrategyTopNode) for (IterationStrategyNode subNode : (IterationStrategyTopNode) iterationStrategyNode) fillInDesiredCardinalities(subNode, desiredCardinalities); else if (iterationStrategyNode instanceof PortNode) { PortNode portNode = (PortNode) iterationStrategyNode; desiredCardinalities.put(portNode.getInputProcessorPort(), portNode.getDesiredDepth()); } }
@Override public void visitIterationStrategyTopNode(IterationStrategyTopNode bean) { if (checkComplete&&bean.isEmpty()) listener.emptyIterationStrategyTopNode(bean); Map<Port, IterationStrategyNode> portsSoFar = new HashMap<>(); for (IterationStrategyNode subNode : bean) if (subNode instanceof PortNode) { InputProcessorPort port = ((PortNode) subNode).getInputProcessorPort(); if (port != null) { if (portsSoFar.containsKey(port)) listener.portMentionedTwice(portsSoFar.get(port), subNode); else portsSoFar.put(port, subNode); } } else for (Port p : getReferencedPorts((IterationStrategyTopNode) subNode)) if (portsSoFar.containsKey(p)) listener.portMentionedTwice(portsSoFar.get(p), subNode); else portsSoFar.put(p, subNode); }
@Override protected void cloneInto(WorkflowBean clone, Cloning cloning) { PortNode cloneNode = (PortNode)clone; cloneNode.setDesiredDepth(getDesiredDepth()); cloneNode.setInputProcessorPort(cloning.cloneOrOriginal(getInputProcessorPort())); }
@Override public void visitPortNode(PortNode bean) { InputProcessorPort inputProcessorPort = bean.getInputProcessorPort(); Integer desiredDepth = bean.getDesiredDepth(); if (desiredDepth != null && desiredDepth < 0) listener.negativeValue(bean, "desiredDepth", desiredDepth); if (inputProcessorPort != null) { Processor ancestralProcessor = findAncestral(bean, Processor.class); Processor portAncestralProcessor = findAncestral( inputProcessorPort, Processor.class); if ((ancestralProcessor == null) || !ancestralProcessor.equals(portAncestralProcessor)) listener.outOfScopeValue(bean, "inputProcessorPort", inputProcessorPort); } if (checkComplete) { if (inputProcessorPort == null) listener.nullField(bean, "inputProcessorPort"); if (desiredDepth == null) listener.nullField(bean, "desiredDepth"); } }
@Test public void simpleDot() throws Exception { assertEquals(1, concat.getIterationStrategyStack().size()); IterationStrategyTopNode top = concat.getIterationStrategyStack().get(0); assertTrue(top instanceof DotProduct); assertEquals(2, top.size()); IterationStrategyNode node1 = top.get(0); assertTrue(node1 instanceof PortNode); PortNode portNode1 = (PortNode) node1; assertEquals(0, portNode1.getDesiredDepth().intValue()); assertEquals(concat.getInputPorts().getByName("string1"), portNode1.getInputProcessorPort()); IterationStrategyNode node2 = top.get(1); assertTrue(node2 instanceof PortNode); PortNode portNode2 = (PortNode) node2; assertEquals(0, portNode2.getDesiredDepth().intValue()); assertEquals(concat.getInputPorts().getByName("string2"), portNode2.getInputProcessorPort()); assertEquals(concat.getInputPorts().getByName("string2"), portNode2.getInputProcessorPort()); }
InputProcessorPort inPort = portNode.getInputProcessorPort(); URI portUri = uriTools.relativeUriForBean(inPort, wf); org.apache.taverna.scufl2.xml.PortNode port = objectFactory.createPortNode();
@Test public void simpleCrossProduct() throws Exception { assertEquals(1, coloursLisr.getIterationStrategyStack().size()); IterationStrategyTopNode top = coloursLisr.getIterationStrategyStack().get(0); assertTrue(top instanceof CrossProduct); assertEquals(1, top.size()); IterationStrategyNode node = top.get(0); assertTrue(node instanceof PortNode); PortNode portNode = (PortNode) node; assertEquals(0, portNode.getDesiredDepth().intValue()); assertEquals(coloursLisr.getInputPorts().getByName("string"), portNode.getInputProcessorPort()); }
@Test public void crossAndDot() throws Exception { assertEquals(1, shape.getIterationStrategyStack().size()); IterationStrategyTopNode top = shape.getIterationStrategyStack().get(0); assertTrue(top instanceof CrossProduct); assertEquals(2, top.size()); IterationStrategyNode node1 = top.get(0); assertTrue(node1 instanceof PortNode); PortNode portNode1 = (PortNode) node1; assertEquals(0, portNode1.getDesiredDepth().intValue()); assertEquals(shape.getInputPorts().getByName("string1"), portNode1.getInputProcessorPort()); IterationStrategyNode node2 = top.get(1); assertTrue(node2 instanceof DotProduct); DotProduct portNode2 = (DotProduct) node2; // Note: string3 before string2 IterationStrategyNode node21 = portNode2.get(0); assertTrue(node21 instanceof PortNode); PortNode portNode21 = (PortNode) node21; assertEquals(0, portNode21.getDesiredDepth().intValue()); assertEquals(shape.getInputPorts().getByName("string3"), portNode21.getInputProcessorPort()); IterationStrategyNode node22 = portNode2.get(1); assertTrue(node22 instanceof PortNode); PortNode portNode22 = (PortNode) node22; assertEquals(0, portNode22.getDesiredDepth().intValue()); assertEquals(shape.getInputPorts().getByName("string2"), portNode22.getInputProcessorPort()); }
@Test public void iterationStrategy() throws Exception { Processor hello = workflowBundle.getMainWorkflow().getProcessors() .getByName("Hello"); assertEquals(1, hello.getIterationStrategyStack().size()); IterationStrategyTopNode iterationStrategyTopNode = hello .getIterationStrategyStack().get(0); assertTrue(iterationStrategyTopNode instanceof CrossProduct); CrossProduct cross = (CrossProduct) iterationStrategyTopNode; assertEquals(1, cross.size()); PortNode portNode = (PortNode) cross.get(0); assertEquals(hello.getInputPorts().getByName("name"), portNode.getInputProcessorPort()); assertEquals(0, portNode.getDesiredDepth().intValue()); }