ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/extension LibFileSet.java ExtensionUtil.java ExtensionSet.java
Date Tue, 30 Apr 2002 03:45:39 GMT
donaldp     02/04/29 20:45:39

  Added:       src/main/org/apache/tools/ant/taskdefs/optional/extension
                        LibFileSet.java ExtensionUtil.java
                        ExtensionSet.java
  Log:
  Added in two datatypes;
  
  * ExtensionSet: (Contains set of extensions - oh der)
  * LibFileSet: allows you to extract a list of extensions from a fileset. It also allows
you to explicitly pick certain features to include in extension set (ie don't include implementation
attributes or url attributes unless explicitly required)
  
  Revision  Changes    Path
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibFileSet.java
  
  Index: LibFileSet.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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", 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 names without prior written
   *    permission of the Apache Group.
   *
   * 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.tools.ant.taskdefs.optional.extension;
  
  import org.apache.tools.ant.types.FileSet;
  
  /**
   * LibFileSet represents a fileset containing libraries.
   * Asociated with the libraries is data pertaining to
   * how they are to be handled when building manifests.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/04/30 03:45:39 $
   */
  public class LibFileSet
      extends FileSet
  {
      /**
       * Flag indicating whether should include the
       * "Implementation-URL" attribute in manifest.
       * Defaults to false.
       */
      private boolean m_includeURL;
  
      /**
       * Flag indicating whether should include the
       * "Implementation-*" attributes in manifest.
       * Defaults to false.
       */
      private boolean m_includeImpl;
  
      /**
       * String that is the base URL for the librarys
       * when constructing the "Implementation-URL"
       * attribute. For instance setting the base to
       * "http://jakarta.apache.org/avalon/libs/" and then
       * including the library "excalibur-cli-1.0.jar" in the
       * fileset will result in the "Implementation-URL" attribute
       * being set to "http://jakarta.apache.org/avalon/libs/excalibur-cli-1.0.jar"
       *
       * Note this is only used if the library does not define
       * "Implementation-URL" itself.
       *
       * Note that this also implies includeURL=true
       */
      private String m_urlBase;
  
      /**
       * Flag indicating whether should include the
       * "Implementation-URL" attribute in manifest.
       * Defaults to false.
       *
       * @param includeURL the flag
       * @see #m_includeURL
       */
      public void setIncludeUrl( boolean includeURL )
      {
          m_includeURL = includeURL;
      }
  
      /**
       * Flag indicating whether should include the
       * "Implementation-*" attributes in manifest.
       * Defaults to false.
       *
       * @param includeImpl the flag
       * @see #m_includeImpl
       */
      public void setIncludeImpl( boolean includeImpl )
      {
          m_includeImpl = includeImpl;
      }
  
      /**
       * Set the url base for fileset.
       *
       * @param urlBase the base url
       * @see #m_urlBase
       */
      public void setUrlBase( String urlBase )
      {
          m_urlBase = urlBase;
      }
  
      /**
       * Get the includeURL flag.
       *
       * @return the includeURL flag.
       */
      boolean isIncludeURL()
      {
          return m_includeURL;
      }
  
      /**
       * Get the includeImpl flag.
       *
       * @return the includeImpl flag.
       */
      boolean isIncludeImpl()
      {
          return m_includeImpl;
      }
  
      /**
       * Get the urlbase.
       *
       * @return the urlbase.
       */
      String getUrlBase()
      {
          return m_urlBase;
      }
  }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionUtil.java
  
  Index: ExtensionUtil.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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", 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 names without prior written
   *    permission of the Apache Group.
   *
   * 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.tools.ant.taskdefs.optional.extension;
  
  import java.io.File;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.jar.JarFile;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.DirectoryScanner;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.types.FileSet;
  
  /**
   * A set of useful methods relating to extensions.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/04/30 03:45:39 $
   */
  public class ExtensionUtil
  {
      /**
       * Convert a list of extensionAdapter objects to extensions.
       *
       * @param adapters the list of ExtensionAdapterss to add to convert
       * @throws BuildException if an error occurs
       */
      static ArrayList toExtensions( final ArrayList adapters )
          throws BuildException
      {
          final ArrayList results = new ArrayList();
  
          final int size = adapters.size();
          for( int i = 0; i < size; i++ )
          {
              final ExtensionAdapter adapter =
                  (ExtensionAdapter)adapters.get( i );
              final Extension extension = adapter.toExtension();
              results.add( extension );
          }
  
          return results;
      }
  
      /**
       * Generate a list of extensions from a specified fileset.
       *
       * @param librarys the list to add extensions to
       * @param fileset the filesets containing librarys
       * @throws BuildException if an error occurs
       */
      static void extractExtensions( final Project project,
                                     final ArrayList librarys,
                                     final ArrayList fileset )
          throws BuildException
      {
          if( !fileset.isEmpty() )
          {
              final Extension[] extensions = getExtensions( project,
                                                            fileset );
              for( int i = 0; i < extensions.length; i++ )
              {
                  librarys.add( extensions[ i ] );
              }
          }
      }
  
      /**
       * Retrieve extensions from the specified librarys.
       *
       * @param librarys the filesets for librarys
       * @return the extensions contained in librarys
       * @throws BuildException if failing to scan librarys
       */
      private static Extension[] getExtensions( final Project project,
                                                final ArrayList librarys )
          throws BuildException
      {
          final ArrayList extensions = new ArrayList();
          final Iterator iterator = librarys.iterator();
          while( iterator.hasNext() )
          {
              final FileSet fileSet = (FileSet)iterator.next();
  
              boolean includeImpl = true;
              boolean includeURL = true;
  
              if( fileSet instanceof LibFileSet )
              {
                  LibFileSet libFileSet = (LibFileSet)fileSet;
                  includeImpl = libFileSet.isIncludeImpl();
                  includeURL = libFileSet.isIncludeURL();
              }
  
              final DirectoryScanner scanner = fileSet.getDirectoryScanner( project );
              final File basedir = scanner.getBasedir();
              final String[] files = scanner.getIncludedFiles();
              for( int i = 0; i < files.length; i++ )
              {
                  final File file = new File( basedir, files[ i ] );
                  loadExtensions( file, extensions, includeImpl, includeURL );
              }
          }
          return (Extension[])extensions.toArray( new Extension[ extensions.size() ] );
      }
  
      /**
       * Load list of available extensions from specified file.
       *
       * @param file the file
       * @param extensionList the list to add available extensions to
       * @throws BuildException if there is an error
       */
      private static void loadExtensions( final File file,
                                          final ArrayList extensionList,
                                          final boolean includeImpl,
                                          final boolean includeURL )
          throws BuildException
      {
          try
          {
              final JarFile jarFile = new JarFile( file );
              final Extension[] extensions =
                  Extension.getAvailable( jarFile.getManifest() );
              for( int i = 0; i < extensions.length; i++ )
              {
                  final Extension extension = extensions[ i ];
                  addExtension( extensionList, extension, includeImpl, includeURL );
              }
          }
          catch( final Exception e )
          {
              throw new BuildException( e.getMessage(), e );
          }
      }
  
      /**
       * Add extension to list.
       * If extension should not have implementation details but
       * does strip them. If extension should not have url but does
       * then strip it.
       *
       * @param extensionList the list of extensions to add to
       * @param originalExtension the extension
       * @param includeImpl false to exclude implementation details
       * @param includeURL false to exclude implementation URL
       */
      private static void addExtension( final ArrayList extensionList,
                                        final Extension originalExtension,
                                        final boolean includeImpl,
                                        final boolean includeURL )
      {
          Extension extension = originalExtension;
          if( !includeURL &&
              null != extension.getImplementationURL() )
          {
              extension =
                  new Extension( extension.getExtensionName(),
                                 extension.getSpecificationVersion().toString(),
                                 extension.getSpecificationVendor(),
                                 extension.getImplementationVersion().toString(),
                                 extension.getImplementationVendor(),
                                 extension.getImplementationVendorID(),
                                 null );
          }
  
          final boolean hasImplAttributes =
              null != extension.getImplementationURL() ||
              null != extension.getImplementationVersion() ||
              null != extension.getImplementationVendorID() ||
              null != extension.getImplementationVendor();
  
          if( !includeImpl && hasImplAttributes )
          {
              extension =
                  new Extension( extension.getExtensionName(),
                                 extension.getSpecificationVersion().toString(),
                                 extension.getSpecificationVendor(),
                                 null,
                                 null,
                                 null,
                                 extension.getImplementationURL() );
          }
  
          extensionList.add( extension );
      }
  }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java
  
  Index: ExtensionSet.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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", 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 names without prior written
   *    permission of the Apache Group.
   *
   * 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.tools.ant.taskdefs.optional.extension;
  
  import java.util.ArrayList;
  import java.util.Arrays;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.types.DataType;
  import org.apache.tools.ant.types.Reference;
  import org.apache.tools.ant.types.FileSet;
  
  /**
   * The Extension set lists a set of "Optional Packages" /
   * "Extensions".
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/04/30 03:45:39 $
   * @ant.data-type name="extension-set"
   */
  public class ExtensionSet
      extends DataType
  {
      /**
       * ExtensionAdapter objects representing extensions.
       */
      private final ArrayList m_extensions = new ArrayList();
  
      /**
       * Filesets specifying all the extensions wanted.
       */
      private final ArrayList m_extensionsFilesets = new ArrayList();
  
      /**
       * Adds an extension that this library requires.
       *
       * @param extensionAdapter an extension that this library requires.
       */
      public void addExtension( final ExtensionAdapter extensionAdapter )
      {
          m_extensions.add( extensionAdapter );
      }
  
      /**
       * Adds a set of files about which extensions data will be extracted.
       *
       * @param fileSet a set of files about which extensions data will be extracted.
       */
      public void addLibfileset( final LibFileSet fileSet )
      {
          m_extensionsFilesets.add( fileSet );
      }
  
      /**
       * Adds a set of files about which extensions data will be extracted.
       *
       * @param fileSet a set of files about which extensions data will be extracted.
       */
      public void addFileset( final FileSet fileSet )
      {
          m_extensionsFilesets.add( fileSet );
      }
  
      /**
       * Extract a set of Extension objects from the ExtensionSet.
       *
       * @throws BuildException if an error occurs
       */
      public Extension[] toExtensions( final Project project )
          throws BuildException
      {
          final ArrayList extensions = ExtensionUtil.toExtensions( m_extensions );
          ExtensionUtil.extractExtensions( project, extensions, m_extensionsFilesets );
          return (Extension[])extensions.toArray( new Extension[ extensions.size() ] );
      }
  
      /**
       * Makes this instance in effect a reference to another ExtensionSet
       * instance.
       *
       * <p>You must not set another attribute or nest elements inside
       * this element if you make it a reference.</p>
       *
       * @param reference the reference to which this instance is associated
       * @exception BuildException if this instance already has been configured.
       */
      public void setRefid( final Reference reference )
          throws BuildException
      {
          if( !m_extensions.isEmpty() ||
              !m_extensionsFilesets.isEmpty() )
          {
              throw tooManyAttributes();
          }
          // change this to get the objects from the other reference
          final Object object =
              reference.getReferencedObject( getProject() );
          if( object instanceof ExtensionSet )
          {
              final ExtensionSet other = (ExtensionSet)object;
              m_extensions.addAll( other.m_extensions );
              m_extensionsFilesets.addAll( other.m_extensionsFilesets );
          }
          else
          {
              final String message =
                  reference.getRefId() + " doesn\'t refer to a ExtensionSet";
              throw new BuildException( message );
          }
  
          super.setRefid( reference );
      }
  
      public String toString()
      {
          return "ExtensionSet" + Arrays.asList( toExtensions( getProject() ) );
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message