public void Initialize() { _result = new WorkflowDataValidationResult(); _propertyType = new PropertyType { PrimitiveType = PropertyPrimitiveType.Text }; }
public void Initialize() { _result = new WorkflowDataValidationResult(); _propertyType = new PropertyType { PrimitiveType = PropertyPrimitiveType.User }; _users = new List <SqlUser>(); _groups = new List <SqlGroup>(); }
public override void Validate(IePropertyChangeAction action, PropertyType propertyType, WorkflowDataValidationResult result) { if (!action.ValidValues.IsEmpty()) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNotChoicePropertyValidValuesNotApplicable }); return; } if (action.PropertyValue != null) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionRequiredUserPropertyPropertyValueNotApplicable }); return; } var usersGroups = action.UsersGroups?.UsersGroups; var isUsersGroupsEmpty = action.UsersGroups == null || usersGroups.IsEmpty() && !action.UsersGroups.IncludeCurrentUser.GetValueOrDefault(); if (!IsPropertyRequired(propertyType.IsRequired.GetValueOrDefault(), null, true, isUsersGroupsEmpty)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionRequiredPropertyValueEmpty }); return; } if (usersGroups.IsEmpty()) { return; } var usersMap = _users.ToDictionary(u => u.UserId, u => u.Login); var groupsMap = _groups.ToDictionary(g => g.GroupId, g => Tuple.Create(g.Name, g.ProjectId)); var userNames = usersMap.Values.ToHashSet(); var groupNames = groupsMap.Values.ToHashSet(); if (usersGroups == null || !usersGroups.Any()) { return; } var processedUserIds = new HashSet <int>(); var processedUserNames = new HashSet <string>(); var processedGroupIds = new HashSet <int>(); var processedGroupNames = new HashSet <string>(); foreach (var userGroup in usersGroups) { if (userGroup.IsGroup.GetValueOrDefault()) { // Update Name where Id is present (to null if Id is not found) if (!_ignoreIds && userGroup.Id.HasValue) { Tuple <string, int?> nameProject; if (!groupsMap.TryGetValue(userGroup.Id.Value, out nameProject)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionGroupNotFoundById }); return; } if (processedGroupIds.Contains(userGroup.Id.Value)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes .PropertyChangeActionDuplicateUserOrGroupFound }); return; } processedGroupIds.Add(userGroup.Id.Value); userGroup.Name = nameProject.Item1; } if (!groupNames.Contains(Tuple.Create(userGroup.Name, userGroup.GroupProjectId))) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionGroupNotFoundByName }); return; } if (_ignoreIds) { if (processedGroupNames.Contains(userGroup.Name)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDuplicateUserOrGroupFound }); return; } processedGroupNames.Add(userGroup.Name); } } else { // Update Name where Id is present (to null if Id is not found) if (!_ignoreIds && userGroup.Id.HasValue) { string name; if (!usersMap.TryGetValue(userGroup.Id.Value, out name)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionUserNotFoundById }); return; } if (processedUserIds.Contains(userGroup.Id.Value)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDuplicateUserOrGroupFound }); return; } processedUserIds.Add(userGroup.Id.Value); userGroup.Name = name; } if (!userNames.Contains(userGroup.Name)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionUserNotFoundByName }); return; } if (processedUserNames.Contains(userGroup.Name)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDuplicateUserOrGroupFound }); return; } processedUserNames.Add(userGroup.Name); } } }
public override void Validate(IePropertyChangeAction action, PropertyType propertyType, WorkflowDataValidationResult result) { if (action.UsersGroups != null) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNotUserPropertyUsersGroupsNotApplicable }); return; } if (!IsPropertyRequired(propertyType.IsRequired.GetValueOrDefault(), action.PropertyValue, action.ValidValues.IsEmpty(), true)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionRequiredPropertyValueEmpty }); return; } if (!propertyType.IsMultipleAllowed.GetValueOrDefault() && action.ValidValues?.Count > 1) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionChoicePropertyMultipleValidValuesNotAllowed }); return; } if (propertyType.IsValidated.GetValueOrDefault() && !string.IsNullOrEmpty(action.PropertyValue) && action.ValidValues.IsEmpty()) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionChoiceValueSpecifiedAsNotValidated }); return; } if (action.ValidValues == null || !action.ValidValues.Any()) { return; } var validValuesMap = propertyType.ValidValues.ToDictionary(vv => vv.Id, vv => vv.Value); var validValueValues = validValuesMap.Values.ToHashSet(); var processedValidValueIds = new HashSet <int>(); var processedValidValueValues = new HashSet <string>(); foreach (var validValue in action.ValidValues) { // Update Name where Id is present (to null if Id is not found) if (!_ignoreIds && validValue.Id.HasValue) { string value; if (!validValuesMap.TryGetValue(validValue.Id.Value, out value)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionValidValueNotFoundById }); return; } if (processedValidValueIds.Contains(validValue.Id.Value)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDuplicateValidValueFound }); return; } processedValidValueIds.Add(validValue.Id.Value); validValue.Value = value; } if (!validValueValues.Contains(validValue.Value)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionValidValueNotFoundByValue }); return; } if (_ignoreIds) { if (processedValidValueValues.Contains(validValue.Value)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDuplicateValidValueFound }); return; } processedValidValueValues.Add(validValue.Value); } } }
public abstract void Validate(IePropertyChangeAction action, PropertyType propertyType, WorkflowDataValidationResult result);
public override void Validate(IePropertyChangeAction action, PropertyType propertyType, WorkflowDataValidationResult result) { if (!action.ValidValues.IsEmpty()) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes .PropertyChangeActionNotChoicePropertyValidValuesNotApplicable }); return; } if (action.UsersGroups != null) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes .PropertyChangeActionNotUserPropertyUsersGroupsNotApplicable }); return; } if (!IsPropertyRequired(propertyType.IsRequired.GetValueOrDefault(), action.PropertyValue, true, true)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionRequiredPropertyValueEmpty }); return; } if (string.IsNullOrWhiteSpace(action.PropertyValue)) { return; } // For "Today+/-{the number of days)" date format we do not validate Min and Max constraints. int relativeToTodayDays; if (int.TryParse(action.PropertyValue, out relativeToTodayDays)) { return; } DateTime dateValue; if (!DateTime.TryParseExact(action.PropertyValue, WorkflowConstants.Iso8601DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionInvalidDateFormat }); return; } if (dateValue.Date < MinAllowedDate) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDateOutOfRange }); } if (!propertyType.IsValidated.HasValue || !propertyType.IsValidated.Value) { return; } if (dateValue.Date < propertyType.MinDate.Value.Date || dateValue.Date > propertyType.MaxDate.Value.Date) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionDateOutOfRange }); } }
public override void Validate(IePropertyChangeAction action, PropertyType propertyType, WorkflowDataValidationResult result) { if (!action.ValidValues.IsEmpty()) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNotChoicePropertyValidValuesNotApplicable }); return; } if (action.UsersGroups != null) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNotUserPropertyUsersGroupsNotApplicable }); return; } if (!IsPropertyRequired(propertyType.IsRequired.GetValueOrDefault(), action.PropertyValue, true, true)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionRequiredPropertyValueEmpty }); } }
public override void Validate(IePropertyChangeAction action, PropertyType propertyType, WorkflowDataValidationResult result) { if (!action.ValidValues.IsEmpty()) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNotChoicePropertyValidValuesNotApplicable }); return; } if (action.UsersGroups != null) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNotUserPropertyUsersGroupsNotApplicable }); return; } if (!IsPropertyRequired(propertyType.IsRequired.GetValueOrDefault(), action.PropertyValue, true, true)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionRequiredPropertyValueEmpty }); return; } decimal numberValue; if (!decimal.TryParse(action.PropertyValue, NumberStyles.Number, CultureInfo.InvariantCulture, out numberValue)) { if (!string.IsNullOrWhiteSpace(action.PropertyValue)) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionInvalidNumberFormat }); return; } } if (!propertyType.IsValidated.GetValueOrDefault() || string.IsNullOrWhiteSpace(action.PropertyValue)) { return; } var index = action.PropertyValue.IndexOf(CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator, StringComparison.Ordinal); var decimalPlaces = index == -1 ? 0 : action.PropertyValue.Length - index - 1; if (decimalPlaces > propertyType.DecimalPlaces.GetValueOrDefault()) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionInvalidNumberDecimalPlaces }); return; } if (numberValue < propertyType.MinNumber.Value || numberValue > propertyType.MaxNumber.Value) { result.Errors.Add(new WorkflowDataValidationError { Element = action.PropertyName, ErrorCode = WorkflowDataValidationErrorCodes.PropertyChangeActionNumberOutOfRange }); } }