/** * For each processor input, merge input and workflow output get the * incoming link and, if non null, add to a list and return the entire list. */ public synchronized List<? extends Datalink> getLinks() { List<Datalink> result = new ArrayList<Datalink>(); // All processors have a set of input ports each of which has at most // one incoming data link for (TokenProcessingEntity p : getEntities(TokenProcessingEntity.class)) { for (EventHandlingInputPort pip : p.getInputPorts()) { Datalink dl = pip.getIncomingLink(); if (dl != null) { result.add(dl); } } } // Workflow outputs have zero or one incoming data link to their // internal input port for (DataflowOutputPort dop : getOutputPorts()) { Datalink dl = dop.getInternalInputPort().getIncomingLink(); if (dl != null) { result.add(dl); } } return result; }
/** * Creates a MergeImpl instance, using the sinkPort to generate its name, * which is the name of the port appended with 'Merge'. */ public Merge createMerge(EventHandlingInputPort sinkPort) { String mergeName = sinkPort.getName() + "Merge"; return new MergeImpl(mergeName); }
/** * Forward the specified event to all targets * * @param e */ public void sendEvent(WorkflowDataToken e) { for (Datalink link : outgoingLinks) { link.getSink().receiveEvent(e); } }
link = (Datalink) workflowInput_1.getInternalOutputPort() .getOutgoingLinks().toArray()[0]; assertEquals("input_1", link.getSink().getName()); assertEquals("input_2", link.getSink().getName()); .getIncomingLink().getSource().getName()); assertEquals("output_2", workflowOutput_2.getInternalInputPort() .getIncomingLink().getSource().getName());
Edit<?> edit = null; Datalink incomingLink = sink.getIncomingLink(); if (incomingLink == null) { Datalink datalink = edits.createDatalink(source, sink); .getSource().getName() + "To" + merge.getLocalName() + "_input", counter++), incomingLink.getSink() .getDepth()); editList.add(edits.getAddMergeInputPortEdit(merge, mergeInputPort)); + "To" + merge.getLocalName() + "_input", counter), sink.getDepth()); editList.add(edits.getAddMergeInputPortEdit(merge, mergeInputPort)); Datalink datalink = edits.createDatalink(source, mergeInputPort);
@Override protected void doEditAction(MergeImpl mergeImpl) throws EditException { Edits edits = new EditsImpl(); mergeInputPort = new MergeInputPortImpl(mergeImpl,sourcePort.getName()+"_tomerge",sinkPort.getDepth()); inLink = edits.createDatalink(sourcePort, mergeInputPort); connectInLinkEdit=edits.getConnectDatalinkEdit(inLink); if (mergeImpl.getOutputPort().getOutgoingLinks().size()==0) { outLink = edits.createDatalink(mergeImpl.getOutputPort(), sinkPort); connectOutLinkEdit=edits.getConnectDatalinkEdit(outLink); } else if (mergeImpl.getOutputPort().getOutgoingLinks().size()==1){ if (mergeImpl.getOutputPort().getOutgoingLinks().toArray(new Datalink[]{})[0].getSink() != sinkPort) { throw new EditException("Cannot add a different sinkPort to a Merge that already has one defined"); } } else { throw new EditException("The merge instance cannot have more that 1 outgoing Datalink"); } mergeImpl.addInputPort(mergeInputPort); connectInLinkEdit.doEdit(); if (connectOutLinkEdit!=null) connectOutLinkEdit.doEdit(); }
link = (Datalink) workflowInput_1.getInternalOutputPort() .getOutgoingLinks().toArray()[0]; assertEquals("input_1", link.getSink().getName()); assertEquals("input_2", link.getSink().getName()); .getIncomingLink().getSource().getName()); assertEquals("output_2", workflowOutput_2.getInternalInputPort() .getIncomingLink().getSource().getName());
Edit<?> edit = null; Datalink incomingLink = sink.getIncomingLink(); if (incomingLink == null) { Datalink datalink = edits.createDatalink(source, sink); .getSource().getName() + "To" + merge.getLocalName() + "_input", counter++), incomingLink.getSink().getDepth()); editList.add(edits.getAddMergeInputPortEdit(merge, mergeInputPort)); getUniqueMergeInputPortName(merge, source.getName() + "To" + merge.getLocalName() + "_input", counter), sink .getDepth()); editList.add(edits.getAddMergeInputPortEdit(merge, mergeInputPort)); Datalink datalink = edits.createDatalink(source, mergeInputPort);
@Override protected void doEditAction(MergeImpl mergeImpl) throws EditException { Edits edits = new EditsImpl(); String name = Tools.getUniqueMergeInputPortName(mergeImpl, sourcePort.getName()+"To" + merge.getLocalName() + "_input", 0); mergeInputPort = new MergeInputPortImpl(mergeImpl,name,sinkPort.getDepth()); inLink = edits.createDatalink(sourcePort, mergeInputPort); connectInLinkEdit=edits.getConnectDatalinkEdit(inLink); if (mergeImpl.getOutputPort().getOutgoingLinks().size()==0) { outLink = edits.createDatalink(mergeImpl.getOutputPort(), sinkPort); connectOutLinkEdit=edits.getConnectDatalinkEdit(outLink); } else if (mergeImpl.getOutputPort().getOutgoingLinks().size()==1){ if (mergeImpl.getOutputPort().getOutgoingLinks().toArray(new Datalink[]{})[0].getSink() != sinkPort) { throw new EditException("Cannot add a different sinkPort to a Merge that already has one defined"); } } else { throw new EditException("The merge instance cannot have more that 1 outgoing Datalink"); } mergeImpl.addInputPort(mergeInputPort); connectInLinkEdit.doEdit(); if (connectOutLinkEdit!=null) connectOutLinkEdit.doEdit(); }
link = (Datalink) workflowInput_1.getInternalOutputPort() .getOutgoingLinks().toArray()[0]; assertEquals("input_1", link.getSink().getName()); assertEquals("input_2", link.getSink().getName()); .getIncomingLink().getSource().getName()); assertEquals("output_2", workflowOutput_2.getInternalInputPort() .getIncomingLink().getSource().getName());
/** * For each processor input, merge input and workflow output get the * incoming link and, if non null, add to a list and return the entire list. */ public synchronized List<? extends Datalink> getLinks() { List<Datalink> result = new ArrayList<Datalink>(); // All processors have a set of input ports each of which has at most // one incoming data link for (TokenProcessingEntity p : getEntities(TokenProcessingEntity.class)) { for (EventHandlingInputPort pip : p.getInputPorts()) { Datalink dl = pip.getIncomingLink(); if (dl != null) { result.add(dl); } } } // Workflow outputs have zero or one incoming data link to their // internal input port for (DataflowOutputPort dop : getOutputPorts()) { Datalink dl = dop.getInternalInputPort().getIncomingLink(); if (dl != null) { result.add(dl); } } return result; }
private EventHandlingInputPort findInputPort(Processor processor, String name) { for (EventHandlingInputPort inputPort : processor.getInputPorts()) { if (inputPort.getName().equals(name)) { return inputPort; } } return null; }
/** * Forward the specified event to all targets * * @param e */ public void sendEvent(WorkflowDataToken e) { for (Datalink link : outgoingLinks) { link.getSink().receiveEvent(e); } }
@Override protected void doEditAction(MergeImpl mergeImpl) throws EditException { Edits edits = new EditsImpl(); String name = Tools.getUniqueMergeInputPortName(mergeImpl, sourcePort.getName()+"To" + merge.getLocalName() + "_input", 0); mergeInputPort = new MergeInputPortImpl(mergeImpl,name,sinkPort.getDepth()); inLink = edits.createDatalink(sourcePort, mergeInputPort); connectInLinkEdit=edits.getConnectDatalinkEdit(inLink); if (mergeImpl.getOutputPort().getOutgoingLinks().size()==0) { outLink = edits.createDatalink(mergeImpl.getOutputPort(), sinkPort); connectOutLinkEdit=edits.getConnectDatalinkEdit(outLink); } else if (mergeImpl.getOutputPort().getOutgoingLinks().size()==1){ if (mergeImpl.getOutputPort().getOutgoingLinks().toArray(new Datalink[]{})[0].getSink() != sinkPort) { throw new EditException("Cannot add a different sinkPort to a Merge that already has one defined"); } } else { throw new EditException("The merge instance cannot have more that 1 outgoing Datalink"); } mergeImpl.addInputPort(mergeInputPort); connectInLinkEdit.doEdit(); if (connectOutLinkEdit!=null) connectOutLinkEdit.doEdit(); }
EventHandlingInputPort inputPort_2 = null; for (EventHandlingInputPort input : processor.getInputPorts()) { if (input.getName().equals("input_1")) { inputPort_1 = input; } else if (input.getName().equals("input_2")) { inputPort_2 = input; } else { fail("Input port found with unexpected name:" + input.getName()); .getSink(); assertTrue(inputPort_1.getIncomingLink().getSource() instanceof MergeOutputPort); .getIncomingLink().getSource(); assertFalse(inputPort_2.getIncomingLink().getSource() instanceof MergeOutputPortImpl);
/** * For each processor input, merge input and workflow output get the * incoming link and, if non null, add to a list and return the entire list. */ public synchronized List<? extends Datalink> getLinks() { List<Datalink> result = new ArrayList<Datalink>(); // All processors have a set of input ports each of which has at most // one incoming data link for (TokenProcessingEntity p : getEntities(TokenProcessingEntity.class)) { for (EventHandlingInputPort pip : p.getInputPorts()) { Datalink dl = pip.getIncomingLink(); if (dl != null) { result.add(dl); } } } // Workflow outputs have zero or one incoming data link to their // internal input port for (DataflowOutputPort dop : getOutputPorts()) { Datalink dl = dop.getInternalInputPort().getIncomingLink(); if (dl != null) { result.add(dl); } } return result; }
@Override public String toString() { return "link("+resolvedDepth+")"+source.getName()+":"+sink.getName(); }
/** * Forward the specified event to all targets * * @param e */ public void sendEvent(WorkflowDataToken e) { for (Datalink link : outgoingLinks) { link.getSink().receiveEvent(e); } }
EventHandlingInputPort inputPort_2 = null; for (EventHandlingInputPort input : processor.getInputPorts()) { if (input.getName().equals("input_1")) { inputPort_1 = input; } else if (input.getName().equals("input_2")) { inputPort_2 = input; } else { fail("Input port found with unexpected name:" + input.getName()); .getSink(); assertTrue(inputPort_1.getIncomingLink().getSource() instanceof MergeOutputPort); .getIncomingLink().getSource(); assertFalse(inputPort_2.getIncomingLink().getSource() instanceof MergeOutputPortImpl);
private void addMergedDatalink(EventForwardingOutputPort sourcePort, EventHandlingInputPort sinkPort, Dataflow targetDataflow) throws EditException, WorkflowTranslationException { Merge merge = null; if (sinkPort.getIncomingLink() == null) { merge = edits.createMerge(targetDataflow); // Add to the dataflow edits.getAddMergeEdit(targetDataflow, merge).doEdit(); } else { if (sinkPort.getIncomingLink().getSource() instanceof MergeOutputPort) { merge = ((MergeOutputPort) sinkPort.getIncomingLink() .getSource()).getMerge(); } else { // FIXME: what to do when a Taverna 1 workflow has 2 inputs to a // single port that isn't a merge?? For now throw an exception throw new WorkflowTranslationException( "Unable to translate a workflow that has multiple un-merged inputs to a single port."); } } edits.getConnectMergedDatalinkEdit(merge, sourcePort, sinkPort) .doEdit(); }