Example #1
0
        private void UpdatePlaceholder(DisplayMetadataProviderContext context)
        {
            // Special cases
            if (context.Attributes.OfType <DisplayAttribute>().Any(x => !string.IsNullOrWhiteSpace(x.Prompt)))
            {
                return;
            }

            // Try get resource key name
            var keyName = this.resourceManager.GetResourceKeyName(context.Key, "Placeholder");

            if (keyName != null)
            {
                context.DisplayMetadata.Placeholder = () => this.resourceManager.GetString(keyName);
            }
        }
        public void GetDisplayMetadata(DisplayMetadataProviderContext context)
        {
            if (context.Key.ModelType == typeof(LargeModelWithValidation))
            {
                context.DisplayMetadata.AdditionalValues.Add("key1", _guid);
                context.DisplayMetadata.AdditionalValues.Add("key2", "value2");
            }

            var displayAttribute = context.Attributes.OfType <DisplayAttribute>().FirstOrDefault();
            var groupName        = displayAttribute?.GroupName;

            if (!string.IsNullOrEmpty(groupName))
            {
                context.DisplayMetadata.AdditionalValues[GroupNameKey] = groupName;
            }
        }
        /// <summary>
        /// Sets the values for properties of isplay metadata
        /// </summary>
        /// <param name="context">Display metadata provider context</param>
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            //get all custom attributes
            var additionalValues = context.Attributes.OfType <IModelAttribute>().ToList();

            //and try add them as additional values of metadata
            foreach (var additionalValue in additionalValues)
            {
                if (context.DisplayMetadata.AdditionalValues.ContainsKey(additionalValue.Name))
                {
                    throw new SmiException("There is already an attribute with the name '{0}' on this model", additionalValue.Name);
                }

                context.DisplayMetadata.AdditionalValues.Add(additionalValue.Name, additionalValue);
            }
        }
Example #4
0
        public void TransformMetadata(DisplayMetadataProviderContext context)
        {
            if (!_displayConventionsDisableSettings.HtmlByName)
            {
                var propertyAttributes = context.Attributes;
                var modelMetadata      = context.DisplayMetadata;
                var propertyName       = context.Key.Name;

                if (!string.IsNullOrEmpty(propertyName) &&
                    string.IsNullOrEmpty(modelMetadata.DataTypeName) &&
                    TextAreaFieldNames.Any(propertyName.ToLower().Contains))
                {
                    modelMetadata.DataTypeName = "Html";
                }
            }
        }
Example #5
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            var viewConfig = ViewConfigureAttribute.GetAttribute(context.Key.ContainerType);


            var displayMetadata = context.DisplayMetadata;

            if (viewConfig != null && context.Key.Name.IsNotNullAndWhiteSpace())
            {
                var descriptor = viewConfig.GetViewPortDescriptor(context.Key.Name);
                if (descriptor != null)
                {
                    displayMetadata.AdditionalValues.Add("ViewPortDescriptor", descriptor);
                    if (displayMetadata.DisplayName == null)
                    {
                        displayMetadata.DisplayName = () =>
                        {
                            var attr = ViewConfigureAttribute.GetAttribute(context.Key.ContainerType);
                            attr.InitDisplayName();
                            var descriptop = attr.GetViewPortDescriptor(context.Key.Name);
                            return(descriptop.DisplayName);
                        };
                    }

                    displayMetadata.Order          = descriptor.OrderIndex;
                    displayMetadata.TemplateHint   = descriptor.TemplateName;
                    displayMetadata.ShowForDisplay = descriptor.IsShowForDisplay;
                    displayMetadata.ShowForEdit    = descriptor.IsShowForEdit;
                    if (descriptor.IsHidden)
                    {
                        displayMetadata.TemplateHint   = "HiddenInput";
                        displayMetadata.ShowForDisplay = false;
                        displayMetadata.ShowForEdit    = false;
                    }
                    if (descriptor.IsIgnore)
                    {
                        displayMetadata.ShowForDisplay = false;
                        displayMetadata.ShowForEdit    = false;
                        displayMetadata.TemplateHint   = "Ignore";
                    }
                }
            }
        }
 public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
 {
     if (context.PropertyAttributes != null)
     {
         foreach (object propAttr in context.PropertyAttributes)
         {
             UIHintAttribute uiHintAttribute = propAttr as UIHintAttribute;
             if (uiHintAttribute != null && uiHintAttribute.ControlParameters != null)
             {
                 foreach (var item in uiHintAttribute.ControlParameters)
                 {
                     context.DisplayMetadata.AdditionalValues.Add(item.Key, item.Value);
                 }
             }
         }
     }
 }
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            if (context.Key.Name == nameof(NonHumanizedViewModel.FieldWithSimpleDisplayPropertyFromAnotherMetadataProvider))
            {
                context.DisplayMetadata.SimpleDisplayProperty = DisplayName;
            }

            if (context.Key.Name == nameof(NonHumanizedViewModel.FieldWithDisplayNameFromAnotherMetadataProvider))
            {
                context.DisplayMetadata.DisplayName = () => DisplayName;
            }

            if (context.Key.Name == nameof(NonHumanizedViewModel.FieldWithNullDisplayNameFromAnotherMetadataProvider))
            {
                context.DisplayMetadata.DisplayName = () => null;
            }
        }
Example #8
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            var modelMetadata = context.DisplayMetadata;
            var propertyName  = context.Key.Name;

            if (!string.IsNullOrWhiteSpace(propertyName))
            {
                var localizedPropertyName = ModelsResource.ResourceManager.GetString(propertyName);
                if (string.IsNullOrWhiteSpace(localizedPropertyName))
                {
                    Trace.WriteLine("Property name" + propertyName + " not found in localized resource file.");
                    localizedPropertyName = propertyName;
                }

                modelMetadata.DisplayName = () => localizedPropertyName;
            }
        }
Example #9
0
        /// <inheritdoc />
        public void CreateDisplayMetadata([NotNull] DisplayMetadataProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (IsController(context.Key.ContainerType) || !context.Attributes.OfType <FromQueryAttribute>().Any())
            {
                return;
            }

            if (context.DisplayMetadata.DisplayName == null)
            {
                context.DisplayMetadata.DisplayName = () => context.Key.Name?.ConvertToKebabCase();
            }
        }
Example #10
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (context.Key.ContainerType != null && !context.Key.ContainerType.IsValueType)
            {
                var viewConfig = ServiceLocator.GetViewConfigure(context.Key.ContainerType);

                var displayMetadata = context.DisplayMetadata;
                if (viewConfig != null && context.Key.Name.IsNotNullAndWhiteSpace())
                {
                    var descriptor = viewConfig.GetViewPortDescriptor(context.Key.Name);
                    if (descriptor != null)
                    {
                        displayMetadata.AdditionalValues.Add("ViewPortDescriptor", descriptor);
                        if (displayMetadata.DisplayName == null)
                        {
                            displayMetadata.DisplayName = () => descriptor.DisplayName;
                        }

                        displayMetadata.Order          = descriptor.OrderIndex;
                        displayMetadata.TemplateHint   = descriptor.TemplateName;
                        displayMetadata.ShowForDisplay = descriptor.IsShowForDisplay;
                        displayMetadata.ShowForEdit    = descriptor.IsShowForEdit;
                        if (descriptor.IsHidden)
                        {
                            displayMetadata.TemplateHint   = "HiddenInput";
                            displayMetadata.ShowForDisplay = false;
                            displayMetadata.ShowForEdit    = false;
                        }
                        if (descriptor.IsIgnore)
                        {
                            displayMetadata.ShowForDisplay = false;
                            displayMetadata.ShowForEdit    = false;
                            displayMetadata.TemplateHint   = "Ignore";
                        }
                        if (descriptor.IsHideSurroundingHtml)
                        {
                            displayMetadata.HideSurroundingHtml = true;
                        }
                    }
                }
            }
        }
Example #11
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            var propertyAttributes = context.Attributes;
            var displayMetadata    = context.DisplayMetadata;
            var propertyName       = context.Key.Name;

            if (IsTransformRequired(propertyName, displayMetadata, propertyAttributes))
            {
                displayMetadata.DisplayName = () => Transform(propertyName);
            }

            var attributes = propertyAttributes.OfType <IDisplayMetadataProviderAttribute>();

            foreach (var attribute in attributes)
            {
                attribute.SetDisplayMetadata(context.DisplayMetadata);
            }
        }
Example #12
0
        public void Decorate(object attribute, DisplayMetadataProviderContext context)
        {
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }

            if (!(attribute is MaxLengthAttribute))
            {
                throw new ArgumentException("Attribute type is not MaxLengthAttribute", nameof(attribute));
            }

            var maxLengthttribtue = (MaxLengthAttribute)attribute;

            var modelMetaData = context.DisplayMetadata;

            modelMetaData.AddAdditionalValueWithValidationMessage("Maxlength", maxLengthttribtue.Length, maxLengthttribtue);
        }
        private string GetNestedModelTypeName(DisplayMetadataProviderContext context)
        {
            var singularType = TypeHelper.GetCollectionTypeOrNull(context.Key.ModelType);

            if (singularType == null)
            {
                throw GetIncorrectTypeException(context);
            }

            if (!typeof(INestedDataModel).IsAssignableFrom(singularType))
            {
                throw GetIncorrectTypeException(context);
            }

            var nestedModelName = StringHelper.RemoveSuffix(singularType.Name, "DataModel", StringComparison.OrdinalIgnoreCase);

            return(nestedModelName);
        }
Example #14
0
        public void Process(DisplayMetadataProviderContext context)
        {
            MetaDataAttributePlacementValidator.ValidatePropertyType(this, context, typeof(int), typeof(int?));

            var modelMetaData = context.DisplayMetadata;

            modelMetaData
            .AddAdditionalValueIfNotEmpty("Tags", Tags)
            .AddAdditionalValueIfNotEmpty("Width", Width)
            .AddAdditionalValueIfNotEmpty("Height", Height)
            .AddAdditionalValueIfNotEmpty("MinWidth", MinWidth)
            .AddAdditionalValueIfNotEmpty("MinHeight", MinHeight)
            .AddAdditionalValueIfNotEmpty("PreviewWidth", PreviewWidth)
            .AddAdditionalValueIfNotEmpty("PreviewHeight", PreviewHeight)
            ;

            modelMetaData.TemplateHint = "ImageAsset";
        }
        public void TransformMetadata(DisplayMetadataProviderContext context)
        {
            if (!_displayConventionsDisableSettings.TextAreaByName)
            {
                var propertyAttributes = context.Attributes;
                var modelMetadata      = context.DisplayMetadata;
                var propertyName       = context.Key.Name;

                if (!string.IsNullOrEmpty(propertyName) &&
                    string.IsNullOrEmpty(modelMetadata.DataTypeName) &&
                    TextAreaFieldNames.Any(propertyName.ToLower().Contains))
                {
                    modelMetadata.DataTypeName = "MultilineText";
                    modelMetadata.AdditionalValues["MultilineTextRows"] = 7;
                    modelMetadata.AdditionalValues["MultilineTextHTML"] = false;
                }
            }
        }
Example #16
0
        public void CreateDisplayMetadata_EnumNamesAndValues_ReflectsModelType(
            Type type,
            IReadOnlyDictionary <string, string> expectedDictionary)
        {
            // Arrange
            var provider = new DataAnnotationsMetadataProvider();

            var key        = ModelMetadataIdentity.ForType(type);
            var attributes = new object[0];
            var context    = new DisplayMetadataProviderContext(key, new ModelAttributes(attributes));

            // Act
            provider.CreateDisplayMetadata(context);

            // Assert
            // This assertion does *not* require entry orders to match.
            Assert.Equal(expectedDictionary, context.DisplayMetadata.EnumNamesAndValues);
        }
Example #17
0
        public void CreateDisplayMetadata_FindsDisplayFormat_FromDataType()
        {
            // Arrange
            var provider = new DataAnnotationsMetadataProvider();

            var dataType      = new DataTypeAttribute(DataType.Currency);
            var displayFormat = dataType.DisplayFormat; // Non-null for DataType.Currency.

            var attributes = new[] { dataType, };
            var key        = ModelMetadataIdentity.ForType(typeof(string));
            var context    = new DisplayMetadataProviderContext(key, new ModelAttributes(attributes));

            // Act
            provider.CreateDisplayMetadata(context);

            // Assert
            Assert.Same(displayFormat.DataFormatString, context.DisplayMetadata.DisplayFormatString);
        }
Example #18
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            var displayMetadata = context.DisplayMetadata;

            if (displayMetadata.DisplayName != null)
            {
                var displayName = displayMetadata.DisplayName();
                return;
            }

            var attributes = context.Attributes;

            if (attributes.OfType <DisplayAttribute>().Any() ||
                attributes.OfType <DisplayNameAttribute>().Any())
            {
                return;
            }

            if (context.Key.Name.IsNullOrWhiteSpace())
            {
                return;
            }

            if (_localizationOptions.Value.Value.DataAnnotationLocalizerProvider == null)
            {
                return;
            }

            var containerType = context.Key.ContainerType ?? context.Key.ModelType;
            var localizer     = _localizationOptions.Value.Value.DataAnnotationLocalizerProvider(containerType, _stringLocalizerFactory.Value);

            displayMetadata.DisplayName = () =>
            {
                var localizedString = localizer[PropertyLocalizationKeyPrefix + context.Key.Name];

                if (localizedString.ResourceNotFound)
                {
                    localizedString = localizer[context.Key.Name];
                }

                return(localizedString);
            };
        }
Example #19
0
        public void CreateDisplayMetadata_SimpleAttributes(
            object attribute,
            Func <DisplayMetadata, object> accessor,
            object expected)
        {
            // Arrange
            var provider = new DataAnnotationsMetadataProvider();

            var key     = ModelMetadataIdentity.ForType(typeof(string));
            var context = new DisplayMetadataProviderContext(key, new ModelAttributes(new object[] { attribute }));

            // Act
            provider.CreateDisplayMetadata(context);

            // Assert
            var value = accessor(context.DisplayMetadata);

            Assert.Equal(expected, value);
        }
        public void TransformMetadata(DisplayMetadataProviderContext context)
        {
            var propertyAttributes = context.Attributes;
            var modelMetadata      = context.DisplayMetadata;
            var propertyName       = context.Key.Name;

            modelMetadata.AdditionalValues["ShowForGrid"]            = ShowForGrid;
            modelMetadata.AdditionalValues["LinkToCollectionInGrid"] = LinkToCollectionInGrid;
            modelMetadata.AdditionalValues["AllowSortForGrid"]       = AllowSortForGrid;
            modelMetadata.ShowForEdit = ShowForEdit;

            if (!_showForCreateSet)
            {
                _showForCreate = ShowForEdit;
            }

            modelMetadata.AdditionalValues["ShowForCreate"] = _showForCreate;
            modelMetadata.ShowForDisplay = ShowForDisplay;
        }
Example #21
0
        public void Decorate(object attribute, DisplayMetadataProviderContext context)
        {
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }

            if (!(attribute is RangeAttribute))
            {
                throw new ArgumentException("Attribute type is not RangeAttribute", nameof(attribute));
            }

            var rangeLengthttribtue = (RangeAttribute)attribute;

            string minAttribute = null;
            string maxAttribute = null;

            if (rangeLengthttribtue.OperandType == typeof(string))
            {
                minAttribute = "Minlength";
                maxAttribute = "Maxlength";
            }
            else
            {
                minAttribute = "Min";
                maxAttribute = "Max";
            }

            if (minAttribute != null)
            {
                var modelMetaData = context.DisplayMetadata;

                if (rangeLengthttribtue.Minimum != null)
                {
                    modelMetaData.AddAdditionalValueWithValidationMessage(minAttribute, rangeLengthttribtue.Minimum, rangeLengthttribtue);
                }
                if (rangeLengthttribtue.Maximum != null)
                {
                    modelMetaData.AddAdditionalValueWithValidationMessage(maxAttribute, rangeLengthttribtue.Maximum, rangeLengthttribtue);
                }
            }
        }
        private string GetNestedModelTypeName(DisplayMetadataProviderContext context)
        {
            var propertyModelType = context.Key.ModelType;

            if (!propertyModelType.IsGenericType)
            {
                throw new Exception(GetBadTypeExceptionMessage());
            }

            var genericParameters = propertyModelType.GetGenericArguments();

            if (genericParameters?.Length != 1 || !typeof(INestedDataModel).IsAssignableFrom(genericParameters.Single()))
            {
                throw new Exception(GetBadTypeExceptionMessage());
            }

            var nestedModelName = StringHelper.RemoveSuffix(genericParameters.Single().Name, "DataModel", StringComparison.OrdinalIgnoreCase);

            return(nestedModelName);
        }
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            switch (context.Key.MetadataKind)
            {
            case ModelMetadataKind.Property:
                if (context.DisplayMetadata.DisplayName == null)
                {
                    ResourceKey displayKey = _resourceMapper.GetKey(context.Key.ContainerType.Namespace, context.Key.ContainerType.Name, context.Key.Name, "DisplayName");
                    if (displayKey != null)
                    {
                        IStringLocalizer localizer = _stringLocalizerFactory.Create(displayKey.ResourceName, displayKey.ResourceLocation);
                        context.DisplayMetadata.DisplayName = () => localizer.GetString(displayKey.KeyName);
                    }
                }
                break;

            case ModelMetadataKind.Type:
                break;
            }
        }
Example #24
0
        private string GetNestedModelTypeName(DisplayMetadataProviderContext context)
        {
            var propertyModelType = context.Key.ModelType;

            if (!typeof(IEnumerable).IsAssignableFrom(propertyModelType))
            {
                throw GetIncorrectTypeException(context);
            }

            Type singularType = null;

            if (propertyModelType.IsGenericType)
            {
                var genericParameters = propertyModelType.GetGenericArguments();

                if (genericParameters?.Length != 1)
                {
                    throw GetIncorrectTypeException(context);
                }

                singularType = genericParameters.Single();
            }
            else if (propertyModelType.IsArray)
            {
                singularType = propertyModelType.GetElementType();
            }

            if (singularType == null)
            {
                throw GetIncorrectTypeException(context);
            }

            if (!typeof(INestedDataModel).IsAssignableFrom(singularType))
            {
                throw GetIncorrectTypeException(context);
            }

            var nestedModelName = StringHelper.RemoveSuffix(singularType.Name, "DataModel", StringComparison.OrdinalIgnoreCase);

            return(nestedModelName);
        }
Example #25
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            if (context.Attributes.Any(a => a.GetType() == typeof(HideForEditAttribute)))
            {
                context.DisplayMetadata.ShowForEdit = false;
            }
            if (context.Attributes.Any(a => a.GetType() == typeof(HideForDisplayAttribute)))
            {
                context.DisplayMetadata.ShowForDisplay = false;
            }
            if (context.Attributes.Any(a => a.GetType() == typeof(LayoutAttribute)))
            {
                var attr = context.Attributes.FirstOrDefault(a => a.GetType() == typeof(LayoutAttribute)) as LayoutAttribute;

                if (attr != null)
                {
                    context.DisplayMetadata.DataTypeName = "Layout";
                    context.DisplayMetadata.AdditionalValues.Add("layoutName", attr.name);
                }
            }
        }
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            var mt = context.Key.ModelType;

            if (mt.IsArray && mt.GetArrayRank() == 2)
            {
                context.DisplayMetadata.TemplateHint = "Matrix";
            }

            else if (mt.GetInterfaces().Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(ICollection <>)))
            {
                var itemType = mt.IsArray ? mt.GetElementType() : (mt.IsGenericType ? mt.GetGenericArguments()[0] : null);
                context.DisplayMetadata.TemplateHint =
                    itemType != null && itemType.GetInterfaces().Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(ICollection <>)) ? "NestedCollection" : "Collection";
            }

            else if (typeof(ICollection).IsAssignableFrom(mt))
            {
                context.DisplayMetadata.TemplateHint = "Collection";
            }
        }
Example #27
0
        public void Decorate(object attribute, DisplayMetadataProviderContext context)
        {
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }

            if (!(attribute is CompareAttribute))
            {
                throw new ArgumentException("Attribute type is not CompareAttribute", nameof(attribute));
            }


            var compareAttribtue = (CompareAttribute)attribute;
            var otherProperty    = compareAttribtue.OtherProperty;
            var valAttribute     = compareAttribtue;

            var modelMetaData = context.DisplayMetadata;

            modelMetaData.AddAdditionalValueWithValidationMessage("Match", otherProperty, valAttribute);
        }
Example #28
0
        public void CreateDisplayMetadata(DisplayMetadataProviderContext context)
        {
            var propertyAttributes = context.Attributes;
            var modelMetadata      = context.DisplayMetadata;
            var propertyName       = context.Key.Name;

            if (IsTransformRequired(propertyName, modelMetadata, propertyAttributes))
            {
                modelMetadata.DisplayName = () =>
                {
                    switch (propertyName)
                    {
                    case "ActiveYn":
                        return("Is Active");

                    default:
                        return(propertyName.Humanize().Transform(To.TitleCase));
                    }
                };
            }
        }
Example #29
0
        public void CreateDisplayMetadata_FindsDisplayFormat_OverridingDataType()
        {
            // Arrange
            var provider = new DataAnnotationsMetadataProvider();

            var dataType      = new DataTypeAttribute(DataType.Time); // Has a non-null DisplayFormat.
            var displayFormat = new DisplayFormatAttribute()          // But these values override the values from DataType
            {
                DataFormatString = "Cool {0}",
            };

            var attributes = new Attribute[] { dataType, displayFormat, };
            var key        = ModelMetadataIdentity.ForType(typeof(string));
            var context    = new DisplayMetadataProviderContext(key, new ModelAttributes(attributes));

            // Act
            provider.CreateDisplayMetadata(context);

            // Assert
            Assert.Same(displayFormat.DataFormatString, context.DisplayMetadata.DisplayFormatString);
        }
        public void TransformMetadata(DisplayMetadataProviderContext context)
        {
            var propertyAttributes = context.Attributes;
            var modelMetadata      = context.DisplayMetadata;
            var propertyName       = context.Key.Name;

            RouteValueDictionary routeValueDictionary = null;

            if (modelMetadata.AdditionalValues.ContainsKey("RouteValueDictionary"))
            {
                routeValueDictionary = (RouteValueDictionary)modelMetadata.AdditionalValues["RouteValueDictionary"];
            }

            if (routeValueDictionary == null)
            {
                routeValueDictionary = new RouteValueDictionary();
            }

            routeValueDictionary.Add(Key, Value);

            modelMetadata.AdditionalValues["RouteValueDictionary"] = routeValueDictionary;
        }