/** * 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); }
@Override protected void doEditAction(MergeImpl mergeImpl) throws EditException { if (mergeInputPort instanceof MergeInputPortImpl) { mergeImpl.addInputPort((MergeInputPortImpl) mergeInputPort); } else { throw new EditException("The MergeInputPort is of the wrong implmentation, it should be of type MergeInputPortImpl"); } }
@Override public String toString() { return "Merge " + getLocalName(); } }
@Override protected void doEditAction(MergeImpl merge) throws EditException { oldName = merge.getLocalName(); merge.setName(newName); }
@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(); }
@Override protected void undoEditAction(MergeImpl mergeImpl) { if (mergeInputPort instanceof MergeInputPortImpl) { mergeImpl.removeInputPort((MergeInputPortImpl) mergeInputPort); } }
outputList = partialOutputsByProcess.get(owningProcess); if (outputList == null) { int numPorts = getInputPorts().size(); outputList = new ArrayList<T2Reference>(Collections.nCopies(numPorts, (T2Reference)null)); partialOutputsByProcess.put(owningProcess, outputList); int portIndex = inputPortNameToIndex(portName); if (portIndex == -1) { throw new WorkflowStructureException(
public void receiveEvent(WorkflowDataToken t) { parent.receiveEvent(t, this.name); }
protected void receiveEvent(WorkflowDataToken token, String portName) { int portIndex = inputPortNameToIndex(portName); if (portIndex == -1) { throw new WorkflowStructureException( "Received event on a port that doesn't exist, huh?"); } int[] currentIndex = token.getIndex(); int[] newIndex = new int[currentIndex.length + 1]; newIndex[0] = portIndex; for (int i = 0; i < currentIndex.length; i++) { newIndex[i + 1] = currentIndex[i]; } output.sendEvent(new WorkflowDataToken(token.getOwningProcess(), newIndex, token.getData(), token.getContext())); }
@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(); }
@Override protected void undoEditAction(MergeImpl mergeImpl) { if (mergeInputPort instanceof MergeInputPortImpl) { mergeImpl.removeInputPort((MergeInputPortImpl) mergeInputPort); } }
outputList = partialOutputsByProcess.get(owningProcess); if (outputList == null) { int numPorts = getInputPorts().size(); outputList = new ArrayList<T2Reference>(Collections.nCopies(numPorts, (T2Reference)null)); partialOutputsByProcess.put(owningProcess, outputList); int portIndex = inputPortNameToIndex(portName); if (portIndex == -1) { throw new WorkflowStructureException(
public void receiveEvent(WorkflowDataToken t) { parent.receiveEvent(t, this.name); }
@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(); }
/** * Creates a MergeImpl instance. Merge names are generated as 'Merge0', * 'Merge1', 'Merge2', etc. The next merge to be added always gets the name * as the previous merge in the list with its index incremented by one. If a * merge is deleted, that is not taken into account when generating merges' * names. */ public Merge createMerge(Dataflow dataflow) { String mergeName; // Get all merges for a workflow List<? extends Merge> merges = (List<? extends Merge>) dataflow .getMerges(); if (merges.isEmpty()) { mergeName = "Merge0"; // the first merge to be added to the list } else { String lastMergeName = merges.get(merges.size() - 1).getLocalName(); // Get the index of the last Merge int lastMergeIndex = Integer.parseInt(lastMergeName.substring(5)); mergeName = "Merge" + String.valueOf((lastMergeIndex + 1)); } return new MergeImpl(mergeName); }
@Override protected void undoEditAction(MergeImpl mergeImpl) { if (connectOutLinkEdit!=null) connectOutLinkEdit.undo(); connectInLinkEdit.undo(); mergeImpl.removeInputPort(mergeInputPort); }
/** * Adds a processor on the DataFlow. * * @param processor * the ProcessorImpl to be added to the Dataflow * @return * @throws NamingException * if a processor already exists with the same local name */ protected synchronized void addMerge(MergeImpl merge) throws NamingException { for (Merge existingMerge : merges.toArray(new Merge[] {})) { if (existingMerge.getLocalName().equals(merge.getLocalName())) throw new NamingException( "There already is a merge operation named:" + merge.getLocalName()); } merges.add(merge); }
@Override protected void doEditAction(MergeImpl mergeImpl) throws EditException { if (mergeInputPort instanceof MergeInputPortImpl) { mergeImpl.addInputPort((MergeInputPortImpl) mergeInputPort); } else { throw new EditException("The MergeInputPort is of the wrong implmentation, it should be of type MergeInputPortImpl"); } }
public void receiveEvent(WorkflowDataToken t) { parent.receiveEvent(t, this.name); }
/** * Creates a MergeImpl instance. Merge names are generated as 'Merge0', * 'Merge1', 'Merge2', etc. The next merge to be added always gets the name * as the previous merge in the list with its index incremented by one. If a * merge is deleted, that is not taken into account when generating merges' * names. */ public Merge createMerge(Dataflow dataflow) { String mergeName; // Get all merges for a workflow List<? extends Merge> merges = (List<? extends Merge>) dataflow .getMerges(); if (merges.isEmpty()) { mergeName = "Merge0"; // the first merge to be added to the list } else { String lastMergeName = merges.get(merges.size() - 1).getLocalName(); // Get the index of the last Merge int lastMergeIndex = Integer.parseInt(lastMergeName.substring(5)); mergeName = "Merge" + String.valueOf((lastMergeIndex + 1)); } return new MergeImpl(mergeName); }