/// <summary> /// add role to current task /// </summary> /// <param name="currentTaskId"></param> /// <param name="validationRuleInfo"></param> public void AddRule(int?currentTaskId, BaseValidationRuleInfoAttribute validationRuleInfo) { if (!currentTaskId.HasValue) { return; } int currentId = currentTaskId.GetValueOrDefault(); if (CurrentValidationRules.TryGetValue(currentId, out List <BaseValidationRuleInfoAttribute> items)) { items.Add(validationRuleInfo); } else { items = new List <BaseValidationRuleInfoAttribute> { validationRuleInfo }; CurrentValidationRules.TryAdd(currentId, items); } }
/// <summary> /// remove tasks from memory /// </summary> /// <param name="TaskId"></param> public void RemoveTask(int TaskId) { CurrentDetectedObjects.Remove(TaskId); CurrentValidationRules.Remove(TaskId); }
/// <summary> /// calculate all validations /// </summary> /// <returns>return list of validation errors</returns> public IEnumerable <BaseValidationRuleInfoAttribute> CalculateValidationsOfTask(Action <string, object> changeParameterValueAction, Action <BaseValidationRuleInfoAttribute> fillValidationParameterAction) { if (!Task.CurrentId.HasValue) { throw new Exception("cannot calculate rules without any task!"); } int currentId = Task.CurrentId.GetValueOrDefault(); if (CurrentValidationRules.TryGetValue(currentId, out List <BaseValidationRuleInfoAttribute> validationRuleInfoAttributes)) { foreach (BaseValidationRuleInfoAttribute validation in validationRuleInfoAttributes) { fillValidationParameterAction(validation); if (validation.TaskType == ValidationRuleInfoTaskType.Error) { if (!BaseValidationRuleInfoAttribute.CheckIsValidate(validation)) { yield return(validation); } } else if (validation.TaskType == ValidationRuleInfoTaskType.ChangeValue) { if (!BaseValidationRuleInfoAttribute.CheckIsValidate(validation)) { object changedValue = BaseValidationRuleInfoAttribute.GetChangedValue(validation); if (validation.PropertyInfo != null) { System.Reflection.PropertyInfo findProperty = validation.Object.GetType().GetPropertyInfo(validation.PropertyInfo.Name); findProperty.SetValue(validation.Object, changedValue, null); } else { changeParameterValueAction(validation.ParameterInfo.Name, changedValue); } } } else { throw new NotSupportedException(); } } } if (CurrentDetectedObjects.TryGetValue(currentId, out ConcurrentDictionary <Type, ConcurrentDictionary <object, List <string> > > types)) { foreach (KeyValuePair <Type, ConcurrentDictionary <object, List <string> > > tkv in types) { Type type = tkv.Key; if (types.TryGetValue(type, out ConcurrentDictionary <object, List <string> > objects)) { foreach (KeyValuePair <object, List <string> > okv in objects) { if (objects.TryGetValue(okv.Key, out List <string> properties)) { foreach (BaseValidationRuleInfoAttribute item in CalculateArrays(okv.Key, properties, currentId)) { yield return(item); } } } } } } }