You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2004/09/09 20:56:53 UTC

cvs commit: logging-log4net/src/Repository/Hierarchy XmlHierarchyConfigurator.cs

nicko       2004/09/09 11:56:53

  Modified:    src/Repository/Hierarchy XmlHierarchyConfigurator.cs
  Log:
  Added support for using a TypeConverter to convert from the explicitly specified type to the actual required property type
  
  Revision  Changes    Path
  1.9       +23 -1     logging-log4net/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs
  
  Index: XmlHierarchyConfigurator.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XmlHierarchyConfigurator.cs	19 Aug 2004 21:31:09 -0000	1.8
  +++ XmlHierarchyConfigurator.cs	9 Sep 2004 18:56:53 -0000	1.9
  @@ -553,6 +553,8 @@
   					}
   #endif
   
  +					Type parsedObjectConversionTargetType = null;
  +
   					// Check if a specific subtype is specified on the element using the 'type' attribute
   					string subTypeString = element.GetAttribute(TYPE_ATTR);
   					if (subTypeString != null && subTypeString.Length > 0)
  @@ -566,7 +568,19 @@
   
   							if (!propertyType.IsAssignableFrom(subType))
   							{
  -								LogLog.Error("XmlConfigurator: Subtype ["+subType.FullName+"] set on ["+name+"] is not a subclass of property type ["+propertyType.FullName+"]");
  +								// Check if there is an appropriate type converter
  +								if (OptionConverter.CanConvertTypeTo(subType, propertyType))
  +								{
  +									// Must reconvert to real property type
  +									parsedObjectConversionTargetType = propertyType;
  +
  +									// Use sub type as intermediary type
  +									propertyType = subType;
  +								}
  +								else
  +								{
  +									LogLog.Error("XmlConfigurator: Subtype ["+subType.FullName+"] set on ["+name+"] is not a subclass of property type ["+propertyType.FullName+"] and there are no acceptable type conversions.");
  +								}
   							}
   							else
   							{
  @@ -585,6 +599,14 @@
   					// to pass to this property.
   
   					object convertedValue = ConvertStringTo(propertyType, propertyValue);
  +					
  +					// Check if we need to do an additional conversion
  +					if (convertedValue != null && parsedObjectConversionTargetType != null)
  +					{
  +						LogLog.Debug("XmlConfigurator: Performing additional conversion of value from [" + convertedValue.GetType().Name + "] to [" + parsedObjectConversionTargetType.Name + "]");
  +						convertedValue = OptionConverter.ConvertTypeTo(convertedValue, parsedObjectConversionTargetType);
  +					}
  +
   					if (convertedValue != null)
   					{
   						if (propInfo != null)