Esempio n. 1
0
        private static bool IsValidEnumValueInternal(EnumMetadata enumMetaData, object enumValue)
        {
            var numericEnumValue = ToUInt64(enumValue);

            if (enumMetaData.IsFlagsEnum)
            {
                if (numericEnumValue == 0L)
                {
                    return(enumMetaData.ContainsNumericValue(numericEnumValue));
                }

                var missingBits = ulong.MaxValue;
                foreach (var definedValue in enumMetaData.NumericValues)
                {
                    if ((definedValue & numericEnumValue) == definedValue)
                    {
                        missingBits &= ~definedValue;
                    }
                }
                return((numericEnumValue & missingBits) == 0);
            }
            else
            {
                return(enumMetaData.ContainsNumericValue(numericEnumValue));
            }
        }
Esempio n. 2
0
 public MainForm()
 {
     InitializeComponent();
     _metadata = new EnumMetadata <AgeDependsAnswer>
     {
         Answers = new List <AgeDependsAnswer>
         {
             new AgeDependsAnswer
             {
                 AnswerType   = AnswerType.Text,
                 Description  = "Answer 1 description",
                 DisplayValue = "Answer 1",
                 MaxAge       = 10,
                 MinAge       = 0
             },
             new AgeDependsAnswer
             {
                 AnswerType   = AnswerType.Text,
                 Description  = "Answer 2 description",
                 DisplayValue = "Answer 2",
                 MaxAge       = 2,
                 MinAge       = 0
             }
         }
     };
 }
 public static SelectList ToSelectListAsTringFiltered <T>(this EnumMetadata <T> enumMetadata, T[] filterValues, params T[] seletedIndexes)
 {
     return(enumMetadata.Items.
            Where(item => !filterValues.Contains(item.Key)).
            ToDictionary(item => item.Key.ToString(), item => item.Value).
            ToSelectList(seletedIndexes.Select(item => item.ToString()).ToArray()));
 }
        /// <summary>
        /// Internal metadata read process.
        /// </summary>
        /// <param name="pToFill"></param>
        /// <param name="pElement"></param>
        protected override void InternalRead(ref IMetadata pToFill, XElement pElement)
        {
            string lValue = pElement.Value;

            if (string.IsNullOrEmpty(lValue))
            {
                return;
            }

            EnumMetadata lToFill = pToFill as EnumMetadata;

            int         lLastValue = 0;
            List <Enum> lEnumList  = new List <Enum>();

            string[] lValues = lValue.Trim().Split(';');
            foreach (string lEnumValue in lValues)
            {
                Enum lNewEnumValue = new Enum();
                lNewEnumValue.Name = lEnumValue.Trim();
                if (string.IsNullOrEmpty(lNewEnumValue.Name))
                {
                    continue;
                }

                lNewEnumValue.Value = lLastValue++;
                lEnumList.Add(lNewEnumValue);
            }

            lToFill.Enumeration = lEnumList;
        }
Esempio n. 5
0
        private static EnumMetadata GetEnumMetadata(Type enumType)
        {
            object     value          = Enum.GetValues(enumType).GetValue(0);
            MethodInfo typeCodeMethod = enumType.GetMethod("GetTypeCode");

            var typeCode = (TypeCode)typeCodeMethod.Invoke(value, new object[0]);

            var enumMetadata = new EnumMetadata(
                enumType.Name,
                enumType.Namespace,
                GetLongTypeName(enumType),
                GetProtectionLevel(enumType),
                typeCode
                );

            s_typeCache[enumType] = enumMetadata;

            enumMetadata.DeclaringType = (DefinedTypeMetadata)FromType(enumType.DeclaringType);
            enumMetadata.Members       = GetEnumMemberMetadata(enumType, enumMetadata);
            enumMetadata.Fields        = GetFieldMetadata(enumType);
            (enumMetadata.Indexers, enumMetadata.Properties) = GetPropertyMetadata(enumType);
            enumMetadata.Methods          = GetMethodMetadata(enumType);
            enumMetadata.CustomAttributes = GetCustomAttributes(enumType.GetCustomAttributesData());

            return(enumMetadata);
        }
Esempio n. 6
0
 public static Func <string, string?> BuildNameToDescriptionMapper(IStringLocalizer settingEnumStringLocalizer)
 {
     return(name =>
     {
         var metadata = EnumMetadata.For <SettingEnum>(name);
         return metadata != null?GetDescriptionTranslation(metadata, settingEnumStringLocalizer)?.Value : null;
     });
 }
        public static MvcHtmlString EnumListFor <TModel, TValue>(this HtmlHelper <TModel> htmlHelper,
                                                                 Expression <Func <TModel, TValue> > expression, object htmlAttributes = null)
        {
            string inputName = ExpressionHelper.GetExpressionText(expression);
            EnumMetadata <TValue> enumMetaData  = EnumMetadataFactory.Get <TValue>();
            ModelMetadata         modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            PropertyInfo          propertyInfo  = modelMetadata.ContainerType.GetProperty(modelMetadata.PropertyName);
            var enumFilterAttribute             =
                Attribute.GetCustomAttribute(propertyInfo, typeof(EnumFilterAttribute)) as EnumFilterAttribute;

            SelectList selectList = (enumFilterAttribute != null)
                ? enumMetaData.ToSelectListAsTringFiltered(
                enumMetaData.Items.Keys.Where(enumFilterAttribute.IsFiltered).ToArray())
                : enumMetaData.ToSelectListAsString();

            return(htmlHelper.DropDownListFor(expression, selectList, htmlAttributes));
        }
Esempio n. 8
0
        public static bool IsConvertable(object value, Type toType)
        {
            if (value == null || toType == null)
            {
                return(true);
            }
            Type type = value.GetType();

            if (toType.IsAssignableFrom(type) || (IsPrimitiveType(type) && IsPrimitiveType(toType)))
            {
                return(true);
            }
            if (toType == typeof(string))
            {
                return(true);
            }
            if (type == typeof(string) && IsPrimitiveType(toType))
            {
                return(true);
            }
            if (type.IsEnum && IsPrimitiveType(toType))
            {
                return(true);
            }
            if (toType.IsEnum)
            {
                EnumMetadata enumMetadata = GetEnumMetadata(toType);
                if (IsPrimitiveType(type))
                {
                    int num = CoerceValue <int>(value);
                    return(num >= 0 && num <= enumMetadata.Members.Length - 1);
                }
                if (type == typeof(string))
                {
                    EnumMemberMetadata[] members = enumMetadata.Members;
                    foreach (EnumMemberMetadata enumMemberMetadata in members)
                    {
                        if (enumMemberMetadata.MemberName.ToLower().Equals(((string)value).ToLower()))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Esempio n. 9
0
 private static EnumMetadata GetEnumMetadata(Type enumType)
 {
     if (!enums.ContainsKey(enumType.FullName))
     {
         List <EnumMemberMetadata> list = new List <EnumMemberMetadata>();
         Array    values = Enum.GetValues(enumType);
         int      num    = 0;
         string[] names  = Enum.GetNames(enumType);
         foreach (string text in names)
         {
             MemberInfo element = enumType.GetMember(text)[0];
             list.Add(new EnumMemberMetadata
             {
                 MemberName = text,
                 Value      = values.GetValue(num)
             });
             foreach (EnumValueAttribute item in from i in element.GetCustomAttributes()
                      where i is EnumValueAttribute
                      select i)
             {
                 list.Add(new EnumMemberMetadata
                 {
                     LocalizationID = item.LocalizationID,
                     MemberName     = text,
                     Value          = item.Value
                 });
             }
             num++;
         }
         EnumMetadata enumMetadata = new EnumMetadata();
         enumMetadata.EnumType = enumType;
         enumMetadata.Members  = list.ToArray();
         EnumMetadata value = enumMetadata;
         enums.Add(enumType.FullName, value);
     }
     return(enums[enumType.FullName]);
 }
 public static SelectList ToSelectList <T>(this EnumMetadata <T> enumMetadata, params int[] seletedIndexes)
 {
     return(enumMetadata.Items.
            ToDictionary(item => Convert.ToInt32(item.Key), item => item.Value).
            ToSelectList(seletedIndexes));
 }
Esempio n. 11
0
        private static LocalizedString?GetDescriptionTranslation(EnumMetadata <SettingEnum> metadata, IStringLocalizer settingEnumStringLocalizer)
        {
            var description = metadata.Attributes.OfType <DescriptionAttribute>().FirstOrDefault()?.Description;

            return(description != null ? settingEnumStringLocalizer[description] : null);
        }
Esempio n. 12
0
 public EnumMetadataControl(EnumMetadata<Answer> metadata)
     : this()
 {
     _metadata = metadata;
 }
 public static string GetAsString <T>(this EnumMetadata <T> metaData)
 {
     return(string.Join(";", metaData.Items.Select((item) => Convert.ToInt32(item.Key) + ":" + item.Value)));
 }
 public static SelectList ToSelectListAsString <T>(this EnumMetadata <T> enumMetadata, params string[] seletedIndexes)
 {
     return(enumMetadata.Items.
            ToDictionary(item => item.Key.ToString(), item => item.Value).
            ToSelectList(seletedIndexes));
 }
 public static SelectList ToSelectList <T>(this EnumMetadata <T> enumMetadata, params T[] seletedIndexes)
 {
     return(enumMetadata.ToSelectList(seletedIndexes.Select(s => Convert.ToInt32(s)).ToArray()));
 }
Esempio n. 16
0
 public EnumMetadataControl(EnumMetadata <Answer> metadata) : this()
 {
     _metadata = metadata;
 }
Esempio n. 17
0
        private static IImmutableList <EnumMemberMetadata> GetEnumMemberMetadata(Type type, EnumMetadata definingEnum)
        {
            var members = new List <EnumMemberMetadata>();

            foreach (FieldInfo field in type.GetFields())
            {
                if (field.Name == MetadataAnalyzer.DEFAULT_ENUM_MEMBER_NAME)
                {
                    continue;
                }

                IImmutableList <CustomAttributeMetadata> customAttributes = GetCustomAttributes(field.CustomAttributes);
                var enumMember = new EnumMemberMetadata(field.Name)
                {
                    Type             = definingEnum,
                    CustomAttributes = customAttributes
                };
                members.Add(enumMember);
            }

            return(members.ToImmutableArray());
        }
Esempio n. 18
0
        public static object ConvertValue(object value, Type toType)
        {
            object obj = null;

            if (value == null)
            {
                return(null);
            }
            if (toType == null)
            {
                return(value);
            }
            Type type = value.GetType();

            if (toType.IsAssignableFrom(type) || (IsPrimitiveType(type) && IsPrimitiveType(toType)))
            {
                obj = CoerceValue(value, toType);
            }
            else if (toType == typeof(string))
            {
                obj = ((type == typeof(char)) ? new string(new char[1]
                {
                    (char)value
                }) : value.ToString());
            }
            else if (type == typeof(string) && IsPrimitiveType(toType))
            {
                string text = (string)value;
                int    primitiveTypeIndex = GetPrimitiveTypeIndex(toType);
                if (primitiveTypeIndex == 5 && text.Length != 1)
                {
                    throw new Exception($"Cannot convert from {text} to char.");
                }
                if (primitiveTypeIndex == 7 && text != "true" && text != "false")
                {
                    throw new Exception($"Cannot convert from {text} to boolean.");
                }
                switch (primitiveTypeIndex)
                {
                case 0:
                    obj = double.Parse(text);
                    break;

                case 1:
                    obj = float.Parse(text);
                    break;

                case 2:
                    obj = decimal.Parse(text);
                    break;

                case 3:
                    obj = long.Parse(text);
                    break;

                case 4:
                    obj = int.Parse(text);
                    break;

                case 5:
                    obj = short.Parse(text);
                    break;

                case 6:
                    obj = text[0];
                    break;

                case 7:
                    obj = byte.Parse(text);
                    break;

                case 8:
                    obj = (text == "true");
                    break;
                }
            }
            else if (type.IsEnum && IsPrimitiveType(toType))
            {
                obj = CoerceValue(GetValue((Enum)value), toType);
            }
            else if (toType.IsEnum)
            {
                EnumMetadata enumMetadata = GetEnumMetadata(toType);
                if (IsPrimitiveType(type))
                {
                    int primitiveTypeIndex = CoerceValue <int>(value);
                    if (primitiveTypeIndex >= 0 && primitiveTypeIndex <= enumMetadata.Members.Length - 1)
                    {
                        obj = enumMetadata.Members[primitiveTypeIndex].Value;
                    }
                }
                else if (type == typeof(string))
                {
                    obj = enumMetadata.Members.FirstOrDefault((EnumMemberMetadata i) => i.MemberName == (string)value).Value;
                }
            }
            else if (typeof(IList).IsAssignableFrom(type) && toType.IsArray)
            {
                IList list  = value as IList;
                Array array = Array.CreateInstance(toType.GetElementType(), list.Count);
                for (int j = 0; j <= list.Count - 1; j++)
                {
                    array.SetValue(list[j], j);
                }
                obj = array;
            }
            else if (type.IsArray && typeof(IList).IsAssignableFrom(toType))
            {
                IList list  = Activator.CreateInstance(toType) as IList;
                Array array = value as Array;
                for (int j = 0; j <= array.Length - 1; j++)
                {
                    list.Add(array.GetValue(j));
                }
                obj = list;
            }
            if (value != null && obj == null)
            {
                throw new Exception($"Cannot convert from {value} to {toType}.");
            }
            return(obj);
        }