You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cz...@apache.org on 2004/04/03 20:10:35 UTC

cvs commit: avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role ECMRoleManager.java

cziegeler    2004/04/03 10:10:35

  Modified:    fortress/container-impl/src/java/org/apache/avalon/fortress/util
                        ContextManager.java FortressConfig.java
                        ContextManagerConstants.java
  Added:       fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role
                        ECMRoleManager.java
  Log:
  ECMRoleManager for better compatibility with ECM
  Make RoleManager class configurable
  
  Revision  Changes    Path
  1.53      +26 -5     avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/util/ContextManager.java
  
  Index: ContextManager.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/util/ContextManager.java,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- ContextManager.java	28 Mar 2004 18:56:42 -0000	1.52
  +++ ContextManager.java	3 Apr 2004 18:10:34 -0000	1.53
  @@ -57,6 +57,7 @@
   import org.apache.excalibur.source.impl.SourceResolverImpl;
   import org.apache.excalibur.source.impl.URLSourceFactory;
   
  +import java.lang.reflect.Constructor;
   import java.util.ArrayList;
   import java.util.Collections;
   import java.util.Comparator;
  @@ -593,11 +594,31 @@
           frm.enableLogging( rmLogger.getChildLogger( "defaults" ) );
           frm.initialize();
   
  -        // Create a role manager with the configured roles
  -        final ConfigurableRoleManager rm = new ConfigurableRoleManager( frm );
  -        rm.enableLogging( rmLogger );
  -        rm.configure( roleConfig );
  +        RoleManager rm;
  +        if ( entryPresent( m_rootContext, ROLE_MANAGER_CLASS ) )
  +        {
  +            Class clazz = (Class)m_rootContext.get( ROLE_MANAGER_CLASS );
  +            // Test if the class implements a constructor to pass into the parent
  +            try 
  +            {
  +                Constructor parentAwareConstructor = clazz.getConstructor(new Class[] {RoleManager.class});
  +                rm = (RoleManager)parentAwareConstructor.newInstance(new Object[] {frm});
  +            }
  +            catch (NoSuchMethodException ignore )
  +            {
  +                rm = (RoleManager)clazz.newInstance();
  +            }
  +        } 
  +        else
  +        {
  +            // Create a role manager with the configured roles
  +            rm = new ConfigurableRoleManager( frm );
  +        } 
   
  +        ContainerUtil.enableLogging(rm, rmLogger );
  +        ContainerUtil.configure( rm, roleConfig );
  +        ContainerUtil.initialize( rm );
  +        
           assumeOwnership( rm );
           return rm;
       }
  
  
  
  1.23      +22 -1     avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/util/FortressConfig.java
  
  Index: FortressConfig.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/util/FortressConfig.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- FortressConfig.java	28 Feb 2004 15:16:26 -0000	1.22
  +++ FortressConfig.java	3 Apr 2004 18:10:35 -0000	1.23
  @@ -287,6 +287,27 @@
           m_context.put( ContextManagerConstants.ROLE_MANAGER_CONFIGURATION_URI, null );
       }
   
  +    public void setRoleManagerClass( final String containerClass )
  +    throws ClassNotFoundException
  +    {
  +        ClassLoader classLoader;
  +        try
  +        {
  +            classLoader = (ClassLoader) m_context.get( ClassLoader.class.getName() );
  +        }
  +        catch ( ContextException ce )
  +        {
  +            classLoader = Thread.currentThread().getContextClassLoader();
  +        }
  +
  +        setRoleManagerClass( classLoader.loadClass( containerClass ) );
  +    }   
  +
  +    public void setRoleManagerClass( final Class clazz )
  +    {
  +        m_context.put( ContextManagerConstants.ROLE_MANAGER_CLASS, clazz );
  +    }
  +    
       public void setRoleManagerConfiguration( final String location )
       {
           m_context.put( ContextManagerConstants.ROLE_MANAGER_CONFIGURATION_URI, location );
  
  
  
  1.10      +3 -2      avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/util/ContextManagerConstants.java
  
  Index: ContextManagerConstants.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/util/ContextManagerConstants.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ContextManagerConstants.java	28 Feb 2004 15:16:26 -0000	1.9
  +++ ContextManagerConstants.java	3 Apr 2004 18:10:35 -0000	1.10
  @@ -37,6 +37,7 @@
   
       String ROLE_MANAGER_CONFIGURATION = "impl.roleManager.config";
       String ROLE_MANAGER_CONFIGURATION_URI = "impl.roleManager.config.uri";
  -
  +    String ROLE_MANAGER_CLASS = "impl.roleManager.class";
  +    
       String CONFIGURATION_URI = "impl.configuration.uri";
   }
  
  
  
  1.1                  avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role/ECMRoleManager.java
  
  Index: ECMRoleManager.java
  ===================================================================
  /* 
   * Copyright 2003-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.
   */
  
  package org.apache.avalon.fortress.impl.role;
  
  import org.apache.avalon.fortress.RoleManager;
  import org.apache.avalon.fortress.impl.role.AbstractRoleManager;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  
  /**
   * This role manager implementation is able to read ECM based role files. 
   *
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version CVS $Revision: 1.1 $ $Date: 2004/04/03 18:10:35 $
   */
  public class ECMRoleManager
          extends AbstractRoleManager
          implements Configurable
  {
      
      /**
       * Default constructor--this RoleManager has no parent.
       */
      public ECMRoleManager() 
      {
          super( null, null );
      }
  
      /**
       * Alternate constructor--this RoleManager has the specified
       * classloader.
       *
       * @param loader  The <code>ClassLoader</code> used to resolve class names.
       */
      public ECMRoleManager( final ClassLoader loader ) 
      {
          super( null, loader );
      }
  
      /**
       * Alternate constructor--this RoleManager has the specified
       * parent.
       *
       * @param parent  The parent <code>RoleManager</code>.
       */
      public ECMRoleManager( final RoleManager parent ) 
      {
          super( parent, null );
      }
  
      /**
       * Alternate constructor--this RoleManager has the specified
       * parent and a classloader.
       *
       * @param parent The parent <code>RoleManager</code>.
       * @param loader the classloader
       */
      public ECMRoleManager( final RoleManager parent, 
                              final ClassLoader loader ) 
      {
          super( parent, loader );
      }
  
      /**
       * Reads a configuration object and creates the role, shorthand,
       * and class name mapping.
       *
       * @param configuration  The configuration object.
       * @throws ConfigurationException if the configuration is malformed
       */
      public final void configure( final Configuration configuration )
      throws ConfigurationException 
      {
          final Configuration[] roles = configuration.getChildren( "role" );
  
          for ( int i = 0; i < roles.length; i++ ) 
          {
              final String role = roles[i].getAttribute( "name" );
              final String shorthand = roles[i].getAttribute( "shorthand" );
              final String className = roles[i].getAttribute( "default-class", null );
              
              if ( ! addRole( shorthand, role, className, null ) ) 
              {
                  
                  final String message = "Configuration error on invalid entry:\n\tRole: " + role +
                          "\n\tShorthand: " + shorthand +
                          "\n\tDefault Class: " + className;
  
                  getLogger().warn(message);
              }
          }
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org