private void prepareJobProperties(ExecutableNode node) throws IOException { if (node instanceof ExecutableFlow) { return; } Props props = null; // 1. Shared properties (i.e. *.properties) for the jobs only. This takes // the // least precedence if (!(node instanceof ExecutableFlowBase)) { String sharedProps = node.getPropsSource(); if (sharedProps != null) { props = this.sharedProps.get(sharedProps); } } // The following is the hiearchical ordering of dependency resolution // 2. Parent Flow Properties ExecutableFlowBase parentFlow = node.getParentFlow(); if (parentFlow != null) { Props flowProps = Props.clone(parentFlow.getInputProps()); flowProps.setEarliestAncestor(props); props = flowProps; } // 3. Output Properties. The call creates a clone, so we can overwrite it. Props outputProps = collectOutputProps(node); if (outputProps != null) { outputProps.setEarliestAncestor(props); props = outputProps; } // 4. The job source. Props jobSource = loadJobProps(node); if (jobSource != null) { jobSource.setParent(props); props = jobSource; } node.setInputProps(props); }