annotate Agendas/trunk/src/Agendas.Web/CustomModelMetadataProvider/DataAnnotationAndConventionModelMetadataProvider.cs @ 94:db4b1e2cae49

Cambio del nombre de la clase Ponente a Persona Se agrega la clase Cuenta para identificar cada una de las cuentas con que se puede autenticar una persona Alta Automatica de cuentas de twitter creando la persona
author Nelo@Kenia.neluz.int
date Sat, 04 Jun 2011 12:11:17 -0300
parents 8a4135f019dd
children c57ca21064f2
rev   line source
85
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
1 using System;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
2 using System.Collections.Generic;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
3 using System.ComponentModel.DataAnnotations;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
4 using System.Linq;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
5 using System.Web.Mvc;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
6
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
7 namespace AltNetHispano.Agendas.Web.CustomModelMetadataProvider
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
8 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
9 public class DataAnnotationAndConventionModelMetadataProvider : DataAnnotationsModelMetadataProvider
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
10 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
11 private readonly IResolverByConvention _resolverByConvention;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
12 private List<Attribute> _attributeList;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
13
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
14 public DataAnnotationAndConventionModelMetadataProvider(IResolverByConvention resolverByConvention)
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
15 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
16 _resolverByConvention = resolverByConvention;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
17 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
18
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
19 protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
20 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
21 _attributeList = new List<Attribute>(attributes);
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
22
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
23 var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
24
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
25 if (propertyName != null)
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
26 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
27 if (string.IsNullOrWhiteSpace(modelMetadata.DisplayName))
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
28 modelMetadata.DisplayName = _resolverByConvention.GetDisplayName(propertyName);
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
29
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
30 if (string.IsNullOrWhiteSpace(modelMetadata.Description))
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
31 modelMetadata.Description = _resolverByConvention.GetDescription(propertyName);
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
32
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
33 var validators = _attributeList.OfType<ValidationAttribute>();
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
34 foreach (var validator in validators)
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
35 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
36 if (string.IsNullOrWhiteSpace(validator.ErrorMessage) &&
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
37 string.IsNullOrWhiteSpace(validator.ErrorMessageResourceName))
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
38 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
39 var resourceName = propertyName + validator.GetType().Name;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
40 if (resourceName.EndsWith("Attribute"))
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
41 resourceName = resourceName.Substring(0, resourceName.Length - 9);
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
42 var resourceType = validator.ErrorMessageResourceType ?? _resolverByConvention.ResourceType;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
43 var prop = resourceType.GetProperty(resourceName);
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
44 if (prop != null)
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
45 {
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
46 validator.ErrorMessageResourceType = resourceType;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
47 validator.ErrorMessageResourceName = resourceName;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
48 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
49 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
50 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
51 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
52
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
53 return modelMetadata;
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
54 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
55 }
8a4135f019dd cambio de nombre de una clase
nelopauselli
parents:
diff changeset
56 }