Package de.gebit.integrity.runner.providers

## Class ArchiveTestResourceProvider

- java.lang.Object
- - de.gebit.integrity.runner.providers.AbstractTestResourceProvider
  - - de.gebit.integrity.runner.providers.ArchiveTestResourceProvider

- All Implemented Interfaces:
    `TestResourceProvider`

      public class ArchiveTestResourceProvider
      extends AbstractTestResourceProvider

  This `TestResourceProvider` can read archive files (zip/jar format) and provide the Integrity script files within these archives transparently to the Test Runner. It can even read archives within archives, up to an arbitrary depth.
  Author:
    Rene Schneider - initial API and implementation

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `ArchiveTestResourceProvider.ArchivedTestResource` | Test resource located within one or multiple archives.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static String` | `ARCHIVE_ENDING_JAR` | The ending of jar archives.
    `static String` | `ARCHIVE_ENDING_ZIP` | The ending of zip archives.

    - ### Fields inherited from class de.gebit.integrity.runner.providers.AbstractTestResourceProvider

      `INTEGRITY_TEST_FILES_SUFFIX, resourceFiles`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ArchiveTestResourceProvider()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addArchive​(File anArchiveFile, boolean aRecursiveFlag)` | Adds an archive (all contained .integrity files) to the resource provider.
    `protected void` | `addArchive​(ZipInputStream anArchiveInputStream, String aPrefix, boolean aRecursiveFlag, Stack<String> anArchiveFileNameStack)` | Recursive-enabled variant of `addArchive(File, boolean)`.
    `void` | `closeResource​(TestResource aResourceName, InputStream aResourceStream)` | Closes a specified resources' stream (and all the stuff opened for this stream in the background).
    `protected boolean` | `findFileInZipInputStream​(ZipInputStream aStream, String aFileName)` | Searches the given `ZipInputStream` for an entry, then stops.
    `InputStream` | `openResource​(TestResource aResourceName)` | Opens a specific named resource.

    - ### Methods inherited from class de.gebit.integrity.runner.providers.AbstractTestResourceProvider

      `addResource, createAndAddResource, createResource, getClassLoader, getResourceNames, setClassLoader`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### ARCHIVE_ENDING_ZIP

          public static final String ARCHIVE_ENDING_ZIP

      The ending of zip archives.
      See Also:
        Constant Field Values

    - #### ARCHIVE_ENDING_JAR

          public static final String ARCHIVE_ENDING_JAR

      The ending of jar archives.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ArchiveTestResourceProvider

          public ArchiveTestResourceProvider()

  - ### Method Detail

    - #### addArchive

          public void addArchive​(File anArchiveFile,
                                 boolean aRecursiveFlag)
                          throws IOException

      Adds an archive (all contained .integrity files) to the resource provider.
      Parameters:
        `anArchiveFile` - the archive file to add
        `aRecursiveFlag` - whether other archives inside this archive shall be added recursively
      Throws:
        `IOException`

    - #### addArchive

          protected void addArchive​(ZipInputStream anArchiveInputStream,
                                    String aPrefix,
                                    boolean aRecursiveFlag,
                                    Stack<String> anArchiveFileNameStack)
                             throws IOException

      Recursive-enabled variant of `addArchive(File, boolean)`.
      Parameters:
        `anArchiveInputStream` - the archive input stream to read from
        `aPrefix` - the prefix to prepend in front of the filename inside the archive
        `aRecursiveFlag` - a flag whether recursive invocation is desired
      Throws:
        `IOException`

    - #### openResource

          public InputStream openResource​(TestResource aResourceName)
                                   throws IOException

      Description copied from interface: `TestResourceProvider`
      Opens a specific named resource. This should return an `InputStream` at the start of the data of the respective resources, and it is only expected to work if the resource is one of those enumerated by a call to `TestResourceProvider.getResourceNames()`.
      Parameters:
        `aResourceName` - the resource to be opened
      Returns:
        an `InputStream` to read the resource
      Throws:
        `IOException`

    - #### closeResource

          public void closeResource​(TestResource aResourceName,
                                    InputStream aResourceStream)
                             throws IOException

      Description copied from interface: `TestResourceProvider`
      Closes a specified resources' stream (and all the stuff opened for this stream in the background).
      Parameters:
        `aResourceName` - the resource to be closed
        `aResourceStream` - the resource stream to close
      Throws:
        `IOException`

    - #### findFileInZipInputStream

          protected boolean findFileInZipInputStream​(ZipInputStream aStream,
                                                     String aFileName)
                                              throws IOException

      Searches the given `ZipInputStream` for an entry, then stops. This changes the active entry in the stream to the entry to find (if found) or no entry (if not found).
      Parameters:
        `aStream` - the stream to search in
        `aFileName` - the entry name
      Returns:
        true if the entry was found, false if not
      Throws:
        `IOException`