@Override public void setParent(Workflow parent) { if (this.parent != null && this.parent != parent) { this.parent.getControlLinks().remove(this); } this.parent = parent; if (parent != null) { parent.getControlLinks().add(this); } }
@SuppressWarnings("unchecked") public List<BlockingControlLink> controlLinksBlocking(Processor blocked) { List<BlockingControlLink> controlLinks = new ArrayList<BlockingControlLink>(); for (ControlLink link : blocked.getParent().getControlLinks()) { if (!(link instanceof BlockingControlLink)) { continue; } BlockingControlLink blockingControlLink = (BlockingControlLink) link; if (blockingControlLink.getBlock().equals(blocked)) { controlLinks.add(blockingControlLink); } } Collections.sort(controlLinks); return controlLinks; }
@SuppressWarnings("unchecked") public List<BlockingControlLink> controlLinksWaitingFor( Processor untilFinished) { List<BlockingControlLink> controlLinks = new ArrayList<BlockingControlLink>(); for (ControlLink link : untilFinished.getParent().getControlLinks()) { if (!(link instanceof BlockingControlLink)) { continue; } BlockingControlLink blockingControlLink = (BlockingControlLink) link; if (blockingControlLink.getUntilFinished().equals(untilFinished)) { controlLinks.add(blockingControlLink); } } Collections.sort(controlLinks); return controlLinks; }
@Override public boolean accept(Visitor visitor) { if (visitor.visitEnter(this)) { List<WorkflowBean> children = new ArrayList<WorkflowBean>(); children.addAll(getInputPorts()); children.addAll(getOutputPorts()); children.addAll(getProcessors()); children.addAll(getDataLinks()); children.addAll(getControlLinks()); children.addAll(Collections.singleton(getCurrentRevision())); for (WorkflowBean bean : children) { if (!bean.accept(visitor)) { break; } } } return visitor.visitLeave(this); }
@Override public void visitWorkflow(Workflow bean) { Set<DataLink> dataLinks = bean.getDataLinks(); Set<ControlLink> controlLinks = bean.getControlLinks();
@Test public void uriForControlLink() throws Exception { Processor hello = wfBundle.getMainWorkflow().getProcessors() .getByName("Hello"); assertNotNull(hello); ControlLink condition = wfBundle.getMainWorkflow().getControlLinks() .iterator().next(); assertTrue(condition instanceof BlockingControlLink); URI uri = uriTools.uriForBean(condition); assertEquals( HELLOWORLD_URI + "control?block=processor/Hello/&untilFinished=processor/wait4me/", uri.toASCIIString()); }
@Test public void controlLinksWaitingFor() { Processor hello = workflowBundle.getMainWorkflow().getProcessors() .getByName("Hello"); Processor wait4me = workflowBundle.getMainWorkflow().getProcessors() .getByName("wait4me"); ControlLink controlLink = workflowBundle.getMainWorkflow().getControlLinks() .iterator().next(); assertEquals(Collections.singletonList(controlLink), scufl2Tools.controlLinksWaitingFor(wait4me)); assertTrue(scufl2Tools.controlLinksWaitingFor(hello).isEmpty()); }
@Test public void controlLinksBlocking() { Processor hello = workflowBundle.getMainWorkflow().getProcessors() .getByName("Hello"); Processor wait4me = workflowBundle.getMainWorkflow().getProcessors() .getByName("wait4me"); ControlLink controlLink = workflowBundle.getMainWorkflow().getControlLinks() .iterator().next(); assertEquals(Collections.singletonList(controlLink), scufl2Tools.controlLinksBlocking(hello)); assertTrue(scufl2Tools.controlLinksBlocking(wait4me).isEmpty()); }
@SuppressWarnings("unchecked") @Test public void expectedOrder() throws Exception { Workflow wf = new Workflow(); wf.setName("wf"); Processor a = new Processor(wf, "a"); Processor b = new Processor(wf, "b"); Processor c = new Processor(wf, "c"); Processor d = new Processor(wf, "d"); BlockingControlLink b_blocks_c = new BlockingControlLink(c, b); BlockingControlLink a_blocks_c = new BlockingControlLink(c, a); BlockingControlLink a_blocks_b = new BlockingControlLink(b, a); BlockingControlLink b_blocks_d = new BlockingControlLink(d, b); BlockingControlLink a_blocks_d = new BlockingControlLink(d, a); ArrayList<ControlLink> links = new ArrayList<ControlLink>(wf.getControlLinks()); assertEquals(Arrays.asList(a_blocks_b, a_blocks_c, a_blocks_d, b_blocks_c, b_blocks_d), links); Collections.shuffle(links); Collections.sort(links); assertEquals(Arrays.asList(a_blocks_b, a_blocks_c, a_blocks_d, b_blocks_c, b_blocks_d), links); }
ArrayList<ControlLink> links = new ArrayList<ControlLink>(wf.getControlLinks()); assertEquals(Arrays.asList(null_blocks_null, null_blocks_c, a_blocks_b, b_blocks_null, b_blocks_c), links);
List<ControlLink> controlLinks = new ArrayList<ControlLink>(wf.getControlLinks()); if (!controlLinks.isEmpty()) { newLine(2);