annotate Agendas/trunk/src/Agendas.Web/CustomModelMetadataProvider/DataAnnotationAndResolveByConventionModelMetadataProvider.cs @ 84:ee4e699e4551

refactoring menor
author nelopauselli
date Wed, 25 May 2011 01:18:29 -0300
parents
children
rev   line source
84
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
1 using System;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
2 using System.Collections.Generic;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
3 using System.ComponentModel.DataAnnotations;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
4 using System.Linq;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
5 using System.Web.Mvc;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
6
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
7 namespace AltNetHispano.Agendas.Web.CustomModelMetadataProvider
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
8 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
9 public class DataAnnotationAndResolveByConventionModelMetadataProvider : DataAnnotationsModelMetadataProvider
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
10 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
11 private readonly IResolverByConvention _resolverByConvention;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
12 private List<Attribute> _attributeList;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
13
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
14 public DataAnnotationAndResolveByConventionModelMetadataProvider(IResolverByConvention resolverByConvention)
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
15 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
16 _resolverByConvention = resolverByConvention;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
17 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
18
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
19 protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
20 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
21 _attributeList = new List<Attribute>(attributes);
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
22
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
23 var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
24
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
25 if (propertyName != null)
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
26 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
27 if (string.IsNullOrWhiteSpace(modelMetadata.DisplayName))
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
28 modelMetadata.DisplayName = _resolverByConvention.GetDisplayName(propertyName);
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
29
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
30 if (string.IsNullOrWhiteSpace(modelMetadata.Description))
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
31 modelMetadata.Description = _resolverByConvention.GetDescription(propertyName);
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
32
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
33 var validators = _attributeList.OfType<ValidationAttribute>();
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
34 foreach (var validator in validators)
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
35 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
36 if (string.IsNullOrWhiteSpace(validator.ErrorMessage) &&
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
37 string.IsNullOrWhiteSpace(validator.ErrorMessageResourceName))
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
38 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
39 var resourceName = propertyName + validator.GetType().Name;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
40 if (resourceName.EndsWith("Attribute"))
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
41 resourceName = resourceName.Substring(0, resourceName.Length - 9);
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
42 var resourceType = validator.ErrorMessageResourceType ?? _resolverByConvention.ResourceType;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
43 var prop = resourceType.GetProperty(resourceName);
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
44 if (prop != null)
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
45 {
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
46 validator.ErrorMessageResourceType = resourceType;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
47 validator.ErrorMessageResourceName = resourceName;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
48 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
49 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
50 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
51 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
52
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
53 return modelMetadata;
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
54 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
55 }
ee4e699e4551 refactoring menor
nelopauselli
parents:
diff changeset
56 }