Uploaded image for project: 'Commons Compress'
  1. Commons Compress
  2. COMPRESS-369

Allow archiver extensions through a standard JRE ServiceLoader

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 1.13
    • Archivers
    • None

    Description

      Allow archiver extensions through a standard JRE ServiceLoader.

      Introduce a new interface org.apache.commons.compress.archivers.ArchiveStreamProvider.

      Update ArchiveStreamFactory to implement this new interface and use a service loader to pick up extra ArchiveStreamProvider.

      The service loader file is META-INF/services/org.apache.commons.compress.archivers.ArchiveStreamProvider

      The new interface:

      /*
       * Licensed to the Apache Software Foundation (ASF) under one
       * or more contributor license agreements.  See the NOTICE file
       * distributed with this work for additional information
       * regarding copyright ownership.  The ASF licenses this file
       * to you 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.commons.compress.archivers;
      
      import java.io.InputStream;
      import java.io.OutputStream;
      import java.util.Set;
      
      /**
       * Creates Archive {@link ArchiveInputStream}s and {@link ArchiveOutputStream}s.
       * 
       * @since 1.13
       */
      public interface ArchiveStreamProvider {
      
          /**
           * Creates an archive input stream from an archiver name and an input
           * stream.
           * 
           * @param archiverName
           *            the archive name, i.e. {@value #AR}, {@value #ARJ},
           *            {@value #ZIP}, {@value #TAR}, {@value #JAR}, {@value #CPIO},
           *            {@value #DUMP} or {@value #SEVEN_Z}
           * @param in
           *            the input stream
           * @param encoding,
           *            or null for the default
           * @return the archive input stream
           * @throws ArchiveException
           *             if the archiver name is not known
           * @throws StreamingNotSupportedException
           *             if the format cannot be read from a stream
           * @throws IllegalArgumentException
           *             if the archiver name or stream is null
           */
          ArchiveInputStream createArchiveInputStream(final String name, final InputStream in, final String encoding)
                  throws ArchiveException;
      
          /**
           * Creates an archive output stream from an archiver name and an output
           * stream.
           * 
           * @param archiverName
           *            the archive name, i.e. {@value #AR}, {@value #ZIP},
           *            {@value #TAR}, {@value #JAR} or {@value #CPIO}
           * @param out
           *            the output stream
           * @param encoding,
           *            or null for the default
           * @return the archive output stream
           * @throws ArchiveException
           *             if the archiver name is not known
           * @throws StreamingNotSupportedException
           *             if the format cannot be written to a stream
           * @throws IllegalArgumentException
           *             if the archiver name or stream is null
           */
          ArchiveOutputStream createArchiveOutputStream(final String name, final OutputStream out, final String encoding)
                  throws ArchiveException;
      
          /**
           * Gets all the input stream archive names for this provider
           * 
           * @return all the input archive names for this provider
           */
          Set<String> getInputStreamArchiveNames();
      
          /**
           * Gets all the output stream archive names for this provider
           * 
           * @return all the output archive names for this provider
           */
          Set<String> getOutputStreamArchiveNames();
      
      }
      

      Attachments

        Issue Links

          Activity

            People

              ggregory Gary D. Gregory
              ggregory Gary D. Gregory
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: