@Override
		public Element[] walk(Element[] context, JobReference jr) {
			// Producing this kind of construct:
			// <flow">
			//   <step id="sqoop-6e44">
			//	   <tasklet ref="jobRunner-6e44"/>
			//	   <next on="COMPLETED" to="sqoop-e07a"/>
			//	   <next on="FAILED" to="kill1"/>
			//     <fail on="*"/>
			//   </step>
			// </flow>

			// When a split branch only contains a single job reference, no surrounding Flow object is created,
			// so the flow block needs creating here in this case.
			boolean inSplit = currentElement.peek().getTagName().equals("split");
			if (inSplit) {
				Element flow = doc.createElement("flow");
				currentElement.peek().appendChild(flow);
				currentElement.push(flow);
			}
			String stepId = jobReferencesToElementIds.get(jr);
			Element step = createStep(stepId, jr.getName());
			currentElement.peek().appendChild(step);
			jobRunnerBeanNames.add(jr.getName());
			boolean explicitWildcardExit = false;
			if (jr.hasTransitions()) {
				for (Transition t : jr.transitions) {
					if (t.getStateName().equals("*")) {
						explicitWildcardExit = true;
					}
					String targetJob = t.getTargetJobName();
					if (targetJob.equals(Transition.END)) {
						addEndAttribute(step, t.getStateName());
						continue;
					}
					else if (targetJob.equals(Transition.FAIL)) {
						addFailAttribute(step, t.getStateName());
						continue;
					}
					Map<String, String> transitionNamesToElementIdsInCurrentFlow = transitionNamesToElementIdsInFlow.peek();
					if (transitionNamesToElementIdsInCurrentFlow.containsKey(targetJob)) {
						// already exists, share the ID
						targetJob = transitionNamesToElementIdsInCurrentFlow.get(targetJob);
					}
					else {
						// Is this a reference to a job that already exists elsewhere in this composed job definition?
						String id = getReferenceToExistingJob(targetJob);
						if (id == null) {
							// create an entry, this is the first reference to this target job in this flow
							id = getNextStepId(targetJob);
							transitionNamesToElementIdsInCurrentFlow.put(targetJob, id);
							if (inSplit) {
								// If a job reference is directly inside a split with no surrounding flow to create
								// the steps collected in 'existingTransitionSteps' then it needs to be done here.
								Element transitionStep = createStep(id, t.getTargetJobName());
								currentElement.peek().appendChild(transitionStep);
							}
						}
						targetJob = id;
					}
					addNextAttribute(step, t.getStateName(), targetJob);
					jobRunnerBeanNames.add(t.getTargetJobName());
				}
				if (inSplit) {
					// The split is the element that will be analyzed to see if all exit
					// statuses are covered. So for a job reference created here we need to
					// ensure we do the analysis here.
					if (!isMappingExitStatus(step, "*")) {
						addFailAttribute(step, "*");
					}
				}
			}
			if (context != null) {
				// context is an array of earlier elements that should be updated now to point to this one
				for (Element element : context) {
					addNextAttribute(element, "COMPLETED", stepId);
					if (!isMappingExitStatus(element, "*")) {
						addFailAttribute(element, "*");
					}
				}
			}
			if (inSplit) {
				currentElement.pop();
			}
			return explicitWildcardExit ? new Element[] {} : new Element[] { step };
		}
Visit a job reference. Rules:
<ul>
<li>The flow surrounding element for the step is created if inside a split
</ul>
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/job/dsl/JobSpecification.java