hammett     2004/04/19 20:37:49

  Modified:    avalon-net/Castle/MicroKernel
                        Apache.Avalon.Castle.MicroKernel.csproj
                        AvalonKernel.cs BaseKernel.cs DefaultKernel.cs
                        Kernel.cs
               avalon-net/Castle/MicroKernel/MicroKernelTest
                        Apache.Avalon.Castle.MicroKernel.Test.csproj
                        DefaultConfigurationManagerTestCase.cs
               avalon-net/Castle/MicroKernel/Model/Default
                        DefaultComponentModelBuilder.cs
  Added:       avalon-net/Castle/MicroKernel IKernelSubsystem.cs
                        KernelConstants.cs
               avalon-net/Castle/MicroKernel/Subsystems
                        AbstractSubsystem.cs
               avalon-net/Castle/MicroKernel/Subsystems/Configuration/Default
                        AvalonConfigurationSectionHandler.cs
                        ContainerConfiguration.cs
                        DefaultConfigurationManager.cs
               avalon-net/Castle/MicroKernel/Subsystems/Configuration
                        IConfigurationManager.cs
               avalon-net/Castle/MicroKernel/Subsystems/Context/Default
                        ContextManager.cs
               avalon-net/Castle/MicroKernel/Subsystems/Context
                        IContextManager.cs
               avalon-net/Castle/MicroKernel/Subsystems/Logger/Default
                        AvalonLoggerSectionHandler.cs
                        LoggerConfiguration.cs LoggerManager.cs
               avalon-net/Castle/MicroKernel/Subsystems/Logger
                        ILoggerManager.cs
  Removed:     avalon-net/Castle/MicroKernel/Avalon/Configuration/Default
                        AvalonConfigurationSectionHandler.cs
                        ContainerConfiguration.cs
                        DefaultConfigurationManager.cs
               avalon-net/Castle/MicroKernel/Avalon/Configuration
                        IConfigurationManager.cs
               avalon-net/Castle/MicroKernel/Avalon/Context/Default
                        ContextManager.cs
               avalon-net/Castle/MicroKernel/Avalon/Context
                        IContextManager.cs
               avalon-net/Castle/MicroKernel/Avalon/Logger/Default
                        LoggerManager.cs
               avalon-net/Castle/MicroKernel/Avalon/Logger
                        ILoggerManager.cs
  Log:
  More test cases. Completed ConfigurationManager and LoggerManager implementation. 
Still a ContextManager to do.
  
  Revision  Changes    Path
  1.6       +63 -38    
avalon-sandbox/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj
  
  Index: Apache.Avalon.Castle.MicroKernel.csproj
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Apache.Avalon.Castle.MicroKernel.csproj   18 Apr 2004 03:31:31 -0000      1.5
  +++ Apache.Avalon.Castle.MicroKernel.csproj   20 Apr 2004 03:37:48 -0000      1.6
  @@ -119,72 +119,42 @@
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = "IResolver.cs"
  -                    SubType = "Code"
  -                    BuildAction = "Compile"
  -                />
  -                <File
  -                    RelPath = "Kernel.cs"
  -                    SubType = "Code"
  -                    BuildAction = "Compile"
  -                />
  -                <File
  -                    RelPath = "Aspects\AspectInvocationHandler.cs"
  -                    SubType = "Code"
  -                    BuildAction = "Compile"
  -                />
  -                <File
  -                    RelPath = "Aspects\AspectPointCutFlags.cs"
  -                    SubType = "Code"
  -                    BuildAction = "Compile"
  -                />
  -                <File
  -                    RelPath = "Aspects\IAspect.cs"
  -                    SubType = "Code"
  -                    BuildAction = "Compile"
  -                />
  -                <File
  -                    RelPath = "Assemble\Assembler.cs"
  -                    SubType = "Code"
  -                    BuildAction = "Compile"
  -                />
  -                <File
  -                    RelPath = "Avalon\Configuration\IConfigurationManager.cs"
  +                    RelPath = "IKernelSubsystem.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = 
"Avalon\Configuration\Default\AvalonConfigurationSectionHandler.cs"
  +                    RelPath = "IResolver.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = 
"Avalon\Configuration\Default\ContainerConfiguration.cs"
  +                    RelPath = "Kernel.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = 
"Avalon\Configuration\Default\DefaultConfigurationManager.cs"
  +                    RelPath = "KernelConstants.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = "Avalon\Context\IContextManager.cs"
  +                    RelPath = "Aspects\AspectInvocationHandler.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = "Avalon\Context\Default\ContextManager.cs"
  +                    RelPath = "Aspects\AspectPointCutFlags.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = "Avalon\Logger\ILoggerManager.cs"
  +                    RelPath = "Aspects\IAspect.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
                   <File
  -                    RelPath = "Avalon\Logger\Default\LoggerManager.cs"
  +                    RelPath = "Assemble\Assembler.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
  @@ -415,6 +385,61 @@
                   />
                   <File
                       RelPath = "Model\Default\DefaultDependencyModel.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\AbstractSubsystem.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\Configuration\IConfigurationManager.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = 
"Subsystems\Configuration\Default\AvalonConfigurationSectionHandler.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = 
"Subsystems\Configuration\Default\ContainerConfiguration.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = 
"Subsystems\Configuration\Default\DefaultConfigurationManager.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\Context\IContextManager.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\Context\Default\ContextManager.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\Logger\ILoggerManager.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = 
"Subsystems\Logger\Default\AvalonLoggerSectionHandler.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\Logger\Default\LoggerConfiguration.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
  +                    RelPath = "Subsystems\Logger\Default\LoggerManager.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
                   />
  
  
  
  1.3       +0 -20     avalon-sandbox/avalon-net/Castle/MicroKernel/AvalonKernel.cs
  
  Index: AvalonKernel.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/AvalonKernel.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AvalonKernel.cs   18 Apr 2004 03:31:31 -0000      1.2
  +++ AvalonKernel.cs   20 Apr 2004 03:37:48 -0000      1.3
  @@ -18,8 +18,6 @@
   
        using Apache.Avalon.Castle.MicroKernel.Concerns;
        using Apache.Avalon.Castle.MicroKernel.Model;
  -     using Apache.Avalon.Castle.MicroKernel.Configuration;
  -     using Apache.Avalon.Castle.MicroKernel.Logger;
   
        /// <summary>
        /// Specialization of Kernel to support 
  @@ -33,24 +31,6 @@
                ConcernManager Concerns
                {
                        get;
  -             }
  -
  -             /// <summary>
  -             /// 
  -             /// </summary>
  -             IConfigurationManager ConfigurationManager
  -             {
  -                     get;
  -                     set;
  -             }
  -
  -             /// <summary>
  -             /// 
  -             /// </summary>
  -             ILoggerManager LoggerManager
  -             {
  -                     get;
  -                     set;
                }
        }
   }
  
  
  
  1.4       +28 -0     avalon-sandbox/avalon-net/Castle/MicroKernel/BaseKernel.cs
  
  Index: BaseKernel.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/BaseKernel.cs,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BaseKernel.cs     3 Apr 2004 23:03:02 -0000       1.3
  +++ BaseKernel.cs     20 Apr 2004 03:37:48 -0000      1.4
  @@ -34,6 +34,8 @@
   
                protected Hashtable m_services;
   
  +             protected Hashtable m_subsystems;
  +
                protected Hashtable m_dependencyToSatisfy;
   
                protected IHandlerFactory m_handlerFactory;
  @@ -52,6 +54,7 @@
                        m_components = new 
Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
                        m_services = new Hashtable();
                        m_dependencyToSatisfy = new Hashtable();
  +                     m_subsystems = new Hashtable();
                        m_handlerFactory = new Handler.Default.SimpleHandlerFactory();
                        m_lifestyleManagerFactory = new 
Lifestyle.Default.SimpleLifestyleManagerFactory();
                        m_componentModelBuilder = new 
Model.Default.DefaultComponentModelBuilder( this );
  @@ -120,6 +123,21 @@
                }
   
                /// <summary>
  +             /// Adds a subsystem.
  +             /// </summary>
  +             /// <param name="key">Name of this subsystem</param>
  +             /// <param name="system">Subsystem implementation</param>
  +             public void AddSubsystem( String key, IKernelSubsystem system )
  +             {
  +                     AssertUtil.ArgumentNotNull( key, "key" );
  +                     AssertUtil.ArgumentNotNull( system, "system" );
  +
  +                     system.Init( this );
  +
  +                     m_subsystems[ key ] = system;
  +             }
  +
  +             /// <summary>
                /// 
                /// </summary>
                public IHandler this [ String key ]
  @@ -227,6 +245,16 @@
                public IHandler GetHandlerForService( Type service )
                {
                        return (IHandler) m_services[ service ];
  +             }
  +
  +             /// <summary>
  +             /// Returns a registered subsystem;
  +             /// </summary>
  +             /// <param name="key">Key used when registered subsystem</param>
  +             /// <returns>Subsystem implementation</returns>
  +             public IKernelSubsystem GetSubsystem( String key )
  +             {
  +                     return (IKernelSubsystem) m_subsystems[ key ];
                }
   
                #endregion
  
  
  
  1.3       +7 -38     avalon-sandbox/avalon-net/Castle/MicroKernel/DefaultKernel.cs
  
  Index: DefaultKernel.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/DefaultKernel.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultKernel.cs  18 Apr 2004 03:31:31 -0000      1.2
  +++ DefaultKernel.cs  20 Apr 2004 03:37:48 -0000      1.3
  @@ -18,8 +18,9 @@
   
        using Apache.Avalon.Castle.MicroKernel.Concerns;
        using Apache.Avalon.Castle.MicroKernel.Model;
  -     using Apache.Avalon.Castle.MicroKernel.Configuration;
  -     using Apache.Avalon.Castle.MicroKernel.Logger;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Logger.Default;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Context.Default;
   
        /// <summary>
        /// Specialization of BaseKernel to adhere to Avalon 
  @@ -29,10 +30,6 @@
        {
                protected ConcernManager m_concerns = new ConcernManager();
   
  -             protected IConfigurationManager m_configManager;
  -
  -             protected ILoggerManager m_loggerManager;
  -
                /// <summary>
                /// 
                /// </summary>
  @@ -40,6 +37,10 @@
                {
                        m_handlerFactory = new Handler.Default.DefaultHandlerFactory();
                        m_lifestyleManagerFactory = new 
Lifestyle.Default.SimpleLifestyleManagerFactory();
  +
  +                     AddSubsystem( KernelConstants.CONFIGURATION, new 
DefaultConfigurationManager() );
  +                     AddSubsystem( KernelConstants.LOGGER, new LoggerManager() );
  +                     // AddSubsystem( KernelConstants.CONTEXT, new ContextManager() 
);
                }
   
                #region AvalonKernel Members
  @@ -53,38 +54,6 @@
                        get
                        {
                                return m_concerns;
  -                     }
  -             }
  -
  -             /// <summary>
  -             /// 
  -             /// </summary>
  -             public IConfigurationManager ConfigurationManager
  -             {
  -                     get
  -                     {
  -                             return m_configManager;
  -                     }
  -                     set
  -                     {
  -                             AssertUtil.ArgumentNotNull( value, "value" );
  -                             m_configManager = value;
  -                     }
  -             }
  -
  -             /// <summary>
  -             /// 
  -             /// </summary>
  -             public ILoggerManager LoggerManager
  -             {
  -                     get
  -                     {
  -                             return m_loggerManager;
  -                     }
  -                     set
  -                     {
  -                             AssertUtil.ArgumentNotNull( value, "value" );
  -                             m_loggerManager = value;
                        }
                }
   
  
  
  
  1.3       +14 -0     avalon-sandbox/avalon-net/Castle/MicroKernel/Kernel.cs
  
  Index: Kernel.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/Kernel.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Kernel.cs 3 Apr 2004 23:03:02 -0000       1.2
  +++ Kernel.cs 20 Apr 2004 03:37:48 -0000      1.3
  @@ -41,6 +41,13 @@
                void AddAspect( AspectPointCutFlags flags, IAspect aspect );
   
                /// <summary>
  +             /// Adds a subsystem.
  +             /// </summary>
  +             /// <param name="key">Name of this subsystem</param>
  +             /// <param name="system">Subsystem implementation</param>
  +             void AddSubsystem( String key, IKernelSubsystem system );
  +
  +             /// <summary>
                /// IComponentModel instance builder.
                /// </summary>
                IComponentModelBuilder ModelBuilder
  @@ -107,5 +114,12 @@
                /// <param name="service">The service interface</param>
                /// <returns>IHandler implementation</returns>
                IHandler GetHandlerForService( Type service );
  +
  +             /// <summary>
  +             /// Returns a registered subsystem;
  +             /// </summary>
  +             /// <param name="key">Key used when registered subsystem</param>
  +             /// <returns>Subsystem implementation</returns>
  +             IKernelSubsystem GetSubsystem( String key );
        }
   }
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/MicroKernel/IKernelSubsystem.cs
  
  Index: IKernelSubsystem.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel
  {
        using System;
  
        /// <summary>
        /// Summary description for IKernelSubsystem.
        /// </summary>
        public interface IKernelSubsystem
        {
                void Init(Kernel kernel);
        }
  }
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/MicroKernel/KernelConstants.cs
  
  Index: KernelConstants.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel
  {
        using System;
  
        /// <summary>
        /// Summary description for KernelConstants.
        /// </summary>
        public abstract class KernelConstants
        {
                public static readonly String CONFIGURATION = "configuration";
  
                public static readonly String LOGGER = "logger";
  
                public static readonly String CONTEXT = "context";
        }
  }
  
  
  
  1.2       +5 -0      
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
  
  Index: Apache.Avalon.Castle.MicroKernel.Test.csproj
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Apache.Avalon.Castle.MicroKernel.Test.csproj      18 Apr 2004 03:26:02 -0000     
 1.1
  +++ Apache.Avalon.Castle.MicroKernel.Test.csproj      20 Apr 2004 03:37:48 -0000     
 1.2
  @@ -144,6 +144,11 @@
                       BuildAction = "Compile"
                   />
                   <File
  +                    RelPath = "LoggerManagerTestCase.cs"
  +                    SubType = "Code"
  +                    BuildAction = "Compile"
  +                />
  +                <File
                       RelPath = "SimpleComponentFactoryTestCase.cs"
                       SubType = "Code"
                       BuildAction = "Compile"
  
  
  
  1.2       +2 -2      
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultConfigurationManagerTestCase.cs
  
  Index: DefaultConfigurationManagerTestCase.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultConfigurationManagerTestCase.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultConfigurationManagerTestCase.cs    18 Apr 2004 03:26:02 -0000      1.1
  +++ DefaultConfigurationManagerTestCase.cs    20 Apr 2004 03:37:48 -0000      1.2
  @@ -22,8 +22,8 @@
        using Apache.Avalon.Castle.MicroKernel;
        using Apache.Avalon.Castle.MicroKernel.Model;
        using Apache.Avalon.Castle.MicroKernel.Model.Default;
  -     using Apache.Avalon.Castle.MicroKernel.Configuration;
  -     using Apache.Avalon.Castle.MicroKernel.Configuration.Default;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default;
        using Apache.Avalon.Castle.MicroKernel.Test.Components;
   
        /// <summary>
  
  
  
  1.3       +50 -11    
avalon-sandbox/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModelBuilder.cs
  
  Index: DefaultComponentModelBuilder.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModelBuilder.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultComponentModelBuilder.cs   18 Apr 2004 03:31:31 -0000      1.2
  +++ DefaultComponentModelBuilder.cs   20 Apr 2004 03:37:48 -0000      1.3
  @@ -20,6 +20,10 @@
   
        using Apache.Avalon.Framework;
   
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Logger;
  +     using Apache.Avalon.Castle.MicroKernel.Subsystems.Context;
  +
        /// <summary>
        /// Summary description for DefaultComponentModelBuilder.
        /// </summary>
  @@ -49,20 +53,55 @@
                        IConstructionModel constructionModel = 
                                new DefaultConstructionModel( implementation, 
data.Constructor, data.PropertiesInfo );
   
  -                     DefaultComponentModel model = new DefaultComponentModel( 
  -                             data.Name,
  -                             service, 
  -                             data.SupportedLifestyle, 
  -                             new ConsoleLogger( service.Name, LoggerLevel.Debug ), 
  -                             new DefaultConfiguration(), 
  -                             new DefaultContext(), 
  -                             data.DependencyModel, 
  -                             constructionModel );
  -
  -                     return model;
  +                     ILogger logger = CreateLogger( data );
  +                     IContext context = CreateContext();
  +                     IConfiguration config = CreateConfiguration( data );
  +
  +                     return new DefaultComponentModel( 
  +                             data.Name, service, data.SupportedLifestyle, 
  +                             logger, config, new DefaultContext(), 
  +                             data.DependencyModel, constructionModel );
                }
   
                #endregion
  +
  +             protected virtual ILogger CreateLogger( ComponentData data )
  +             {
  +                     ILoggerManager loggerManager = (ILoggerManager) 
  +                             m_kernel.GetSubsystem( KernelConstants.LOGGER );
  +
  +                     if(loggerManager != null)
  +                     {
  +                             return loggerManager.CreateLogger( 
  +                                     data.Name, data.Implementation.Name, 
data.AvalonLogger );
  +                     }
  +                     else
  +                     {
  +                             return new ConsoleLogger( data.Name, LoggerLevel.Info 
);
  +                     }
  +             }
  +
  +             protected virtual IConfiguration CreateConfiguration( ComponentData 
data )
  +             {
  +                     IConfigurationManager configManager = (IConfigurationManager) 
  +                             m_kernel.GetSubsystem( KernelConstants.CONFIGURATION );
  +
  +                     if( configManager != null )
  +                     {
  +                             return configManager.GetConfiguration( data.Name );
  +                     }
  +                     else
  +                     {
  +                             return new DefaultConfiguration();
  +                     }
  +             }
  +
  +             protected virtual IContext CreateContext()
  +             {
  +                     // IContext context = 
  +                     //      m_kernel.ContextManager.CreateContext( 
data.AvalonContext, data.ContextEntries );
  +                     return new DefaultContext();
  +             }
   
                protected void InspectAvalonAttributes( ComponentData componentData )
                {
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/AbstractSubsystem.cs
  
  Index: AbstractSubsystem.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems
  {
        using System;
  
        /// <summary>
        /// Summary description for AbstractSubsystem.
        /// </summary>
        public abstract class AbstractSubsystem : IKernelSubsystem
        {
                private Kernel m_kernel;
  
                public AbstractSubsystem()
                {
                }
  
                #region IKernelSubsystem Members
  
                public void Init(Kernel kernel)
                {
                        AssertUtil.ArgumentNotNull( kernel, "kernel" );
  
                        m_kernel = kernel;
                }
  
                #endregion
  
                protected virtual Kernel Kernel
                {
                        get
                        {
                                return m_kernel;
                        }
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Configuration/Default/AvalonConfigurationSectionHandler.cs
  
  Index: AvalonConfigurationSectionHandler.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default
  {
        using System;
        using System.Configuration;
        using System.Xml;
  
        /// <summary>
        /// Implementation of <see 
cref="System.Configuration.IConfigurationSectionHandler"/>
        /// to allow natural mapping of a section in the configuration file associated 
with an 
        /// AppDomain to a <see cref="ContainerConfiguration"/>.
        /// </summary>
        public class AvalonConfigurationSectionHandler : IConfigurationSectionHandler
        {
                /// <summary>
                /// The static name of the section in the configuration file.
                /// </summary>
                private static readonly String SECTION_NAME = "castle.container";
  
                public AvalonConfigurationSectionHandler()
                {
                }
  
                /// <summary>
                /// Returns the default name of the section in the
                /// configuration file.
                /// </summary>
                internal static String Section
                {
                        get
                        {
                                return SECTION_NAME;
                        }
                }
  
                #region IConfigurationSectionHandler Members
  
                /// <summary>
                /// Invoke by Configuration API - Should return any object represeting 
the
                /// actual configuration
                /// </summary>
                /// <param name="parent">If hierarquical configuration is being used, 
                /// a non-null ContainerConfiguration to be overrided.
                /// </param>
                /// <param name="configContext">API specific.</param>
                /// <param name="section">The <see cref="XmlNode"/> to be 
parsed.</param>
                /// <returns>A ContainerConfiguration instance.</returns>
                public object Create(object parent, object configContext, XmlNode 
section)
                {
                        return new ContainerConfiguration(
                                (ContainerConfiguration) parent, section);
                }
  
                #endregion
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Configuration/Default/ContainerConfiguration.cs
  
  Index: ContainerConfiguration.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default
  {
        using System;
        using System.Xml;
        using System.IO;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// Keeps the container configuration.
        /// </summary>
        public class ContainerConfiguration
        {
                private IConfiguration m_configuration;
  
                /// <summary>
                /// Constructs a ContainerConfiguration with an optional parent.
                /// </summary>
                /// <param name="parent">The ContainerConfiguration parent. Can be 
null</param>
                public ContainerConfiguration(ContainerConfiguration parent)
                {
                }
  
                /// <summary>
                /// Constructs a ContainerConfiguration with an optional parent.
                /// </summary>
                /// <param name="parent">The ContainerConfiguration parent. Can be 
null</param>
                /// <param name="section">XmlNode to be parsed.</param>
                public ContainerConfiguration(ContainerConfiguration parent, XmlNode 
section) : this( parent )
                {
                        if ( section == null )
                        {
                                throw new ArgumentNullException( "section" );
                        }
  
                        Deserialize( section );
                }
  
                /// <summary>
                /// Constructs a ContainerConfiguration with the
                /// <see cref="XmlNode"/> to be parsed.
                /// </summary>
                /// <param name="parent">The ContainerConfiguration parent. Can be 
null</param>
                /// <param name="section">XmlNode to be parsed.</param>
                public ContainerConfiguration(XmlNode section) : this(null, section)
                {
                }
  
                /// <summary>
                /// Constructs a ContainerConfiguration with the filename containing
                /// the xml to be parsed.
                /// </summary>
                /// <param name="filename">The filename to be parsed.</param>
                public ContainerConfiguration(String filename) : this(null as 
ContainerConfiguration)
                {
                        ParseFromFile(filename);
                }
  
                /// <summary>
                /// Parses a configuration file. Looks for a node 
                /// 'configuration/avalon.container'
                /// </summary>
                /// <param name="filename">The xml full file name</param>
                private void ParseFromFile(String filename)
                {
                        XmlTextReader reader = new XmlTextReader(
                                new FileStream(filename, FileMode.Open, 
FileAccess.Read));
  
                        XmlDocument doc = new XmlDocument() ;
                        doc.Load(reader);
  
                        XmlNode avalonNode = 
                                doc.SelectSingleNode("configuration/" + 
AvalonConfigurationSectionHandler.Section);
  
                        Deserialize( avalonNode );
                }
  
                /// <summary>
                /// 
                /// </summary>
                /// <param name="section"></param>
                private void Deserialize( XmlNode section )
                {
                        m_configuration = DefaultConfigurationSerializer.Deserialize( 
section );
                }
  
                /// <summary>
                /// 
                /// </summary>
                public IConfiguration Configuration
                {
                        get
                        {
                                return m_configuration;
                        }
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Configuration/Default/DefaultConfigurationManager.cs
  
  Index: DefaultConfigurationManager.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default
  {
        using System;
        using System.Configuration;
  
        using Apache.Avalon.Framework;
        using Apache.Avalon.Castle.MicroKernel.Model;
        using Apache.Avalon.Castle.MicroKernel.Subsystems;
  
        /// <summary>
        /// The default implementation of IConfigurationManager uses the 
        /// .config associated with the AppDomain to extract the components
        /// configurations
        /// </summary>
        public class DefaultConfigurationManager : AbstractSubsystem, 
IConfigurationManager
        {
                protected ContainerConfiguration m_config;
  
                public DefaultConfigurationManager()
                {
                        m_config = (ContainerConfiguration) 
ConfigurationSettings.GetConfig( 
                                AvalonConfigurationSectionHandler.Section );
                }
  
                #region IConfigurationManager Members
  
                public IConfiguration GetConfiguration( String componentName )
                {
                        AssertUtil.ArgumentNotNull( componentName, "componentName" );
  
                        return m_config.Configuration.GetChild( componentName, true );
                }
  
                #endregion
        }
  }
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Configuration/IConfigurationManager.cs
  
  Index: IConfigurationManager.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration
  {
        using System;
  
        using Apache.Avalon.Framework;
        using Apache.Avalon.Castle.MicroKernel.Model;
  
        /// <summary>
        /// Summary description for IConfigurationManager.
        /// </summary>
        public interface IConfigurationManager : IKernelSubsystem
        {
                /// <summary>
                /// Implementation should return a configuration for 
                /// the component.
                /// </summary>
                /// <param name="model"></param>
                /// <returns></returns>
                IConfiguration GetConfiguration( String componentName );
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Context/Default/ContextManager.cs
  
  Index: ContextManager.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Context.Default
  {
        using System;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// Summary description for ContextManager.
        /// </summary>
        public class ContextManager : AbstractSubsystem, IContextManager
        {
                public ContextManager()
                {
                        CreateDefault
                }
  
                #region IContextManager Members
  
                public IContext CreateContext(AvalonContextAttribute contextAtt, 
AvalonEntryAttribute[] entries)
                {
                        if (contextAtt != null)
                        {
                                return CreateCustomContext(contextAtt, entries);
                        }
                        else
                        {
                                return CreateDefaultContext(entries);
                        }
                }
                
                #endregion
  
                protected IContext CreateCustomContext(AvalonContextAttribute 
contextAtt, AvalonEntryAttribute[] entries)
                {
                        return null;
                }
  
                protected IContext CreateDefaultContext(AvalonEntryAttribute[] entries)
                {
                        DefaultContext context = new DefaultContext();
  
                        foreach(AvalonEntryAttribute entry in entries)
                        {
                                
                        }
  
                        context.MakeReadOnly();
  
                        return context;
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Context/IContextManager.cs
  
  Index: IContextManager.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Context
  {
        using System;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// Summary description for IContextManager.
        /// </summary>
        public interface IContextManager : IKernelSubsystem
        {
                IContext CreateContext(AvalonContextAttribute contextAtt, 
AvalonEntryAttribute[] entries);
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Logger/Default/AvalonLoggerSectionHandler.cs
  
  Index: AvalonLoggerSectionHandler.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Logger.Default
  {
        using System;
        using System.Configuration;
  
        /// <summary>
        /// Summary description for AvalonLoggerSectionHandler.
        /// </summary>
        public class AvalonLoggerSectionHandler : IConfigurationSectionHandler
        {
                /// <summary>
                /// The static name of the section in the configuration file.
                /// </summary>
                private static readonly String SECTION_NAME = "castle.logger";
  
                public AvalonLoggerSectionHandler()
                {
                }
  
                /// <summary>
                /// Returns the default name of the section in the
                /// configuration file.
                /// </summary>
                internal static String Section
                {
                        get
                        {
                                return SECTION_NAME;
                        }
                }
  
                #region IConfigurationSectionHandler Members
  
                public object Create(object parent, object configContext, 
System.Xml.XmlNode section)
                {
                        return new LoggerConfiguration(section);
                }
  
                #endregion
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Logger/Default/LoggerConfiguration.cs
  
  Index: LoggerConfiguration.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Logger.Default
  {
        using System;
        using System.Collections;
        using System.Xml;
  
        using Apache.Avalon.Framework;
  
        internal enum LoggerType
        {
                Console,
                Null,
                Log4net,
                Diagnostics
        }
  
        /// <summary>
        /// Summary description for LoggerConfiguration.
        /// </summary>
        public class LoggerConfiguration
        {
                private static readonly String LOG_LEVEL = "level";
  
                private static readonly String DEFAULT_LOG_LEVEL = "info";
  
                private static readonly String LOG_TYPE = "type";
                
                private static readonly String DEFAULT_LOG_TYPE = "console";
  
                private static readonly String DEFAULT_NAME = "Castle.Microkernel";
  
                private LoggerLevel m_logLevel;
  
                private ILogger m_logType;
  
                /// <summary>
                /// 
                /// </summary>
                /// <param name="section"></param>
                public LoggerConfiguration(XmlNode section)
                {
                        IConfiguration config = 
                                DefaultConfigurationSerializer.Deserialize( section );
  
                        IConfiguration logLevelConfig = config.GetChild( LOG_LEVEL, 
true );
                        IConfiguration logTypeConfig = config.GetChild( LOG_TYPE, true 
);
  
                        String level = (String) logLevelConfig.GetValue( 
typeof(String), DEFAULT_LOG_LEVEL );
                        String type = (String) logTypeConfig.GetValue( typeof(String), 
DEFAULT_LOG_TYPE );
  
                        m_logLevel = ConvertToLogLevel( level );
                        m_logType = BuildLogType( type );
                }
  
                private LoggerLevel ConvertToLogLevel( String level )
                {
                        try
                        {
                                return (LoggerLevel) Enum.Parse( typeof(LoggerLevel), 
level, true );
                        }
                        catch(Exception ex)
                        {
                                throw new ConfigurationException(
                                        "Could not convert specified logger level to a 
known one", ex);
                        }
                }
  
                private ILogger BuildLogType( String type )
                {
                        LoggerType loggerType = LoggerType.Console;
  
                        try
                        {
                                loggerType = (LoggerType) Enum.Parse( 
typeof(LoggerType), type, true );
                        }
                        catch(Exception ex)
                        {
                                throw new ConfigurationException(
                                        "Could not convert specified logger type to a 
known one", ex);
                        }
  
                        switch(loggerType)
                        {
                                case LoggerType.Log4net: // Not sure if its good to 
depend on log4net
                                case LoggerType.Console:
                                        return new ConsoleLogger(DEFAULT_NAME, 
m_logLevel);
                                case LoggerType.Diagnostics:
                                        return new DiagnosticsLogger(DEFAULT_NAME);
                                //case LoggerType.Log4net:
                                        // ILog log = 
LogManager.GetLogger(DEFAULT_NAME);
                                        // m_rootLogger = new Log4netLogger(log, 
DEFAULT_NAME);
                                //      break;
                                case LoggerType.Null:
                                        return new NullLogger();
                        }
  
                        return null;
                }
  
                public ILogger RootLogger
                {
                        get
                        {
                                return m_logType;
                        }
                }
  
                public LoggerLevel LoggerLevel
                {
                        get
                        {
                                return m_logLevel;
                        }
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Logger/Default/LoggerManager.cs
  
  Index: LoggerManager.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Logger.Default
  {
        using System;
        using System.Configuration;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// This is a very simplistic implementation of ILoggerManager
        /// that creates loggers based on a root ILogger implementation.
        /// To choose a implementation for ILogger it reads from the
        /// configuration of the current AppDomain 
        /// </summary>
        public class LoggerManager : AbstractSubsystem, ILoggerManager
        {
                private LoggerConfiguration m_configuration;
  
                public LoggerManager()
                {
                        m_configuration = (LoggerConfiguration)
                                ConfigurationSettings.GetConfig( 
AvalonLoggerSectionHandler.Section );
                }
  
                #region ILoggerManager Members
  
                public ILogger CreateLogger(String loggerName, String 
implementationName, AvalonLoggerAttribute loggerAtt)
                {
                        String name = null;
  
                        if (loggerAtt != null)
                        {
                                name = loggerAtt.Name;
                        }
                        if (name == null || name.Length == 0)
                        {
                                name = loggerName;
                        }
                        if (name == null || name.Length == 0)
                        {
                                name = implementationName;
                        }
  
                        return m_configuration.RootLogger.CreateChildLogger( name );
                }
  
                #endregion
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/Subsystems/Logger/ILoggerManager.cs
  
  Index: ILoggerManager.cs
  ===================================================================
  // Copyright 2004 The Apache Software Foundation
  // 
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  // 
  //     http://www.apache.org/licenses/LICENSE-2.0
  // 
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  namespace Apache.Avalon.Castle.MicroKernel.Subsystems.Logger
  {
        using System;
  
        using Apache.Avalon.Framework;
        using Apache.Avalon.Castle.MicroKernel.Model;
  
        /// <summary>
        /// Summary description for ILoggerManager.
        /// </summary>
        public interface ILoggerManager : IKernelSubsystem
        {
                ILogger CreateLogger( String loggerName, String implementationName, 
AvalonLoggerAttribute loggerAtt );
        }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to