private void WireNotifyPropertyChangedMembersForChanges(Type type) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(type); if (memberInfos != null && memberInfos.Length > 0) { //Set member values INotifyPropertyChanged memberValue = null; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); memberValue = ChoType.GetMemberValue(this, memberInfo.Name) as INotifyPropertyChanged; if (memberValue == null) { continue; } memberValue.PropertyChanged += MemberValuePropertyChanged; WireNotifyPropertyChangedMembersForChanges(memberValue.GetType()); } } }
private void CallNotifyPropertyChangedForAllDefaultableMembers() { if (!(ConfigObject is ChoConfigurableObject)) { return; } MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); if (memberInfoAttribute == null || !memberInfoAttribute.IsDefaultValueSpecified) { continue; } ((ChoConfigurableObject)ConfigObject).OnPropertyChanged(memberInfo.Name); } } }
public override bool TrySetMember(SetMemberBinder binder, object value) { MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(_type, binder.Name); if (memberInfo == null) { return(false); } try { object newConvertedValue = ChoConvert.ConvertFrom(_instance, value, ChoType.GetMemberType(memberInfo), ChoTypeConvertersCache.GetTypeConverters(memberInfo)); ChoType.SetMemberValue(_instance, memberInfo, newConvertedValue); } catch (Exception ex) { Trace.TraceError(ex.ToString()); return(false); } if (!(_instance is INotifyPropertyChanged)) { PropertyChangedEventHandler propertyChanged = PropertyChanged; if (propertyChanged != null) { propertyChanged(this, new PropertyChangedEventArgs(binder.Name)); } } return(true); }
internal void CallAfterConfigurationMemberPersist() { //if (!(ConfigObject is ChoConfigurableObject)) // return; if (AfterConfigurationObjectMemberPersist != null) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(GetType()); if (memberInfos == null || memberInfos.Length == 0) { return; } ChoPropertyInfoAttribute memberInfoAttribute = null; string name = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } object memberValue = ChoType.GetMemberValue(this, memberInfo.Name); memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); name = ChoType.GetMemberName(memberInfo, memberInfoAttribute); RaiseAfterConfigurationObjectMemberPersist(memberInfo.Name, name, memberValue); } } }
public void ResetToMemberDefaultValue(string memberName) { ChoGuard.ArgumentNotNullOrEmpty(memberName, "MemberName"); MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(GetType(), memberName); ResetToMemberDefaultValue(memberInfo); }
public static IEnumerable <object> AsList(this object target, bool flattenhierarchy = false, bool expandCollection = false) { if (target != null) { Type type = target.GetType(); foreach (MemberInfo memberInfo in ChoTypeMembersCache.GetAllMemberInfos(type)) { object memberValue = ChoType.GetMemberValue(target, memberInfo); if (!flattenhierarchy) { yield return(memberValue); } else { Type memberType = ChoType.GetMemberType(memberInfo); if (memberType.IsSimple()) { yield return(memberValue); } else if (typeof(ICollection).IsAssignableFrom(memberType)) { if (!expandCollection || memberValue == null) { yield return(memberValue); } else { if (((ICollection)memberValue).Count == 0) { yield return(null); } else { foreach (object value in (ICollection)memberValue) { yield return(value); } } } } else { foreach (Tuple <string, object> subItem in AsDictionary(memberValue, flattenhierarchy)) { yield return(subItem); } } } } } yield break; }
private bool AssignToFallbackOrDefaultValues(ref bool isDirty) { bool isModfied = false; object defaultValue = null; object fallbackValue = null; MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values string name; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } name = ChoType.GetMemberName(memberInfo); memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); //if (memberInfoAttribute == null) continue; defaultValue = null; fallbackValue = null; bool isDefaultValueSpecified = ChoConfigurationMetaDataManager.TryConfigDefaultValue(this, name, memberInfoAttribute, out defaultValue); ChoConfigurationMetaDataManager.TryConfigFallbackValue(this, name, memberInfoAttribute, out fallbackValue); if (fallbackValue == null) { if (!isDefaultValueSpecified) { continue; } } bool hasError = !ChoConfigurationObjectErrorManagerService.GetObjectMemberError(ConfigObject, memberInfo.Name).IsNullOrEmpty(); if (hasError) { isModfied = true; if (_firstTime) { AssignToFallbackOrDefaultValue(defaultValue, fallbackValue, memberInfo); } } } } return(isModfied); }
public override bool TryGetMember(GetMemberBinder binder, out object result) { result = null; MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(_type, binder.Name); if (memberInfo != null) { result = ChoType.GetMemberValue(_instance, memberInfo); return(true); } else { return(false); } }
public override bool TrySetMember(SetMemberBinder binder, object value) { MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(_type, binder.Name); if (memberInfo == null) { return(false); } string propertyName = ChoType.GetMemberName(memberInfo); object newConvertedValue = null; try { newConvertedValue = ChoConvert.ConvertFrom(value, memberInfo, _instance); // newConvertedValue = ChoConvert.ConvertFrom(_instance, value, ChoType.GetMemberType(memberInfo), //ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)); ChoType.SetMemberValue(_instance, memberInfo, newConvertedValue); } catch (ChoConfigurationObjectPostInvokeException) { } catch (ChoFatalApplicationException) { throw; } catch (Exception ex) { Trace.TraceError(ex.ToString()); if (_instance.RaiseConfigurationObjectMemberLoadError(binder.Name, propertyName, value, ex)) { _instance.OnPropertyChanged(binder.Name); return(true); } else { return(false); } } _instance.OnPropertyChanged(binder.Name); return(true); }
private void Reset() { if (ConfigObject == null) { return; } ChoConfigurationObjectErrorManagerService.ResetObjectErrors(ConfigObject); //MemberInfo[] memberInfos = ChoType.GetMembers(ConfigObject.GetType(), typeof(ChoConfigurationPropertyAttribute)); MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); string name = ChoType.GetMemberName(memberInfo); object defaultValue = null; bool isDefaultValueSpecified = ChoConfigurationMetaDataManager.TryConfigDefaultValue(this, name, memberInfoAttribute, out defaultValue); if (memberInfoAttribute == null || !isDefaultValueSpecified) { continue; } try { //object newConvertedValue = memberInfoAttribute.DefaultValue; object newConvertedValue = ChoConvert.ConvertFrom(ConfigObject, defaultValue, ChoType.GetMemberType(memberInfo), ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)); SetConfigPropertyValue(newConvertedValue, memberInfo); //ChoType.SetMemberValue(ConfigObject, memberInfo, newConvertedValue); } catch (Exception innerEx) { ChoConfigurationObjectErrorManagerService.SetObjectMemberError(ConfigObject, memberInfo.Name, String.Format("Failed to assign `{0}` default value. {1}", ChoString.ToString(defaultValue), innerEx.Message)); } } } }
public IEnumerable <KeyValuePair <string, object> > AsDictionary() { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values string name; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); name = ChoType.GetMemberName(memberInfo); yield return(new KeyValuePair <string, object>(name, ChoType.GetMemberValue(GetType(), memberInfo))); } } }
private bool ExtractNPopulateValues(ref bool hasErrors, ref bool isDirty) { bool isModfied = false; object oldValue = null; object newValue = null; object origValue = null; object defaultValue = null; object fallbackValue = null; bool isConfigmemberDefined = false; //MemberInfo[] memberInfos = ChoType.GetMembers(ConfigObject.GetType(), typeof(ChoConfigurationPropertyAttribute)); MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values string name; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); //if (memberInfoAttribute == null) continue; oldValue = null; newValue = null; origValue = null; defaultValue = null; fallbackValue = null; name = ChoType.GetMemberName(memberInfo); isConfigmemberDefined = ConfigSection.HasConfigMemberDefined(name); oldValue = ChoType.GetMemberValue(ConfigObject, memberInfo.Name); object configFallbackValue = null; object configDefaultValue = null; bool isDefaultValueSpecified = ChoConfigurationMetaDataManager.TryConfigDefaultValue(this, name, memberInfoAttribute, out configDefaultValue); ChoConfigurationMetaDataManager.TryConfigFallbackValue(this, name, memberInfoAttribute, out configFallbackValue); if (configFallbackValue == null) { if (isDefaultValueSpecified) { defaultValue = origValue = newValue = configDefaultValue; } } else { fallbackValue = origValue = newValue = configFallbackValue; } if (!isConfigmemberDefined) { if (!isDirty) { isDirty = memberInfoAttribute != null && memberInfoAttribute.Persistable ? true : false; } } else { origValue = newValue = ConfigSection[name]; } try { object newConvertedValue = ChoConvert.ConvertFrom(ConfigObject, newValue, ChoType.GetMemberType(memberInfo), ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)); newValue = newConvertedValue; } catch { } ChoConfigurableObject configObject = ConfigObject as ChoConfigurableObject; if (configObject != null) { if (!configObject.IsMemeberValueEqualInternal(memberInfo, oldValue, newValue)) { if (!configObject.RaiseBeforeConfigurationObjectMemberLoaded(memberInfo.Name, name, origValue, ref newValue)) { try { //ChoType.SetMemberValue(ConfigObject, memberInfo.Name, newValue != null ? ChoConvert.ConvertFrom(ConfigObject, newValue, // ChoType.GetMemberType(memberInfo), ChoTypeConvertersCache.GetTypeConverters(memberInfo)) : null); SetConfigPropertyValue(newValue, memberInfo); if (!_firstTime) { isModfied = true; } configObject.RaiseAfterConfigurationObjectMemberLoaded(memberInfo.Name, name, newValue); ChoConfigurationObjectErrorManagerService.ResetObjectMemberError(ConfigObject, memberInfo.Name); } catch (Exception innerEx) { if (!configObject.RaiseConfigurationObjectMemberLoadError(memberInfo.Name, name, origValue, innerEx)) { if (Silent) { if (_firstTime) { AssignToFallbackOrDefaultValue(defaultValue, fallbackValue, memberInfo); } ChoConfigurationObjectErrorManagerService.SetObjectMemberError(ConfigObject, memberInfo.Name, String.Format(Resources.ConfigConstructMsg, ChoString.ToString(origValue), innerEx.Message)); } else { throw new ChoConfigurationConstructionException(String.Format(Resources.ConfigConstructExceptionMsg, ChoString.ToString(origValue), ConfigObject.GetType().FullName, memberInfo.Name), innerEx); } } } } } } else { try { //ChoType.SetMemberValue(ConfigObject, memberInfo.Name, newValue != null ? ChoConvert.ConvertFrom(ConfigObject, newValue, // ChoType.GetMemberType(memberInfo), ChoTypeConvertersCache.GetTypeConverters(memberInfo)) : null); SetConfigPropertyValue(newValue, memberInfo); if (!_firstTime) { isModfied = true; } ChoConfigurationObjectErrorManagerService.ResetObjectMemberError(ConfigObject, memberInfo.Name); } catch (Exception innerEx) { if (Silent) { if (_firstTime) { AssignToFallbackOrDefaultValue(defaultValue, fallbackValue, memberInfo); } ChoConfigurationObjectErrorManagerService.SetObjectMemberError(ConfigObject, memberInfo.Name, String.Format(Resources.ConfigConstructMsg, ChoString.ToString(origValue), innerEx.Message)); } else { throw new ChoConfigurationConstructionException(String.Format(Resources.ConfigConstructExceptionMsg, ChoString.ToString(origValue), ConfigObject.GetType().FullName, memberInfo.Name), innerEx); } } } } } return(isModfied); }
private static ChoPropertyInfos ConstructPropertyInfos(ChoCommandLineArgObject cmdLineArgObject) { if (cmdLineArgObject != null) { Dictionary <string, ChoPropertyInfos> propDict = _propDict; string elementPath = cmdLineArgObject.GetType().Name; if (elementPath.IsNullOrWhiteSpace()) { return(ChoPropertyInfos.Default); } if (!propDict.ContainsKey(elementPath)) { lock (_padLock) { if (!propDict.ContainsKey(elementPath)) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(cmdLineArgObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values List <ChoPropertyInfo> propertyInfoList = new List <ChoPropertyInfo>(); ChoDefaultCommandLineArgAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { memberInfoAttribute = (ChoDefaultCommandLineArgAttribute)ChoType.GetMemberAttributeByBaseType(memberInfo, typeof(ChoDefaultCommandLineArgAttribute)); if (memberInfoAttribute == null) { continue; } ChoPropertyInfo propInfo = new ChoPropertyInfo(); propInfo.Name = ChoType.GetMemberName(memberInfo); if (ChoType.GetMemberType(memberInfo) != typeof(bool)) { propInfo.DefaultValue = new ChoCDATA(memberInfoAttribute.DefaultValue); propInfo.FallbackValue = new ChoCDATA(memberInfoAttribute.FallbackValue); propInfo.IsDefaultValueSpecified = memberInfoAttribute.IsDefaultValueSpecified; propInfo.IsFallbackValueSpecified = memberInfoAttribute.IsFallbackValueSpecified; propertyInfoList.Add(propInfo); } } if (propertyInfoList != null) { ChoPropertyInfos propertyInfos = new ChoPropertyInfos(); propertyInfos.PropertyInfoArr = propertyInfoList.ToArray(); SetMetaDataSection(cmdLineArgObject, propertyInfos); return(propertyInfos); } } } } } } return(ChoPropertyInfos.Default); }
private static ChoPropertyInfos ConstructPropertyInfos(ChoBaseConfigurationElement configElement) { if (configElement != null && configElement.ConfigbObjectType != null) { Dictionary <string, ChoPropertyInfos> propDict = _propDict; string configElementPath = configElement.ConfigElementPath; if (configElementPath.IsNullOrWhiteSpace()) { return(ChoPropertyInfos.Default); } if (!propDict.ContainsKey(configElementPath)) { lock (_padLock) { if (!propDict.ContainsKey(configElementPath)) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(configElement.ConfigbObjectType); if (memberInfos != null && memberInfos.Length > 0) { //Set member values List <ChoPropertyInfo> propertyInfoList = new List <ChoPropertyInfo>(); ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); ChoPropertyInfo propInfo = new ChoPropertyInfo(); propInfo.Name = ChoType.GetMemberName(memberInfo); if (memberInfoAttribute != null) { propInfo.DefaultValue = memberInfoAttribute.DefaultValue; propInfo.FallbackValue = memberInfoAttribute.FallbackValue; propInfo.SourceType = memberInfoAttribute.SourceType; propInfo.IsDefaultValueSpecified = memberInfoAttribute.IsDefaultValueSpecified; propInfo.IsFallbackValueSpecified = memberInfoAttribute.IsFallbackValueSpecified; } propertyInfoList.Add(propInfo); } if (propertyInfoList.Count > 0) { ChoPropertyInfos propertyInfos = new ChoPropertyInfos(); propertyInfos.PropertyInfoArr = propertyInfoList.ToArray(); return(propertyInfos); } } } } } } return(ChoPropertyInfos.Default); }
public static string GetUsage(object target) { ChoGuard.ArgumentNotNull(target, "Target"); StringBuilder builder = new StringBuilder(); StringBuilder whereBuilder = new StringBuilder(); ChoCommandLineParserSettings commandLineParserSettings = ChoCommandLineParserSettings.Me; char cmdLineValueSeperator = commandLineParserSettings.ValueSeperators != null && commandLineParserSettings.ValueSeperators.Length > 0 ? commandLineParserSettings.ValueSeperators[0] : ':'; char cmdLineSwitchChar = commandLineParserSettings.SwitchChars != null && commandLineParserSettings.SwitchChars.Length > 0 ? commandLineParserSettings.SwitchChars[0] : '-'; builder.Append(ChoApplication.EntryAssemblyFileName); MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType()); if (memberInfos != null && memberInfos.Length > 0) { ChoCommandLineArgAttribute commandLineArgumentAttribute = null; ChoDefaultCommandLineArgAttribute defaultCommandLineArgAttribute = null; bool isEmptyShortName; foreach (MemberInfo memberInfo in memberInfos) { //if (ChoType.IsReadOnlyMember(memberInfo)) // continue; commandLineArgumentAttribute = null; defaultCommandLineArgAttribute = null; commandLineArgumentAttribute = (ChoCommandLineArgAttribute)memberInfo.GetCustomAttribute <ChoCommandLineArgAttribute>(true); if (commandLineArgumentAttribute == null) { defaultCommandLineArgAttribute = (ChoDefaultCommandLineArgAttribute)memberInfo.GetCustomAttribute <ChoDefaultCommandLineArgAttribute>(true); if (defaultCommandLineArgAttribute == null) { continue; } } else { defaultCommandLineArgAttribute = commandLineArgumentAttribute; } isEmptyShortName = !defaultCommandLineArgAttribute.ShortName.IsNull() && defaultCommandLineArgAttribute.ShortName.Length == 0; if (commandLineArgumentAttribute != null) { builder.Append(" {0}{1}{2}".FormatString(cmdLineSwitchChar, commandLineArgumentAttribute.CommandLineSwitch, !isEmptyShortName ? cmdLineValueSeperator.ToString() : String.Empty)); } else { builder.Append(" "); } Type memberType = ChoType.GetMemberType(memberInfo); if (defaultCommandLineArgAttribute.IsRequired) { if (!isEmptyShortName) { builder.Append("["); } } if (commandLineArgumentAttribute != null) { whereBuilder.AppendFormat("{1}{2}{4}{3}{0}", Environment.NewLine, cmdLineSwitchChar, commandLineArgumentAttribute.CommandLineSwitch, commandLineArgumentAttribute.Description.WrapLongLines(commandLineArgumentAttribute.DescriptionFormatLineSize, String.Empty, commandLineArgumentAttribute.DescriptionFormatLineBreakChar, commandLineArgumentAttribute.DescriptionFormatLineNoOfTabs), commandLineArgumentAttribute.SwitchValueSeperator); } else { whereBuilder.AppendFormat("{3}{2}{1}{0}", Environment.NewLine, defaultCommandLineArgAttribute.Description.WrapLongLines(defaultCommandLineArgAttribute.DescriptionFormatLineSize, String.Empty, defaultCommandLineArgAttribute.DescriptionFormatLineBreakChar, defaultCommandLineArgAttribute.DescriptionFormatLineNoOfTabs), defaultCommandLineArgAttribute.SwitchValueSeperator, DefaultCmdLineSwitch); } if (!defaultCommandLineArgAttribute.ShortName.IsNull()) { builder.Append(defaultCommandLineArgAttribute.ShortName); } else { if (memberType == typeof(int)) { builder.Append("<int>"); } else if (memberType == typeof(uint)) { builder.Append("<uint>"); } else if (memberType == typeof(bool)) { builder.Append("{True|False}"); } else if (memberType == typeof(string)) { builder.Append("<string>"); } else if (memberType.IsEnum) { builder.Append("{"); bool first = true; foreach (FieldInfo field in memberType.GetFields()) { if (field.IsStatic) { if (first) { first = false; } else { builder.Append('|'); } builder.Append(field.Name); } } builder.Append('}'); } else { builder.Append("<Unknown>"); } } if (defaultCommandLineArgAttribute.IsRequired) { if (!isEmptyShortName) { builder.Append("]"); } } } } builder.Append(Environment.NewLine); builder.Append(Environment.NewLine); builder.Append("Where"); builder.Append(Environment.NewLine); builder.Append(whereBuilder.ToString().Indent()); builder.Append(Environment.NewLine); if (target is ChoCommandLineArgObject) { string additionalUsageText = ((ChoCommandLineArgObject)target).AdditionalUsageText; if (!additionalUsageText.IsNullOrWhiteSpace()) { builder.Append(additionalUsageText); builder.Append(Environment.NewLine); builder.Append(Environment.NewLine); } } return(builder.ToString()); }
public virtual string GetUsage() { Type type = GetType(); StringBuilder builder = new StringBuilder(); StringBuilder whereBuilder = new StringBuilder(); ChoCommandLineParserSettings commandLineParserSettings = ChoCommandLineParserSettings.Me; char cmdLineValueSeparator = commandLineParserSettings.ValueSeparators != null && commandLineParserSettings.ValueSeparators.Length > 0 ? commandLineParserSettings.ValueSeparators[0] : ':'; char cmdLineSwitchChar = commandLineParserSettings.SwitchChars != null && commandLineParserSettings.SwitchChars.Length > 0 ? commandLineParserSettings.SwitchChars[0] : '-'; builder.Append(Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location).ToUpper()); MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(type); if (memberInfos != null && memberInfos.Length > 0) { ChoCommandLineArgAttribute commandLineArgumentAttribute = null; ChoDefaultCommandLineArgAttribute defaultCommandLineArgAttribute = null; ChoPositionalCommandLineArgAttribute posCommandLineArgAttribute = null; List <Tuple <ChoDefaultCommandLineArgAttribute, MemberInfo> > memberList = new List <Tuple <ChoDefaultCommandLineArgAttribute, MemberInfo> >(); foreach (MemberInfo memberInfo in memberInfos) { commandLineArgumentAttribute = null; defaultCommandLineArgAttribute = null; defaultCommandLineArgAttribute = commandLineArgumentAttribute = (ChoCommandLineArgAttribute)memberInfo.GetCustomAttribute <ChoCommandLineArgAttribute>(true); if (commandLineArgumentAttribute == null) { defaultCommandLineArgAttribute = posCommandLineArgAttribute = (ChoPositionalCommandLineArgAttribute)memberInfo.GetCustomAttribute <ChoPositionalCommandLineArgAttribute>(true); if (posCommandLineArgAttribute == null) { continue; } } memberList.Add(new Tuple <ChoDefaultCommandLineArgAttribute, MemberInfo>(defaultCommandLineArgAttribute, memberInfo)); } bool isEmptyShortName; memberList.Sort((x, y) => x.Item1.Order.CompareTo(y.Item1.Order)); MemberInfo memberInfo1 = null; foreach (Tuple <ChoDefaultCommandLineArgAttribute, MemberInfo> tuple in memberList) { memberInfo1 = tuple.Item2; commandLineArgumentAttribute = null; defaultCommandLineArgAttribute = null; defaultCommandLineArgAttribute = commandLineArgumentAttribute = (ChoCommandLineArgAttribute)memberInfo1.GetCustomAttribute <ChoCommandLineArgAttribute>(true); if (commandLineArgumentAttribute == null) { defaultCommandLineArgAttribute = posCommandLineArgAttribute = (ChoPositionalCommandLineArgAttribute)memberInfo1.GetCustomAttribute <ChoPositionalCommandLineArgAttribute>(true); if (posCommandLineArgAttribute == null) { continue; } } isEmptyShortName = !defaultCommandLineArgAttribute.ShortName.IsNull() && defaultCommandLineArgAttribute.ShortName.Length == 0; if (!defaultCommandLineArgAttribute.IsRequired) { builder.Append(" ["); } else { builder.Append(" "); } Type memberType = ChoType.GetMemberType(memberInfo1); if (memberType.IsNullableType()) { memberType = Nullable.GetUnderlyingType(memberType); } if (commandLineArgumentAttribute != null) { builder.Append("{0}{1}{2}".FormatString(cmdLineSwitchChar, commandLineArgumentAttribute.CommandLineSwitch, !isEmptyShortName ? cmdLineValueSeparator.ToString() : String.Empty)); } string description = null; if (commandLineArgumentAttribute != null) { description = commandLineArgumentAttribute.Description; } else if (posCommandLineArgAttribute != null) { description = posCommandLineArgAttribute.Description; } else { description = defaultCommandLineArgAttribute.Description; } if (_commandLineArgsObjectAttribute.GetDisplayDefaultValue()) { string defaultValue = null; defaultValue = GetDefaultValueText(memberInfo1); if (defaultValue != null && memberType != typeof(bool)) { description = "{0} [DEFAULT: {1}]".FormatString(description, defaultValue); } } if (commandLineArgumentAttribute != null) { whereBuilder.AppendFormat("{1}{3}{2}{0}", Environment.NewLine, GetCmdLineSwitches(cmdLineSwitchChar, commandLineArgumentAttribute), description.WrapLongLines(commandLineArgumentAttribute.DescriptionFormatLineSize, String.Empty, commandLineArgumentAttribute.DescriptionFormatLineBreakChar, commandLineArgumentAttribute.NoOfTabsSwitchDescFormatSeparator), "\t".Repeat(commandLineArgumentAttribute.NoOfTabsSwitchDescFormatSeparator)); } else if (posCommandLineArgAttribute != null) { whereBuilder.AppendFormat("{1}{3}{2}{0}", Environment.NewLine, defaultCommandLineArgAttribute.ShortName.IsNull() ? "Position{0}".FormatString(posCommandLineArgAttribute.Position) : defaultCommandLineArgAttribute.ShortName, description.WrapLongLines(posCommandLineArgAttribute.DescriptionFormatLineSize, String.Empty, posCommandLineArgAttribute.DescriptionFormatLineBreakChar, posCommandLineArgAttribute.NoOfTabsSwitchDescFormatSeparator), "\t".Repeat(posCommandLineArgAttribute.NoOfTabsSwitchDescFormatSeparator)); } else { whereBuilder.AppendFormat("{3}{2}{1}{0}", Environment.NewLine, description.WrapLongLines(defaultCommandLineArgAttribute.DescriptionFormatLineSize, String.Empty, defaultCommandLineArgAttribute.DescriptionFormatLineBreakChar, defaultCommandLineArgAttribute.NoOfTabsSwitchDescFormatSeparator), "\t".Repeat(defaultCommandLineArgAttribute.NoOfTabsSwitchDescFormatSeparator), DefaultCmdLineSwitch); } if (memberType == typeof(int)) { if (!defaultCommandLineArgAttribute.ShortName.IsNull()) { builder.Append(defaultCommandLineArgAttribute.ShortName); } else { builder.Append("<int>"); } } else if (memberType == typeof(uint)) { if (!defaultCommandLineArgAttribute.ShortName.IsNull()) { builder.Append(defaultCommandLineArgAttribute.ShortName); } else { builder.Append("<uint>"); } } else if (memberType == typeof(bool)) { builder.Remove(builder.Length - 1, 1); } else if (memberType == typeof(string)) { if (!defaultCommandLineArgAttribute.ShortName.IsNull()) { builder.Append(defaultCommandLineArgAttribute.ShortName); } else { builder.Append("<string>"); } } else if (memberType.IsEnum) { //builder.Append("{0}{1}{2}".FormatString(cmdLineSwitchChar, commandLineArgumentAttribute.CommandLineSwitch, !isEmptyShortName ? cmdLineValueSeparator.ToString() : String.Empty)); builder.Append("{"); bool first = true; foreach (FieldInfo field in memberType.GetFields()) { if (field.IsStatic) { if (first) { first = false; } else { builder.Append(" | "); } builder.Append(field.Name); } } builder.Append('}'); } else { if (!defaultCommandLineArgAttribute.ShortName.IsNull()) { builder.Append(defaultCommandLineArgAttribute.ShortName); } else { builder.Append("<Unknown>"); } } if (!defaultCommandLineArgAttribute.IsRequired) { builder.Append("]"); } } } if (!_commandLineArgsObjectAttribute.DoNotShowUsageDetail) { builder.Append(Environment.NewLine); builder.Append(Environment.NewLine); builder.Append(whereBuilder.ToString().Indent()); builder.Append(Environment.NewLine); foreach (ChoCommandLineArgAdditionalUsageAttribute commandLineArgAdditionalUsageAttribute in ChoType.GetAttributes <ChoCommandLineArgAdditionalUsageAttribute>(type)) { if (commandLineArgAdditionalUsageAttribute != null && !commandLineArgAdditionalUsageAttribute.AdditionalUsageText.IsNull()) { builder.Append(commandLineArgAdditionalUsageAttribute.AdditionalUsageText); builder.Append(Environment.NewLine); builder.Append(Environment.NewLine); } } } return(builder.ToString()); }
private static void ExtractAndPopulateValues <T>(T target, IDataReader dr, ChoDataObjectAttribute objAttr) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType()); if (memberInfos != null && memberInfos.Length > 0) { string name; string fallbackValue = null; object memberValue = null; object newValue = null; object defaultValue = null; object value = null; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { name = ChoType.GetMemberName(memberInfo); memberValue = null; newValue = null; value = null; memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttributeByBaseType(memberInfo, typeof(ChoPropertyInfoAttribute)); try { if (dr.FieldExists(name)) { value = dr[name]; } try { defaultValue = memberInfo.GetDefaultValue(); //if (memberInfoAttribute != null) //{ // if (!memberInfoAttribute.DefaultValue.IsNullOrWhiteSpace()) // defaultValue = ChoString.ExpandPropertiesEx(memberInfoAttribute.DefaultValue); //} } catch { defaultValue = null; } try { if (memberInfoAttribute != null) { if (!memberInfoAttribute.FallbackValue.IsNullOrWhiteSpace()) { fallbackValue = ChoString.ExpandPropertiesEx(memberInfoAttribute.FallbackValue); } } } catch { fallbackValue = null; } newValue = memberValue = value; if (newValue.IsNullOrDbNull()) { if (fallbackValue == null) { newValue = defaultValue; } else { newValue = fallbackValue; } } newValue = ChoConvert.ConvertFrom(newValue, memberInfo, target); // newValue = ChoConvert.ConvertFrom(target, newValue, ChoType.GetMemberType(memberInfo), //ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)); if (newValue == null) { } else { ChoType.SetMemberValue(target, memberInfo, newValue); } } catch (Exception) { if (objAttr == null || (objAttr != null && !objAttr.Silent)) { throw; } } } } }