public InvalidMessageTransformer(ConstraintValidatorContext constraintContext, ICollection<object> activeTags, System.Type @class, string propertyName, object value, object entity, ValidatorDef validatorDef, DefaultMessageInterpolatorAggregator defaultInterpolator, IMessageInterpolator userInterpolator) { if (constraintContext == null) { throw new ArgumentNullException("constraintContext"); } if (@class == null) { throw new ArgumentNullException("class"); } if (validatorDef == null) { throw new ArgumentNullException("validatorDef"); } if (defaultInterpolator == null) { throw new ArgumentNullException("defaultInterpolator"); } this.constraintContext = constraintContext; this.activeTags = activeTags; this.@class = @class; this.propertyName = propertyName; this.value = value; this.entity = entity; this.validatorDef = validatorDef; this.defaultInterpolator = defaultInterpolator; this.userInterpolator = userInterpolator; }
public void GetAttributeMessage() { var mia = new DefaultMessageInterpolatorAggregator(); var va = new RangeValidator(); try { mia.GetAttributeMessage(va); } catch (AssertionFailureException) { // Ok } var defrm = new ResourceManager(Environment.BaseNameOfMessageResource, typeof (DefaultMessageInterpolatorAggregator).Assembly); var custrm = new ResourceManager("NHibernate.Validator.Tests.Resource.Messages", Assembly.GetExecutingAssembly()); var culture = new CultureInfo("en"); mia.Initialize(custrm, defrm, culture); var a = new RangeAttribute(2, 10); va.Initialize(a); mia.AddInterpolator(a, va); Assert.IsFalse(string.IsNullOrEmpty(mia.GetAttributeMessage(va))); }
public InvalidMessageTransformer(ConstraintValidatorContext constraintContext, List<InvalidValue> results, System.Type @class, string propertyName /* nullable */, object value /* nullable */, object entity /* nullable */, IValidator validator, DefaultMessageInterpolatorAggregator defaultInterpolator, IMessageInterpolator userInterpolator /* nullable */) { if (constraintContext == null) throw new ArgumentNullException("constraintContext"); if (results == null) throw new ArgumentNullException("results"); if (@class == null) throw new ArgumentNullException("class"); if (validator == null) throw new ArgumentNullException("valitor"); if (defaultInterpolator == null) throw new ArgumentNullException("defaultInterpolator"); this.constraintContext = constraintContext; this.results = results; this.@class = @class; this.propertyName = propertyName; this.value = value; this.entity = entity; this.validator = validator; this.defaultInterpolator = defaultInterpolator; this.userInterpolator = userInterpolator; }
public void Interpolate() { var defrm = new ResourceManager(Environment.BaseNameOfMessageResource, typeof (DefaultMessageInterpolatorAggregator).Assembly); var custrm = new ResourceManager("NHibernate.Validator.Tests.Resource.Messages", Assembly.GetExecutingAssembly()); var culture = new CultureInfo("en"); var mia = new DefaultMessageInterpolatorAggregator(); var dmi = new DefaultMessageInterpolator(); mia.Initialize(custrm, defrm, culture); var va = new RangeValidator(); var a = new RangeAttribute(2, 10); Assert.AreEqual(a.Message, mia.Interpolate(a.Message, new object(), va, dmi)); mia.AddInterpolator(a, va); Assert.AreNotEqual(a.Message, mia.Interpolate(a.Message, new object(), va, dmi)); }
public void Serialization() { var defrm = new ResourceManager(Environment.BaseNameOfMessageResource, typeof (DefaultMessageInterpolatorAggregator).Assembly); var custrm = new ResourceManager("NHibernate.Validator.Tests.Resource.Messages", Assembly.GetExecutingAssembly()); var culture = new CultureInfo("en"); var mia = new DefaultMessageInterpolatorAggregator(); mia.Initialize(custrm, defrm, culture); var a = new RangeAttribute(2, 10); var va = new RangeValidator(); va.Initialize(a); mia.AddInterpolator(a, va); string originalMessage = mia.GetAttributeMessage(va); Assert.IsFalse(string.IsNullOrEmpty(originalMessage)); using (var memory = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(memory, mia); memory.Position = 0; var dmia = (DefaultMessageInterpolatorAggregator) formatter.Deserialize(memory); // follow instruction is what the owing a reference of interpolator must do dmia.Initialize(custrm, defrm, culture); Assert.AreEqual(originalMessage, dmia.GetAttributeMessage(va)); /* TODO : To make the serialization of agregator really work we need a sort of * "Validator ID" to make work the interpolators dictionary inside DefaultMessageInterpolatorAggregator. * So far it work using the validator instance but after a deserialization the instance change * so is imposible to find it again (change the reference). * Consideration to create "Validator ID" are: * - Each Validator is linked to a entity member * - Each entity member have an instance of an attribute initialized with values. * - A entity can have the same validator more than one time but with different attribute instance * (different values of Message for example). * * Note: if each Validator overrides Equals this test would pass, but it's too much invasive */ } }
/// <summary> /// Initialize the <see cref="ClassValidator"/> type. /// </summary> /// <param name="clazz"></param> /// <param name="nestedClassValidators"></param> private void InitValidator(System.Type clazz, IDictionary<System.Type, IClassValidator> nestedClassValidators) { entityValidators = new List<ValidatorDef>(); membersToValidate = new List<Member>(); childGetters = new List<MemberInfo>(); defaultInterpolator = new DefaultMessageInterpolatorAggregator(); defaultInterpolator.Initialize(messageBundle, defaultMessageBundle, culture); //build the class hierarchy to look for members in nestedClassValidators.Add(clazz, this); HashSet<System.Type> classes = new HashSet<System.Type>(); AddSuperClassesAndInterfaces(clazz, classes); // Create the IClassMapping for each class of the validator var classesMaps = new List<IClassMapping>(classes.Count); foreach (System.Type type in classes) { IClassMapping mapping = factory.ClassMappingFactory.GetClassMapping(type, validatorMode); if (mapping != null) classesMaps.Add(mapping); else log.Warn("Validator not found in mode " + validatorMode + " for class " + clazz.AssemblyQualifiedName); } //Check on all selected classes foreach (IClassMapping map in classesMaps) { foreach (Attribute classAttribute in map.GetClassAttributes()) { ValidateClassAtribute(classAttribute); } foreach (MemberInfo member in map.GetMembers()) { var memberAttributes = map.GetMemberAttributes(member); CreateMemberAttributes(member, memberAttributes); CreateChildValidator(member, memberAttributes); foreach (Attribute memberAttribute in memberAttributes) { IValidator propertyValidator = CreateOrGetValidator(memberAttribute); if (propertyValidator != null) { var tagable = memberAttribute as ITagableRule; membersToValidate.Add(new Member { ValidatorDef = new ValidatorDef(propertyValidator, tagable != null ? tagable.TagCollection : null), Getter = member }); } } } } }
public ClassValidator(SerializationInfo info, StreamingContext ctxt) { var interpolatorType = (System.Type)info.GetValue("interpolator", typeof(System.Type)); if(interpolatorType != null) userInterpolator = (IMessageInterpolator)Activator.CreateInstance(interpolatorType); entityType = (System.Type)info.GetValue("entityType", typeof(System.Type)); entityValidators = (List<ValidatorDef>)info.GetValue("entityValidators", typeof(List<ValidatorDef>)); membersToValidate = (List<Member>)info.GetValue("membersToValidate", typeof(List<Member>)); childClassValidators = (IDictionary<System.Type, IClassValidator>)info.GetValue("childClassValidators", typeof(IDictionary<System.Type, IClassValidator>)); childGetters = (List<MemberInfo>)info.GetValue("childGetters", typeof(List<MemberInfo>)); membersAttributesDictionary = (Dictionary<MemberInfo, List<Attribute>>) info.GetValue("membersAttributesDictionary", typeof (Dictionary<MemberInfo, List<Attribute>>)); defaultMessageBundle = GetDefaultResourceManager(); messageBundle = GetDefaultResourceManager(); culture = CultureInfo.CurrentCulture; defaultInterpolator = (DefaultMessageInterpolatorAggregator)info.GetValue("defaultInterpolator", typeof(DefaultMessageInterpolatorAggregator)); defaultInterpolator.Initialize(messageBundle,defaultMessageBundle,culture); }