You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/11/11 11:38:24 UTC

cvs commit: jakarta-avalon-excalibur/meta/src/java/org/apache/excalibur/meta/model/builder XMLProfileCreator.java Resources.properties ProfileCreator.java ProfileBuilder.java package.html

mcconnell    2002/11/11 02:38:24

  Added:       meta/src/java/org/apache/excalibur/meta/model/builder
                        XMLProfileCreator.java Resources.properties
                        ProfileCreator.java ProfileBuilder.java
                        package.html
  Log:
  Profile builder resources.
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/meta/src/java/org/apache/excalibur/meta/model/builder/XMLProfileCreator.java
  
  Index: XMLProfileCreator.java
  ===================================================================
  /* ==================================================================== 
   * The Apache Software License, Version 1.1 
   * 
   * Copyright (c) 2002 The Apache Software Foundation. All rights 
   * reserved. 
   * 
   * Redistribution and use in source and binary forms, with or without 
   * modification, are permitted provided that the following conditions 
   * are met: 
   * 
   * 1. Redistributions of source code must retain the above copyright 
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *    "This product includes software developed by the
   *    Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software 
   *    itself, if and wherever such third-party acknowledgments  
   *    normally appear.
   *
   * 4. The names "Jakarta", "Avalon", and "Apache Software Foundation" 
   *    must not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation. For more
   * information on the Apache Software Foundation, please see 
   * <http://www.apache.org/>.
   */ 
  
  package org.apache.excalibur.meta.model.builder;
  
  import java.io.InputStream;
  import java.util.ArrayList;
  import java.util.Vector;
  import org.apache.avalon.excalibur.i18n.ResourceManager;
  import org.apache.avalon.excalibur.i18n.Resources;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.configuration.DefaultConfiguration;
  import org.apache.avalon.framework.parameters.Parameters;
  import org.apache.excalibur.meta.model.LoggingDirective;
  import org.apache.excalibur.meta.model.Category;
  import org.apache.excalibur.meta.model.ContextDirective;
  import org.apache.excalibur.meta.model.Entry;
  import org.apache.excalibur.meta.model.Import;
  import org.apache.excalibur.meta.model.Parameter;
  import org.apache.excalibur.meta.model.Profile;
  import org.apache.excalibur.meta.ConfigurationBuilder;
  import org.apache.excalibur.meta.info.Type;
  import org.apache.excalibur.meta.info.builder.XMLTypeCreator;
  import org.xml.sax.InputSource;
  
  /**
   * Handles internalization of an XML based description of a {@link Profile}
   * from a Configuration object. The format for Configuration object
   * is specified in the <a href="package-summary.html#external">package summary</a>.
   *
   * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
   * @version $Revision: 1.1 $ $Date: 2002/11/11 10:38:24 $
   */
  public class XMLProfileCreator
      implements ProfileCreator
  {
      private static final Resources REZ =
          ResourceManager.getPackageResources( XMLTypeCreator.class );
  
      /**
       * Create an array of packaged {@link Profile} objects for specified
       * type, loaded from specified {@link InputStream}.  If the
       * input stream is null, an implicit profile will be created.
       *
       * @param loader the classloader
       * @param type the base type
       * @param inputStream the InputStream to load Type from
       * @return the created set of profiles
       * @throws Exception if an error occurs
       */
      public Profile[] createPackagedProfiles(
          ClassLoader loader, Type type, InputStream inputStream )
          throws Exception
      {
          if( inputStream != null )
          {
              final InputSource input = new InputSource( inputStream );
              final Configuration configuration =
                  ConfigurationBuilder.build( input );
              return createPackagedProfiles( loader, type, configuration );
          }
          else
          {
              Profile profile = createImplicitProfile( type );
              return new Profile[]{profile};
          }
      }
  
      /**
       * Create an explicit {@link Profile} instance from a configuration.
       * @param type the component type
       * @param config the profile description
       * @return the profile
       * @exception Exception if an error occurs during profile creation
       */
      public Profile createProfile( Type type, Configuration config )
          throws Exception
      {
          return buildProfile( type, config, Profile.EXPLICIT );
      }
  
      /**
       * Create an array of {@link Profile} object for specified type from
       * specified configuration data associated with a single type.
       *
       * @param loader the classloader to use
       * @param type the base component type
       * @param info the configuration
       * @return the created set of profiles
       * @throws Exception if an error occurs
       */
      private Profile[] createPackagedProfiles(
          ClassLoader loader, Type type, final Configuration info )
          throws Exception
      {
          Vector vector = new Vector();
          Configuration[] profiles = info.getChildren( "component" );
          if( profiles.length == 0 )
          {
              Profile profile = createImplicitProfile( type );
              return new Profile[]{profile};
          }
          for( int i = 0; i < profiles.length; i++ )
          {
              vector.add( buildProfile(
                  type, profiles[ i ], Profile.PACKAGED ) );
          }
          return (Profile[])vector.toArray( new Profile[ 0 ] );
      }
  
      private Profile buildProfile(
          Type type, Configuration profile, int mode )
          throws Exception
      {
  
          //
          // create the logging categories for this profile
          //
  
          final String name = profile.getAttribute( "name" );
  
          LoggingDirective categories =
              createLoggingDirective(
                  name, profile.getChild( "categories" ) );
  
          //
          // build the profile directives
          //
  
          final boolean enabled =
              profile.getAttributeAsBoolean( "enabled", true );
          final boolean activation =
              getActivationMode( profile );
          final Parameters params =
              Parameters.fromConfiguration( profile.getChild( "parameters" ) );
          final ContextDirective context =
              createContextDirective( profile.getChild( "context" ) );
          final Configuration config =
              profile.getChild( "configuration" );
  
          //
          // create the profile instance
          //
  
          return new Profile(
              name, params, config, context, categories, type, enabled,
              activation, mode );
      }
  
      /**
       * Utility method to get the activation mode for the profile.
       * If the activation attribute value is equal to "startup"
       * TRUE is returned.  If the value if "lazy", FALSE is returned.
       * Otherwise the value will be resolved as a boolean.
       *
       * @param config the profile configuration
       * @return boolean TRUE if activation on startup
       */
      public boolean getActivationMode( Configuration config )
      {
          String value =
              config.getAttribute( "activation", "lazy" );
          if( value.equalsIgnoreCase( "startup" ) )
          {
              return true;
          }
          if( value.equalsIgnoreCase( "lazy" ) )
          {
              return false;
          }
          return config.getAttributeAsBoolean(
              "activation", false );
      }
  
      /**
       * Utility method to create a new context directive.
       *
       * @param config the context directive configuration
       * @return the context directive
       * @throws ConfigurationException if an error occurs
       */
      public ContextDirective createContextDirective( Configuration config )
          throws ConfigurationException
      {
          String classname = config.getAttribute(
              "class", ContextDirective.DEFAULT_CONTEXT_CLASS );
          Import[] imports = createImports( config.getChildren( "import" ) );
          Entry[] entries = createEntries( config.getChildren( "entry" ) );
          return new ContextDirective( classname, imports, entries );
      }
  
      /**
       * Utility method to create a set of import directive.
       *
       * @param configs the import directive configurations
       * @return the import directives
       * @throws ConfigurationException if an error occurs
       */
      public Import[] createImports( Configuration[] configs )
          throws ConfigurationException
      {
          ArrayList list = new ArrayList();
          for( int i = 0; i < configs.length; i++ )
          {
              list.add( createImport( configs[ i ] ) );
          }
          return (Import[])list.toArray( new Import[ 0 ] );
      }
  
      /**
       * Utility method to create a new import directive.
       *
       * @param config the import directive configuration
       * @return the import directive
       * @throws ConfigurationException if an error occurs
       */
      public Import createImport( Configuration config )
          throws ConfigurationException
      {
          final String key = config.getAttribute( "key" );
          final String path = config.getAttribute( "name", null );
          return new Import( key, path );
      }
  
      /**
       * Utility method to create a set of entry directives.
       *
       * @param configs the entry directive configurations
       * @return the entry directives
       * @throws ConfigurationException if an error occurs
       */
      public Entry[] createEntries( Configuration[] configs )
          throws ConfigurationException
      {
          ArrayList list = new ArrayList();
          for( int i = 0; i < configs.length; i++ )
          {
              Entry entry = createEntry( configs[ i ] );
              list.add( entry );
          }
          return (Entry[])list.toArray( new Entry[ 0 ] );
      }
  
      /**
       * Utility method to create a new entry directive.
       *
       * @param config the entry directive configuration
       * @return the entry directive
       * @throws ConfigurationException if an error occurs
       */
      public Entry createEntry( Configuration config )
          throws ConfigurationException
      {
          String key = config.getAttribute( "key" );
          String classname = config.getAttribute( "class", "java.lang.String" );
          String value = config.getValue( null );
          if( value != null )
          {
              return new Entry( key, classname, value );
          }
          else
          {
              Configuration[] params = config.getChildren( "parameter" );
              Parameter[] parameters = createParameters( params );
              return new Entry( key, classname, parameters );
          }
      }
  
      /**
       * Utility method to create a set of parameter directive.
       *
       * @param configs the parameter directive configurations
       * @return the parameter directives
       * @throws ConfigurationException if an error occurs
       */
      public Parameter[] createParameters( Configuration[] configs )
          throws ConfigurationException
      {
          ArrayList list = new ArrayList();
          for( int i = 0; i < configs.length; i++ )
          {
              Parameter parameter = createParameter( configs[ i ] );
              list.add( parameter );
          }
          return (Parameter[])list.toArray( new Parameter[ 0 ] );
      }
  
      /**
       * Utility method to create a new parameter directive.
       *
       * @param config the parameter directive configuration
       * @return the parameter directive
       * @throws ConfigurationException if an error occurs
       */
      public Parameter createParameter( Configuration config )
          throws ConfigurationException
      {
          String classname = config.getAttribute( "class", "java.lang.String" );
          String value = config.getValue( null );
          if( value != null )
          {
              return new Parameter( classname, value );
          }
          else
          {
              Configuration[] params = config.getChildren( "parameter" );
              Parameter[] parameters = createParameters( params );
              return new Parameter( classname, parameters );
          }
      }
  
      /**
       * Utility method to create a new categories directive.
       *
       * @param name the categories base path
       * @param config the categories directive configuration
       * @return the categories directive
       * @throws Exception if an error occurs
       */
      public LoggingDirective createLoggingDirective(
          String name, Configuration config )
          throws Exception
      {
          final String priority = config.getAttribute( "priority", null );
          final String target = config.getAttribute( "target", null );
          ArrayList list = new ArrayList();
          Configuration[] configs = config.getChildren( "category" );
          for( int i = 0; i < configs.length; i++ )
          {
              Category category = createCategory( configs[ i ] );
              list.add( category );
          }
          Category[] categories =
              (Category[])list.toArray( new Category[ 0 ] );
          return new LoggingDirective(
              name, priority, target, categories );
      }
  
      /**
       * Utility method to create a new category directive.
       *
       * @param config the category directive configuration
       * @return the category directive
       * @throws ConfigurationException if an error occurs
       */
      public Category createCategory( Configuration config )
          throws ConfigurationException
      {
          final String name = config.getAttribute( "name" );
          final String priority = config.getAttribute( "priority", null );
          final String target = config.getAttribute( "target", null );
          return new Category( name, priority, target );
      }
  
      /**
       * Utility method to create a new category directive.
       *
       * @param config the category directive configuration
       * @param def the default category name
       * @return the category directive
       * @throws ConfigurationException if an error occurs
       */
      public Category createCategory( Configuration config, String def )
          throws ConfigurationException
      {
          final String name = config.getAttribute( "name", def );
          final String priority = config.getAttribute( "priority", null );
          final String target = config.getAttribute( "target", null );
          return new Category( name, priority, target );
      }
  
      private Profile createImplicitProfile( Type type ) throws Exception
      {
          ContextDirective context =
              new ContextDirective(
                  ContextDirective.DEFAULT_CONTEXT_CLASS,
                  new Import[ 0 ], new Entry[ 0 ] );
          final Configuration defaults =
              new DefaultConfiguration( "default", null );
          final LoggingDirective categories =
              createDefaultLoggingDirective( type );
  
          return new Profile(
              null, null, defaults, context, categories, type, true, false,
              Profile.IMPLICIT
          );
      }
  
      /**
       * Utility method to create a new categories directive.
       *
       * @param type the component type
       * @return the categories directive
       */
      protected LoggingDirective createDefaultLoggingDirective( Type type )
      {
          final String name = type.getInfo().getName();
          return new LoggingDirective( name, null, null, new Category[ 0 ] );
      }
  
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/meta/src/java/org/apache/excalibur/meta/model/builder/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  builder.redundent-role.notice=Warning: Type for class {0} redundently specifies role name "{1}" in dependency when it is identical to the name of service. It is recomended that the <role/> section be elided.
  builder.creating-info.notice=Creating a Type for class "{0}".
  builder.created-info.notice=Constructed Type object for class {0}. Type contains {1} services, {2} dependencies, {3} context entrys and {4} loggers.
  builder.bad-toplevel-element.error=Error the component implemented by "{0}" has an invalid element at top level of component info descriptor. Expected: "component-info". Actual: "{1}"
  builder.missing-info.error=Unable to locate resource from which to load info for component implemented by class "{0}".
  builder.missing-xml-creator.error=Unable to create XMLTypeCreator, usually due to not having XML classes on Classpath. Thus unable to lookup XML descriptor for component type "{0}".
  
  builder.creating-profile.notice=Creating Profiles for class "{0}".
  
  target.nocreate=Error creating LogTarget named "{0}" for file {0}. (Reason: {2}).
  unknown-priority=Unknown priority "{0}" for Logger named "{1}".
  category-create=Creating a log category named "{0}" that writes to "{1}" target at priority "{2}".
  
  missing.extension=Unable to locate an extension that is required by application.\n  Extension Name: {0}\n  Specification Vendor: {1}\n  Specification Version: {2}\n  Implementation Vendor: {3}\n  Implementation Vendor-Id: {4}\n  Implementation Version: {5}\n  Implementation URL: {6}
  unsatisfied.extensions=Missing {0} extensions and thus can not build ClassLoader for application.
  bad-classpath-entry=There is a bad entry ("{0}") on classpath that made it impossible to load a manifest.
  available-extensions=Available extensions: {0}
  required-extensions=The list of required extensions for application includes: {0}
  optional-packages-added=The list of "Optional Packages" added to the application include: {0}
  classpath-entries=The list of classpath entrys for the application include: {0}
  
  
  
  
  1.1                  jakarta-avalon-excalibur/meta/src/java/org/apache/excalibur/meta/model/builder/ProfileCreator.java
  
  Index: ProfileCreator.java
  ===================================================================
  /* ==================================================================== 
   * The Apache Software License, Version 1.1 
   * 
   * Copyright (c) 2002 The Apache Software Foundation. All rights 
   * reserved. 
   * 
   * Redistribution and use in source and binary forms, with or without 
   * modification, are permitted provided that the following conditions 
   * are met: 
   * 
   * 1. Redistributions of source code must retain the above copyright 
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *    "This product includes software developed by the
   *    Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software 
   *    itself, if and wherever such third-party acknowledgments  
   *    normally appear.
   *
   * 4. The names "Jakarta", "Avalon", and "Apache Software Foundation" 
   *    must not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation. For more
   * information on the Apache Software Foundation, please see 
   * <http://www.apache.org/>.
   */ 
  
  package org.apache.excalibur.meta.model.builder;
  
  import java.io.InputStream;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.excalibur.meta.model.Profile;
  import org.apache.excalibur.meta.info.Type;
  
  /**
   * Simple interface used to create {@link Profile}
   * from stream or Configuration sorce.
   *
   * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
   * @version $Revision: 1.1 $ $Date: 2002/11/11 10:38:24 $
   */
  public interface ProfileCreator
  {
      /**
       * Create a set of packaged {@link Profile} instances from stream
       *
       * @param loader the classloader
       * @param type the base type
       * @param inputStream the stream that the resource is loaded from
       * @return the newly created {@link Profile} array
       * @exception Exception if a error occurs during profile creation
       */
      Profile[] createPackagedProfiles(
          ClassLoader loader,
          Type type,
          InputStream inputStream )
          throws Exception;
  
      /**
       * Create an explicit {@link Profile} instances from a configuration.
       * @param type the component type
       * @param config the profile description
       * @return the profile
       * @exception Exception if an error occurs during profile creation
       */
      Profile createProfile( Type type, Configuration config )
          throws Exception;
  
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/meta/src/java/org/apache/excalibur/meta/model/builder/ProfileBuilder.java
  
  Index: ProfileBuilder.java
  ===================================================================
  /* ==================================================================== 
   * The Apache Software License, Version 1.1 
   * 
   * Copyright (c) 2002 The Apache Software Foundation. All rights 
   * reserved. 
   * 
   * Redistribution and use in source and binary forms, with or without 
   * modification, are permitted provided that the following conditions 
   * are met: 
   * 
   * 1. Redistributions of source code must retain the above copyright 
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *    "This product includes software developed by the
   *    Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software 
   *    itself, if and wherever such third-party acknowledgments  
   *    normally appear.
   *
   * 4. The names "Jakarta", "Avalon", and "Apache Software Foundation" 
   *    must not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation. For more
   * information on the Apache Software Foundation, please see 
   * <http://www.apache.org/>.
   */ 
  
  package org.apache.excalibur.meta.model.builder;
  
  import java.io.InputStream;
  import org.apache.avalon.excalibur.i18n.ResourceManager;
  import org.apache.avalon.excalibur.i18n.Resources;
  import org.apache.excalibur.meta.model.Profile;
  import org.apache.excalibur.meta.info.Type;
  import org.apache.excalibur.meta.info.builder.TypeBuilder;
  
  /**
   * A ProfileBuilder is responsible for building {@link Profile}
   * objects from Configuration objects.
   *
   * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
   * @version $Revision: 1.1 $ $Date: 2002/11/11 10:38:24 $
   */
  public final class ProfileBuilder
  {
      private static final Resources REZ =
          ResourceManager.getPackageResources( TypeBuilder.class );
  
      private final ProfileCreator m_xmlProfileCreator = createXMLProfileCreator();
  
      /**
       * Build Profile from the XML descriptor format.
       *
       * @param loader the ClassLoader to load info from
       * @param type the Type on which the profile is based
       * @return the created Profile
       * @throws Exception if an error occurs
       */
      public Profile[] build( ClassLoader loader, Type type )
          throws Exception
      {
          final String xprofile =
              type.getInfo().getImplementationKey().replace( '.', '/' ) + ".xprofile";
          final InputStream inputStream =
              loader.getResourceAsStream( xprofile );
  
          final ProfileCreator creator = getXMLProfileCreator( xprofile );
          return creator.createPackagedProfiles( loader, type, inputStream );
  
      }
  
      /**
       * Utility to get xml info builder, else throw
       * an exception if missing descriptor.
       *
       * @return the ProfileCreator
       */
      private ProfileCreator getXMLProfileCreator( final String classname )
          throws Exception
      {
          if( null != m_xmlProfileCreator )
          {
              return m_xmlProfileCreator;
          }
          else
          {
              final String message =
                  REZ.getString( "builder.missing-xml-creator.error", classname );
              throw new Exception( message );
          }
      }
  
      /**
       * Utility to get XMLProfileCreator if XML files are on
       * ClassPath.
       *
       * @return the XML {@link ProfileCreator}
       */
      private static ProfileCreator createXMLProfileCreator()
      {
          ProfileCreator xmlProfileCreator = null;
          try
          {
              xmlProfileCreator = new XMLProfileCreator();
          }
          catch( final Exception e )
          {
              //Ignore it if ClassNot found due to no
              //XML Classes on classpath
          }
          return xmlProfileCreator;
      }
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/meta/src/java/org/apache/excalibur/meta/model/builder/package.html
  
  Index: package.html
  ===================================================================
  <html><body>
  <p>Merlin model information builders that handle internalization of a model supplied as a configuration instance.</P>
  </body></html>
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>