protected internal virtual void ParseValidation(Element formField, FormFieldHandler formFieldHandler, BpmnParse bpmnParse, ExpressionManager expressionManager) { var validationElement = formField.ElementNs(BpmnParse.CamundaBpmnExtensionsNs, "validation"); if (validationElement != null) { var constraintElements = validationElement.ElementsNS( BpmnParse.CamundaBpmnExtensionsNs.NamespaceUri, "constraint"); foreach (var property in constraintElements) { var validator = Context.ProcessEngineConfiguration.FormValidators.CreateValidator(property, bpmnParse, expressionManager); var validatorName = property.GetAttributeValue("name"); var validatorConfig = property.GetAttributeValue("config"); if (validator != null) { var handler = new FormFieldValidationConstraintHandler(); handler.Name = validatorName; handler.Config = validatorConfig; handler.Validator = validator; formFieldHandler.ValidationHandlers.Add(handler); } } } }
public DefaultFormFieldValidatorContext(IVariableScope variableScope, string configuration, IVariableMap submittedValues, FormFieldHandler formFieldHandler) { this.variableScope = variableScope; this.configuration = configuration; this.submittedValues = submittedValues; this.formFieldHandler = formFieldHandler; }
protected internal virtual void ParseFormField(Element formField, BpmnParse bpmnParse, ExpressionManager expressionManager) { var formFieldHandler = new FormFieldHandler(); // parse Id var id = formField.GetAttributeValue("id"); if (ReferenceEquals(id, null) || (id.Length == 0)) { bpmnParse.AddError("attribute id must be set for FormFieldGroup and must have a non-empty value", formField); } else { formFieldHandler.Id = id; } if (id.Equals(BusinessKeyFieldId)) { formFieldHandler.BusinessKey = true; } // parse name var name = formField.GetAttributeValue("label"); if (!ReferenceEquals(name, null)) { IExpression nameExpression = (Bpm.Engine.Impl.EL.IExpression)expressionManager.CreateExpression(name); formFieldHandler.Label = nameExpression; } // parse properties ParseProperties(formField, formFieldHandler, bpmnParse, expressionManager); // parse validation ParseValidation(formField, formFieldHandler, bpmnParse, expressionManager); // parse type var formTypes = FormTypes; var formType = formTypes.ParseFormPropertyType(formField, bpmnParse); formFieldHandler.SetType(formType); // parse default value var defaultValue = formField.GetAttributeValue("defaultValue"); if (!ReferenceEquals(defaultValue, null)) { IExpression defaultValueExpression = (Bpm.Engine.Impl.EL.IExpression)expressionManager.CreateExpression(defaultValue); formFieldHandler.DefaultValueExpression = defaultValueExpression; } FormFieldHandlers.Add(formFieldHandler); }
// submit ///////////////////////////////// public virtual void Validate(object submittedValue, IVariableMap submittedValues, FormFieldHandler formFieldHandler, IVariableScope variableScope) { try { IFormFieldValidatorContext context = new DefaultFormFieldValidatorContext(variableScope, config, submittedValues, formFieldHandler); if (!validator.Validate(submittedValue, context)) { throw new FormFieldValidatorException(formFieldHandler.Id, name, config, submittedValue, "Invalid value submitted for form field '" + formFieldHandler.Id + "': validation of " + this + " failed."); } } catch (FormFieldValidationException e) { throw new FormFieldValidatorException(formFieldHandler.Id, name, config, submittedValue, "Invalid value submitted for form field '" + formFieldHandler.Id + "': validation of " + this + " failed.", e); } }
protected internal virtual void ParseProperties(Element formField, FormFieldHandler formFieldHandler, BpmnParse bpmnParse, ExpressionManager expressionManager) { var propertiesElement = formField.ElementNs(BpmnParse.CamundaBpmnExtensionsNs, "properties"); if (propertiesElement != null) { var propertyElements = propertiesElement.ElementsNS(BpmnParse.CamundaBpmnExtensionsNs, "property"); // use linked hash map to preserve item ordering as provided in XML IDictionary <string, string> propertyMap = new Dictionary <string, string>(); foreach (var property in propertyElements) { var id = property.GetAttributeValue("id"); var value = property.GetAttributeValue("value"); propertyMap[id] = value; } formFieldHandler.Properties = propertyMap; } }