LocalComponentRegistry componentRegistry = new LocalComponentRegistry(WSDL_DIRECTORY);
// WRF_STATIC_PREPROCESSOR_WSDL
Component wrfPreComp = componentRegistry.getComponent(WRF_STATIC_PREPROCESSOR_WSDL);
Node wrfPreNode = workflow.addNode(wrfPreComp);
wrfPreNode.setPosition(new Point(313, 0));
// TERRAIN_PREPROCESSOR_WSDL
Component terrainPreComp = componentRegistry.getComponent(TERRAIN_PREPROCESSOR_WSDL);
Node terrainPreNode = workflow.addNode(terrainPreComp);
terrainPreNode.setPosition(new Point(59, 289));
// ADAS_INTERPOLATOR_WSDL
Component adasIntComp = componentRegistry.getComponent(ADAS_INTERPOLATOR_WSDL);
Node adasIntNode = workflow.addNode(adasIntComp);
adasIntNode.setPosition(new Point(373, 235));
// LATERAL_BOUNDARY_INTERPOLATOR_WSDL
Component lateralIntComp = componentRegistry.getComponent(LATERAL_BOUNDARY_INTERPOLATOR_WSDL);
Node lateralIntNode = workflow.addNode(lateralIntComp);
lateralIntNode.setPosition(new Point(371, 369));
// ARPS2WRF_INTERPOLATOR_WSDL
Component arp2wrfComp = componentRegistry.getComponent(ARPS2WRF_INTERPOLATOR_WSDL);
Node arp2wrfNode = workflow.addNode(arp2wrfComp);
arp2wrfNode.setPosition(new Point(607, 104));
// WRF_FORECASTING_MODEL_WSDL
Component wrfComp = componentRegistry.getComponent(WRF_FORECASTING_MODEL_WSDL);
Node wrfNode = workflow.addNode(wrfComp);
wrfNode.setPosition(new Point(781, 14));
// Parameters
Component inputComponent = new InputComponent();
Component outputComponent = new OutputComponent();
// Input parameter node
InputNode confInput = (InputNode) workflow.addNode(inputComponent);
confInput.setPosition(new Point(0, 100));
// Input parameter node
InputNode adasInput = (InputNode) workflow.addNode(inputComponent);
adasInput.setPosition(new Point(286, 145));
// Input parameter node
InputNode namInput = (InputNode) workflow.addNode(inputComponent);
namInput.setPosition(new Point(179, 438));
// Output parameter
OutputNode outParamNode = (OutputNode) workflow.addNode(outputComponent);
outParamNode.setPosition(new Point(863, 169));
// Connect ports
graph.addEdge(confInput.getOutputPort(0), wrfPreNode.getInputPort(0));
graph.addEdge(confInput.getOutputPort(0), arp2wrfNode.getInputPort(0));
graph.addEdge(confInput.getOutputPort(0), adasIntNode.getInputPort(1));
graph.addEdge(confInput.getOutputPort(0), lateralIntNode.getInputPort(1));
graph.addEdge(confInput.getOutputPort(0), terrainPreNode.getInputPort(0));
graph.addEdge(terrainPreNode.getOutputPort(0), adasIntNode.getInputPort(2));
graph.addEdge(terrainPreNode.getOutputPort(0), lateralIntNode.getInputPort(0));
graph.addEdge(adasInput.getOutputPort(0), adasIntNode.getInputPort(0));
graph.addEdge(namInput.getOutputPort(0), lateralIntNode.getInputPort(2));
graph.addEdge(wrfPreNode.getOutputPort(0), arp2wrfNode.getInputPort(1));
graph.addEdge(adasIntNode.getOutputPort(0), arp2wrfNode.getInputPort(2));
graph.addEdge(lateralIntNode.getOutputPort(0), arp2wrfNode.getInputPort(3));
graph.addEdge(arp2wrfNode.getOutputPort(0), wrfNode.getInputPort(0));
graph.addEdge(wrfNode.getOutputPort(0), outParamNode.getInputPort(0));
// Add metadata
String inputMetadata = "<appinfo "
+ "xmlns:lsm=\"http://www.extreme.indiana.edu/namespaces/2006/lead-service-metadata\">"
+ "<lsm:constraints>" + "<lsm:constraint type=\"temporalSync\">"