예제 #1
0
        public static object GetNConvertMemberValue(this object rec, string fn, ChoRecordFieldConfiguration fieldConfig, CultureInfo culture, object fieldValue)
        {
            if (rec is ExpandoObject)
            {
                if (fieldConfig.Converters.IsNullOrEmpty())
                {
                    fieldValue = ChoConvert.ConvertTo(fieldValue, typeof(string), culture);
                }
                else
                {
                    fieldValue = ChoConvert.ConvertTo(fieldValue, typeof(string), null, fieldConfig.Converters.ToArray(), null, culture);
                }
            }
            else
            {
                if (fieldConfig.Converters.IsNullOrEmpty())
                {
                    fieldValue = ChoConvert.ConvertTo(fieldValue, ChoType.GetMemberInfo(rec.GetType(), fn), typeof(string), null, culture);
                }
                else
                {
                    fieldValue = ChoConvert.ConvertTo(fieldValue, typeof(string), null, fieldConfig.Converters.ToArray(), null, culture);
                }
            }

            return(fieldValue);
        }
예제 #2
0
        public IDictionary <string, object> GetDefaults()
        {
            IDictionary <string, object> dict = new Dictionary <string, object>();

            ChoPropertyAttribute attr = null;
            object memberValue        = null;
            string propName           = null;

            //scan through members and load them
            foreach (var prop in ChoType.GetMembers(GetType()).Where(m => m.GetCustomAttribute <ChoIgnoreMemberAttribute>() != null && !ChoType.IsReadOnlyMember(m)))
            {
                attr = ChoType.GetMemberAttribute <ChoPropertyAttribute>(prop);
                try
                {
                    propName    = attr != null && !attr.Name.IsNullOrWhiteSpace() ? attr.Name : prop.Name;
                    memberValue = ChoType.GetDefaultValue(ChoType.GetMemberInfo(GetType(), prop.Name));

                    if (memberValue != null && memberValue is string)
                    {
                        string mv = memberValue as string;
                        if (attr != null)
                        {
                            switch (attr.TrimOption)
                            {
                            case ChoPropertyValueTrimOption.Trim:
                                mv = mv.Trim();
                                break;

                            case ChoPropertyValueTrimOption.TrimEnd:
                                mv = mv.TrimEnd();
                                break;

                            case ChoPropertyValueTrimOption.TrimStart:
                                mv = mv.TrimStart();
                                break;
                            }
                        }

                        memberValue = mv;
                    }

                    if (!dict.ContainsKey(propName))
                    {
                        dict.Add(propName, memberValue);
                    }
                }
                catch (Exception ex)
                {
                    //ChoLog.Error("{0}: Error getting default value for '{1}' property. {2}".FormatString(NName, prop.Name, ex.Message));
                    SetDefaultValue(prop, false);
                }
            }

            return(dict);
        }
예제 #3
0
 public virtual void SetParams(string cmdParams)
 {
     foreach (Tuple <string, string> tuple in ChoStringEx.ToKeyValuePairs(cmdParams, ';', '='))
     {
         MemberInfo memberInfo = ChoType.GetMemberInfo(this.GetType(), tuple.Item1);
         if (memberInfo != (MemberInfo)null && ChoType.GetAttribute <BrowsableAttribute>(memberInfo, false) == null)
         {
             ChoType.ConvertNSetMemberValue((object)this, tuple.Item1, (object)DenormalizeString(tuple.Item2));
         }
     }
 }
예제 #4
0
        public static bool IsValidFor(this object @this, string mn, out Exception aggEx)
        {
            ChoGuard.ArgumentNotNullOrEmpty(mn, "MemberName");

            aggEx = null;
            MemberInfo mi = ChoType.GetMemberInfo(@this.GetType(), mn);

            if (mi != null)
            {
                return(IsValidFor(@this, mi, out aggEx));
            }
            else
            {
                return(true);
            }
        }
예제 #5
0
        private static MemberInfo CheckNExtractMemberInfo(object target, string memberName)
        {
            ChoGuard.ArgumentNotNull(target, "Target");

            MemberInfo memberInfo = ChoType.GetMemberInfo(target.GetType(), memberName);

            if (memberInfo == null)
            {
                throw new NullReferenceException(String.Format("Can't find {0} member in {1} type.", memberName, target.GetType().FullName));
            }
            if (memberInfo.MemberType != MemberTypes.Field &&
                memberInfo.MemberType != MemberTypes.Property)
            {
                throw new ChoApplicationException(String.Format("Member `{0}` is not a field/property in {1} type.", memberName, target.GetType().FullName));
            }
            return(memberInfo);
        }
예제 #6
0
        public virtual string GetParams()
        {
            StringBuilder stringBuilder = new StringBuilder();

            foreach (Tuple <string, object> tuple in ChoObjectEx.AsDictionary((object)this, false, false))
            {
                if (stringBuilder.Length > 0)
                {
                    stringBuilder.Append(";");
                }
                MemberInfo memberInfo = ChoType.GetMemberInfo(this.GetType(), tuple.Item1);
                if (memberInfo != (MemberInfo)null && ChoType.GetAttribute <BrowsableAttribute>(memberInfo, false) == null)
                {
                    stringBuilder.AppendFormat(ChoStringEx.FormatString("{0}={1}", (object)tuple.Item1, NormalizeString(tuple.Item2 != null ? tuple.Item2.ToString() : string.Empty)));
                }
            }
            return(stringBuilder.ToString());
        }
예제 #7
0
        public static void SetDefaultValue(this object rec, string fn, ChoRecordFieldConfiguration fieldConfig, CultureInfo culture)
        {
            if (rec is ExpandoObject)
            {
                ((IDictionary <string, object>)rec).SetDefaultValue(fn, fieldConfig, culture);
                return;
            }

            object fieldValue = null;

            //Set default value to member
            try
            {
                bool   defaultValueExists = true;
                object defaultValue       = null;
                if (fieldConfig.IsDefaultValueSpecified)
                {
                    defaultValue = fieldConfig.DefaultValue;
                }
                else if (ChoType.HasDefaultValue(ChoTypeDescriptor.GetProperty(rec.GetType(), fn)))
                {
                    defaultValue = ChoType.GetRawDefaultValue(ChoTypeDescriptor.GetProperty(rec.GetType(), fn));
                }
                else
                {
                    defaultValueExists = false;
                }

                if (defaultValueExists)
                {
                    if (fieldConfig.Converters.IsNullOrEmpty())
                    {
                        fieldValue = ChoConvert.ConvertFrom(defaultValue, ChoType.GetMemberInfo(rec.GetType(), fn), null, culture);
                    }
                    else
                    {
                        fieldValue = ChoConvert.ConvertFrom(defaultValue, ChoType.GetMemberType(rec.GetType(), fn), null, fieldConfig.Converters.ToArray(), null, culture);
                    }

                    ChoType.SetMemberValue(rec, fn, fieldValue);
                }
            }
            catch { }
        }
예제 #8
0
        internal ChoMemberInfo(object target, Type type, IMethodMessage methodCallMsg)
        {
            _methodMsg    = methodCallMsg;
            _target       = target;
            MethodCallMsg = _methodMsg as MethodCallMessageWrapper;

            if (_methodMsg.MethodName == "FieldSetter" || (_methodMsg.MethodName.StartsWith("set_") &&
                                                           _methodMsg.MethodName != "set_Dirty"))
            {
                _dirtyOperation = true;
            }

            if (_methodMsg.MethodName == "FieldSetter" || _methodMsg.MethodName == "FieldGetter")
            {
                _name       = _methodMsg.Args[1] as string;
                _memberType = MemberTypes.Field;
            }
            else if (_methodMsg.MethodName.StartsWith("get_"))
            {
                _name       = _methodMsg.MethodName.Replace("get_", String.Empty);
                _memberType = MemberTypes.Property;
            }
            else if (_methodMsg.MethodName.StartsWith("set_"))
            {
                _name       = _methodMsg.MethodName.Replace("set_", String.Empty);
                _memberType = MemberTypes.Property;
            }
            else
            {
                _name = _methodMsg.MethodName;
            }

            //_memberInfo = ChoType.GetMember(_target.GetType(), Name);
            _memberInfo = ChoType.GetMemberInfo(type, Name);

            if (_dirtyOperation)
            {
                //Set Converted value
                Value = ChoConvert.ConvertFrom(_target, Value, ChoType.GetMemberType(_memberInfo),
                                               ChoTypeDescriptor.GetTypeConverters(_memberInfo), ChoTypeDescriptor.GetTypeConverterParams(_memberInfo));
                //Value = ChoConvert.ConvertFrom(_target, Value, ChoType.GetMemberType(_target.GetType(), _name),
                //    ChoType.GetTypeConverters(ChoType.GetMember(_target.GetType(), _name), typeof(ChoTypeConverterAttribute)));
            }
        }
예제 #9
0
        public static bool SetFallbackValue(this object rec, string fn, ChoRecordFieldConfiguration fieldConfig, CultureInfo culture)
        {
            if (rec is ExpandoObject)
            {
                return(((IDictionary <string, object>)rec).SetFallbackValue(fn, fieldConfig, culture));
            }

            object fieldValue = null;

            //Set Fallback value to member
            bool   FallbackValueExists = true;
            object FallbackValue       = null;

            if (fieldConfig.IsFallbackValueSpecified)
            {
                FallbackValue = fieldConfig.FallbackValue;
            }
            else if (ChoType.HasFallbackValue(ChoTypeDescriptor.GetProperty(rec.GetType(), fn)))
            {
                FallbackValue = ChoType.GetRawFallbackValue(ChoTypeDescriptor.GetProperty(rec.GetType(), fn));
            }
            else
            {
                FallbackValueExists = false;
            }

            if (FallbackValueExists)
            {
                if (fieldConfig.Converters.IsNullOrEmpty())
                {
                    fieldValue = ChoConvert.ConvertFrom(FallbackValue, ChoType.GetMemberInfo(rec.GetType(), fn), null, culture);
                }
                else
                {
                    fieldValue = ChoConvert.ConvertFrom(FallbackValue, ChoType.GetMemberType(rec.GetType(), fn), null, fieldConfig.Converters.ToArray(), null, culture);
                }

                ChoType.SetMemberValue(rec, fn, fieldValue);
            }

            return(FallbackValueExists);
        }
예제 #10
0
        void ChoRegistrySectionInfo_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (RegistryValueKindDictEx.ContainsKey(e.PropertyName) && RegistryValueKindDictEx[e.PropertyName] == RegistryValueKind.ExpandString)
            {
                string     expandedStringMemberName = e.PropertyName + EXPAND_KEY_POSTFIX;
                MemberInfo memberInfo = ChoType.GetMemberInfo(sender.GetType(), expandedStringMemberName);

                if (memberInfo != null)
                {
                    object expandString = ChoType.GetMemberValue(sender, e.PropertyName);;

                    if (expandString != null && expandString is string)
                    {
                        ChoType.SetMemberValue(sender, expandedStringMemberName, Environment.ExpandEnvironmentVariables(expandString as string));
                    }
                    else
                    {
                        ChoType.SetMemberValue(sender, expandedStringMemberName, null);
                    }
                }

                //Console.WriteLine(sender.ToString());
            }
        }
예제 #11
0
 protected virtual object GetDefaultValue(string name)
 {
     return(ChoType.GetRawDefaultValue(ChoType.GetMemberInfo(GetType(), name)));
 }