public static void PopulateEndPointOverridesFromForm(this Controller controller, FormCollection form, RuleExecutionRequest request, string controlPrefix) { if (form == null || request == null) { throw new Exception("Cannot populate Rule Set Parameters. Form or Request was null."); } var tempContainer = new List <RuleExecutionEndPointOverride>(); foreach (var fieldName in form.AllKeys) { if (fieldName.StartsWith(controlPrefix) && fieldName.EndsWith(Literals.EndPointOverrideKeyNamePart)) { var endPointName = form[fieldName]; if (!String.IsNullOrWhiteSpace(endPointName)) { var endPointOverride = new RuleExecutionEndPointOverride { EndPointName = endPointName }; var paramContainer = new List <RuleExecutionEndPointProperty>(); var prefixText = Regex.Match(fieldName, "^" + controlPrefix + @"\d+", RegexOptions.RightToLeft); foreach (var childFieldName in form.AllKeys) { if (childFieldName.StartsWith(prefixText + Literals.ParamNameKeyPart)) { var paramName = form[childFieldName]; if (!String.IsNullOrWhiteSpace(paramName)) { var parameter = new RuleExecutionEndPointProperty { Name = paramName.Trim() }; var suffixText = Regex.Match(childFieldName, @"\d+$", RegexOptions.RightToLeft); if (suffixText.Success) { int suffixCount; if (int.TryParse(suffixText.Value, out suffixCount)) { parameter.Value = form[prefixText + Literals.ParamValueKeyPart + suffixCount]; } } paramContainer.Add(parameter); } } } endPointOverride.Properties = paramContainer; tempContainer.Add(endPointOverride); } } } request.EndPointOverrides = tempContainer; }
private static void AssignEndPointOverrideProperty(RuleSession session, EndPointDef endPointDef, RuleExecutionEndPointProperty property) { if (String.IsNullOrEmpty(property.Name)) { throw new Exception(String.Format("No name was provided for a property override on endpoint '{0}'", endPointDef.Name)); } // check the type of the end point var endPointType = endPointDef.GetType(); if (endPointType == typeof(DatabaseConnection)) { switch (property.Name.ToLower()) { case "connectionstring": session.Overrides.OverrideDatabaseConnection(endPointDef.Name, property.Value); return; } } else if (endPointType == typeof(WebServiceDef)) { switch (property.Name.ToLower()) { case "address": session.Overrides.OverrideWebServiceAddress(endPointDef.Name, property.Value); return; case "certificate": session.Overrides.OverrideWebServiceCertificate(endPointDef.Name, property.Value); return; case "wsdladdress": session.Overrides.OverrideWebServiceWsdlAddress(endPointDef.Name, property.Value); return; } } else if (endPointType == typeof(SendMailServerDef)) { switch (property.Name.ToLower()) { case "address": session.Overrides.OverrideMailServerConnection(endPointDef.Name, property.Value); return; } } // throw down here, unsupported throw new Exception(String.Format("The property '{0}' on endpoint type '{1}' is currently not supported for override.", property.Name, endPointType.Name)); }