internal static StepParameter Parse(string parameter) { var product = new StepParameter { PhaseIndex = 0, StepIndex = 0, PropertyName = string.Empty, Value = string.Empty }; var match = Regex.Match(parameter, ParameterRegex, RegexOptions.IgnoreCase); var segments = new List <string>(match.Value.TrimEnd(':').Split('.')); if (segments[0].StartsWith("PHASE", StringComparison.OrdinalIgnoreCase)) { product.PhaseIndex = int.Parse(segments[0].Substring(5)) - 1; segments.RemoveAt(0); } if (!segments[0].StartsWith("STEP", StringComparison.OrdinalIgnoreCase)) { throw new InvalidStepParameterException("Missing step index"); } product.StepIndex = int.Parse(segments[0].Substring(4)) - 1; if (segments.Count > 1) { product.PropertyName = segments[1]; } if (match.Value.Length < parameter.Length) { product.Value = parameter.Substring(match.Value.Length); } return(product); }
private static void SubstituteParameters(Manifest manifest, string[] parameters) { foreach (var parameter in parameters) { var prm = StepParameter.Parse(parameter); if (prm.PhaseIndex < 0 || prm.PhaseIndex > manifest.CountOfPhases - 1) { throw new InvalidStepParameterException("Invalid phase number: " + prm.PhaseIndex + 1); } var phase = manifest.GetPhase(prm.PhaseIndex); if (prm.StepIndex < 0 || prm.StepIndex > phase.Length - 1) { throw new InvalidStepParameterException(String.Format("Invalid step number: {1} (phase: {0})", prm.PhaseIndex + 1, prm.StepIndex + 1)); } var step = phase[prm.StepIndex]; step.SetProperty(prm.PropertyName, prm.Value); } }