public void receiveResult()

in taverna-workflowmodel-extensions/src/main/java/org/apache/taverna/workflowmodel/processor/dispatch/layers/Loop.java [316:380]


		public void receiveResult(Map<String, T2Reference> data, int[] index) {
			if (index.length > 0) {
				// Ignore streaming
				return;
			}
			T2Reference loopRef = data.get(LOOP_PORT);
			if (loopRef == null) {
				fail("Condition service didn't contain output port " + LOOP_PORT);
				return;
			}
			if (loopRef.containsErrors()) {
				fail("Condition service failed: " + loopRef);
				return;
			}
			if (loopRef.getDepth() != 0) {
				fail("Condition service output " + LOOP_PORT
						+ " depth is not 0, but " + loopRef.getDepth());
			}
			ReferenceService referenceService = context.getReferenceService();
			String loop = (String) referenceService.renderIdentifier(loopRef,
					String.class, context);

			if (Boolean.parseBoolean(loop)) {
				// Push it down again
				AbstractDispatchEvent dispatchEvent;
				synchronized (incomingJobs) {
					dispatchEvent = incomingJobs.get(jobIdentifier);
				}
				if (dispatchEvent == null) {
					fail("Unknown job identifier " + jobIdentifier);
				}
				if (dispatchEvent instanceof DispatchJobEvent) {
					DispatchJobEvent newJobEvent = prepareNewJobEvent(data,
							dispatchEvent);
					getBelow().receiveJob(newJobEvent);
				} else if (dispatchEvent instanceof DispatchJobQueueEvent) {
					getBelow().receiveJobQueue(
							(DispatchJobQueueEvent) dispatchEvent);
				} else {
					fail("Unknown type of incoming event " + dispatchEvent);
				}
				return;

			} else {
				// We'll push it up, end of loop for now

				AbstractDispatchEvent outgoingEvent;
				synchronized (outgoingJobs) {
					outgoingEvent = outgoingJobs.get(jobIdentifier);
				}
				if (outgoingEvent == null && !config.get("runFirst").asBoolean()) {
					fail("Initial loop condition failed");
				}
				if (outgoingEvent instanceof DispatchCompletionEvent) {
					getAbove().receiveResultCompletion(
							(DispatchCompletionEvent) outgoingEvent);
				} else if (outgoingEvent instanceof DispatchResultEvent) {
					getAbove().receiveResult(
							(DispatchResultEvent) outgoingEvent);
				} else {
					fail("Unknown type of outgoing event " + outgoingEvent);
				}
			}

		}