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); }
@Override protected void cloneInto(WorkflowBean clone, Cloning cloning) { PortNode cloneNode = (PortNode)clone; cloneNode.setDesiredDepth(getDesiredDepth()); cloneNode.setInputProcessorPort(cloning.cloneOrOriginal(getInputProcessorPort())); }
protected void parsePortNode(PortNode original) { org.apache.taverna.scufl2.api.iterationstrategy.PortNode node = new org.apache.taverna.scufl2.api.iterationstrategy.PortNode(); node.setParent(getParserState().getCurrent( IterationStrategyParent.class)); if (original.getDesiredDepth() != null) node.setDesiredDepth(original.getDesiredDepth().getValue()); mapBean(getParserState().getCurrentBase().resolve(original.getAbout()), node); URI inputPortUri = getParserState().getCurrentBase().resolve( original.getIterateOverInputPort().getResource()); org.apache.taverna.scufl2.api.port.InputProcessorPort inputPort = (org.apache.taverna.scufl2.api.port.InputProcessorPort) resolveBeanUri(inputPortUri); node.setInputProcessorPort(inputPort); }
public PortNode(IterationStrategyParent parent, InputProcessorPort inputProcessorPort) { setParent(parent); setInputProcessorPort(inputProcessorPort); }
public IterationStrategyStack makeIterationStrategyStack( InputProcessorPort... inputs) { IterationStrategyStack stack = new IterationStrategyStack(); CrossProduct crossProduct = new CrossProduct(); crossProduct.setParent(stack); for (InputProcessorPort inp : inputs) { PortNode n = new PortNode(crossProduct, inp); n.setDesiredDepth(0); } return stack; }
protected IterationStrategyNode parseIterationStrategyNode( IterationNode topNode) throws ReaderException { if (topNode instanceof PortProduct) { PortProduct portProduct = (PortProduct) topNode; PortNode portNode = new PortNode(); portNode.setDesiredDepth(portProduct.getDepth().intValue()); String name = portProduct.getName(); Processor processor = parserState.get().getCurrentProcessor(); InputProcessorPort inputProcessorPort = processor.getInputPorts() .getByName(name); portNode.setInputProcessorPort(inputProcessorPort); return portNode; } IterationStrategyNode node; if (topNode instanceof DotProduct) node = new org.apache.taverna.scufl2.api.iterationstrategy.DotProduct(); else if (topNode instanceof CrossProduct) node = new org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct(); else throw new ReaderException("Invalid node " + topNode); @SuppressWarnings("unchecked") List<IterationStrategyNode> children = (List<IterationStrategyNode>) node; IterationNodeParent parent = (IterationNodeParent) topNode; for (IterationNode child : parent.getCrossOrDotOrPort()) children.add(parseIterationStrategyNode(child)); return node; }
@Test public void testCorrectnessOfMissingDepth() { PortNode pn = new PortNode(); InputProcessorPort ipp = new InputProcessorPort(); pn.setInputProcessorPort(ipp); CorrectnessValidator cv = new CorrectnessValidator(); ReportCorrectnessValidationListener rcvl = new ReportCorrectnessValidationListener(); cv.checkCorrectness(pn, false, rcvl); Set<NegativeValueProblem> negativeValueProblems = rcvl.getNegativeValueProblems(); assertEquals(Collections.EMPTY_SET, negativeValueProblems); Set<NullFieldProblem> nullFieldProblems = rcvl.getNullFieldProblems(); assertEquals(Collections.EMPTY_SET, nullFieldProblems); // only done when completeness check }
iss.add(cp); cp.setParent(iss); PortNode pn = new PortNode(); pn.setInputProcessorPort(ipp); cp.add(pn); pn.setParent(cp);
@Override public String toString() { return getClass().getSimpleName() + " for " + getInputProcessorPort(); }
@Test public void dotProductNotEqual() throws Exception { DotProduct dotProd1 = new DotProduct(); DotProduct dotProd2 = new DotProduct(); dotProd2.add(new PortNode()); assertNotEquals(dotProd1, dotProd2); }
/** * Get all the annotations that pertain to this port node. * * @return The collection of annotations. * @see Scufl2Tools#annotationsFor(Child) */ public Collection<Annotation> getAnnotations() { return getTools().annotationsFor(this); }
private CrossProduct getCross(int depthA, int depthB) { a = new InputProcessorPort(); a.setName("a"); a.setDepth(0); CrossProduct cp = new CrossProduct(); PortNode nipn1 = new PortNode(cp, a); nipn1.setDesiredDepth(depthA); b = new InputProcessorPort(); b.setName("b"); b.setDepth(0); PortNode nipn2 = new PortNode(cp, b); nipn2.setDesiredDepth(depthB); return cp; }
@Test public void testCorrectnessOfDesiredDepthSpecifiedIncorrectly() { PortNode pn = new PortNode(); Integer desiredDepth = new Integer(-3); pn.setDesiredDepth(desiredDepth); InputProcessorPort ipp = new InputProcessorPort(); pn.setInputProcessorPort(ipp); CorrectnessValidator cv = new CorrectnessValidator(); ReportCorrectnessValidationListener rcvl = new ReportCorrectnessValidationListener(); cv.checkCorrectness(pn, false, rcvl); Set<NegativeValueProblem> negativeValueProblems = rcvl.getNegativeValueProblems(); assertEquals(1, negativeValueProblems.size()); if (!negativeValueProblems.isEmpty()) { NegativeValueProblem problem = negativeValueProblems.iterator().next(); assertEquals(problem.getBean(), pn); assertEquals(problem.getFieldName(), "desiredDepth"); assertEquals(problem.getFieldValue(), desiredDepth); } Set<NullFieldProblem> nullFieldProblems = rcvl.getNullFieldProblems(); assertEquals(Collections.EMPTY_SET, nullFieldProblems); // only done when completeness check }
@Test public void testCompletenessOfMissingDepth() { PortNode pn = new PortNode(); InputProcessorPort ipp = new InputProcessorPort(); pn.setInputProcessorPort(ipp); CorrectnessValidator cv = new CorrectnessValidator(); ReportCorrectnessValidationListener rcvl = new ReportCorrectnessValidationListener(); cv.checkCorrectness(pn, true, rcvl); Set<NegativeValueProblem> negativeValueProblems = rcvl.getNegativeValueProblems(); assertEquals(Collections.EMPTY_SET, negativeValueProblems); Set<NullFieldProblem> nullFieldProblems = rcvl.getNullFieldProblems(); assertFalse(nullFieldProblems.isEmpty()); boolean depthFieldProblem = false; for (NullFieldProblem nlp : nullFieldProblems) { if (nlp.getBean().equals(pn) && nlp.getFieldName().equals("desiredDepth")) { depthFieldProblem = true; } } assertTrue(depthFieldProblem); }
@Test public void testInScopeInputProcessorPort() { Processor p = new Processor(); InputProcessorPort ipp = new InputProcessorPort(); ipp.setParent(p); IterationStrategyStack iss = new IterationStrategyStack(); p.setIterationStrategyStack(iss); CrossProduct cp = new CrossProduct(); iss.add(cp); cp.setParent(iss); PortNode pn = new PortNode(); pn.setInputProcessorPort(ipp); cp.add(pn); pn.setParent(cp); CorrectnessValidator cv = new CorrectnessValidator(); ReportCorrectnessValidationListener rcvl = new ReportCorrectnessValidationListener(); cv.checkCorrectness(pn, false, rcvl); Set<OutOfScopeValueProblem> outOfScopeValueProblems = rcvl.getOutOfScopeValueProblems(); assertEquals(Collections.EMPTY_SET, outOfScopeValueProblems); }
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; }
@Test public void crossProductNotEqual() throws Exception { CrossProduct crossProd1 = new CrossProduct(); CrossProduct crossProd2 = new CrossProduct(); crossProd2.add(new PortNode()); assertNotEquals(crossProd1, crossProd2); }
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()); } }
private DotProduct getDot(int depthA, int depthB) { a = new InputProcessorPort(); a.setName("a"); a.setDepth(0); DotProduct dp = new DotProduct(); PortNode nipn1 = new PortNode(dp, a); nipn1.setDesiredDepth(depthA); b = new InputProcessorPort(); b.setName("b"); b.setDepth(0); PortNode nipn2 = new PortNode(dp, b); nipn2.setDesiredDepth(depthB); return dp; }
@Test public void testCompletenessOfDepthSpecifiedIncorrectly() { PortNode pn = new PortNode(); Integer desiredDepth = new Integer(-3); pn.setDesiredDepth(desiredDepth); InputProcessorPort ipp = new InputProcessorPort(); pn.setInputProcessorPort(ipp);