Exemple #1
0
        /// <summary>
        /// Recupera os metadados para a propriedade.
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="modelAccessor"></param>
        /// <param name="containerType"></param>
        /// <param name="propertyDescriptor"></param>
        /// <param name="propertySettings"></param>
        /// <returns></returns>
        private ModelMetadata GetMetadataForProperty(MetadataStateble owner, Func <object> modelAccessor, Type containerType, System.ComponentModel.PropertyDescriptor propertyDescriptor, Colosoft.Validation.IPropertySettingsInfo propertySettings)
        {
            IEnumerable <Attribute> attributes = this.FilterAttributes(containerType, propertyDescriptor, propertyDescriptor.Attributes.Cast <Attribute>());
            ModelMetadata           result     = CreateMetadata(owner, attributes, containerType, modelAccessor, propertyDescriptor.PropertyType, propertyDescriptor.Name, propertySettings);

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// Cria o metadado para o tipo informado.
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="attributes">Atributos da propriedade.</param>
        /// <param name="containerType">Tipo do container.</param>
        /// <param name="modelAccessor"></param>
        /// <param name="modelType">Tipo da model.</param>
        /// <param name="propertyName">Nome da propriedade.</param>
        /// <param name="propertySettings"></param>
        /// <returns></returns>
        private ModelMetadata CreateMetadata(MetadataStateble owner, IEnumerable <Attribute> attributes, Type containerType, Func <object> modelAccessor, Type modelType, string propertyName, Colosoft.Validation.IPropertySettingsInfo propertySettings)
        {
            var validationManager = Colosoft.Validation.ValidationManager.Instance;
            var stateItem         = validationManager.CreatePropertyState(owner, propertyName, propertySettings, null, System.Globalization.CultureInfo.CurrentUICulture);
            var metadata          = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);

            metadata.AdditionalValues.Add("StateItem", stateItem);
            metadata.IsRequired  = stateItem.IsRequired;
            metadata.IsReadOnly  = stateItem.IsReadOnly;
            metadata.DisplayName = stateItem.Label != null?stateItem.Label.Title.FormatOrNull() : null;

            metadata.Description = stateItem.Label != null?stateItem.Label.Description.FormatOrNull() : null;

            return(metadata);
        }
Exemple #3
0
        /// <summary>
        /// Recupera os metadados das propriedades da entidade.
        /// </summary>
        /// <param name="container"></param>
        /// <param name="containerType"></param>
        /// <returns></returns>
        protected virtual IEnumerable <ModelMetadata> GetMetadataForEntityProperties(object container, Type containerType)
        {
            var descriptor        = GetTypeDescriptor(containerType);
            var properties        = new List <ModelMetadata>();
            var owner             = new MetadataStateble();
            var validationManager = Colosoft.Validation.ValidationManager.Instance;
            var settings          = validationManager.LoadSettings(Colosoft.Reflection.TypeName.Get(containerType));

            foreach (System.ComponentModel.PropertyDescriptor property in descriptor.GetProperties())
            {
                if (property.Name == "RowVersion")
                {
                }
                else if (property.ComponentType != containerType && (property.ComponentType == typeof(Colosoft.Business.Entity) || property.ComponentType.BaseType == typeof(Colosoft.Business.Entity)))
                {
                    continue;
                }
                var current       = property;
                var modelAccessor = (container == null) ? null : new Func <object>(() => current.GetValue(container));
                properties.Add(GetMetadataForProperty(owner, modelAccessor, containerType, current, settings.FirstOrDefault(f => f.Identifier == current.Name)));
            }
            return(properties);
        }