private static void BuildProcedureFromPlan(Procedure procedure, ProcedurePlan plan) { foreach (var stepNode in plan.ProcedureStepNodes) { var className = stepNode.GetAttribute("class"); if (string.IsNullOrEmpty(className)) { throw new ProcedureBuilderException("Required attribute 'class' is missing."); } var stepClass = Type.GetType(className); if (stepClass == null) { throw new ProcedureBuilderException(string.Format("Unable to resolve class {0}.", className)); } var builder = GetBuilderForClass(stepClass); var step = builder.CreateInstance(stepNode, procedure); if (procedure.DowntimeRecoveryMode && !step.CreateInDowntimeMode) { continue; } procedure.AddProcedureStep(step); } }