@Override
		public void run() {
			if(workflow.getContext() == null) {
				workflow.setContext(new Context());
			}

			if (AzotConfig.GLOBAL.DEBUG) {
				System.out.println("Reading " + workflowFile + "...");
			}

			final List<Variable> contextVariables = workflow.getContext().getVariables();
			for (final Variable contextVariable : contextVariables) {
				String value = VariableHelper.substituteVariables(contextVariable.getValue(), inheritedVariables);
				value = VariableHelper.substituteVariables(value, contextVariables);
				if (AzotConfig.GLOBAL.DEBUG) {
					System.out.println("Reading variable: ${" + contextVariable.getId() + "} = " + value + " (overwrite=" + contextVariable.isOverwrite() + ")");
				}
				contextVariable.setValue(value);
			}


			// Add inherited variables which are not already present into context variables 
			for (final Variable inheritVariable : inheritedVariables) 
			{
				Variable existingContextVariable = VariableHelper.exist(inheritVariable.getId(), contextVariables);
				if (existingContextVariable == null) {
					contextVariables.add(inheritVariable);	    			
				}
				else {
					if(!existingContextVariable.isOverwrite()) {
						existingContextVariable.setValue(inheritVariable.getValue());
						if (AzotConfig.GLOBAL.DEBUG) {
							System.out.println("Setting variable: ${" + existingContextVariable.getId() + "} = " + existingContextVariable.getValue());
						}
					}
				}
			}

			if (AzotConfig.GLOBAL.VERBOSE) {
				System.out.println("Starting workflow '" + workflow.getName() + "'");
			}

			new WorkflowEngine(workflow).start();
		}