# Class AbstractArchiveResourceSet

java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.webresources.AbstractResourceSet
org.apache.catalina.webresources.AbstractArchiveResourceSet

All Implemented Interfaces:
  `Lifecycle, WebResourceSet`

Direct Known Subclasses:
  `AbstractSingleArchiveResourceSet, JarWarResourceSet`

public abstract class AbstractArchiveResourceSet extends AbstractResourceSet

## Nested Class Summary

### Nested classes/interfaces inherited from interface Lifecycle

`Lifecycle.SingleUse`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected JarFile`
`archive`
`protected Map<String,JarEntry>`
`archiveEntries`
`protected final Object`
`archiveLock`
`protected long`
`archiveUseCount`
`protected JarContents`
`jarContents`
`protected boolean`
`retainBloomFilterForArchives`

### Fields inherited from class AbstractResourceSet

`sm`

### Fields inherited from interface Lifecycle

`AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

## Constructor Summary

Constructors
Constructor
Description
`AbstractArchiveResourceSet()`

## Method Summary

Modifier and Type
Method
Description
`protected void`
`closeJarFile()`
`protected abstract WebResource`
`createArchiveResource(JarEntry jarEntry, String webAppPath, Manifest manifest)`
`void`
`gc()`
Implementations may cache some information to improve performance.
`boolean`
`getAllowLinking()`
Determine if this `ResourceSet` allows the use of symbolic links.
`protected abstract Map<String,JarEntry>`
`getArchiveEntries(boolean single)`
Obtain the map of entries in the archive.
`protected abstract JarEntry`
`getArchiveEntry(String pathInArchive)`
Obtain a single entry from the archive.
`final URL`
`getBaseUrl()`
Obtain the base URL for this set of resources.
`protected final String`
`getBaseUrlString()`
`final WebResource`
`getResource(String path)`
Obtain the object that represents the resource at the given path.
`protected abstract boolean`
`isMultiRelease()`
`final boolean`
`isReadOnly()`
Obtains the current value of the read-only setting for this set of resources.
`final String[]`
`list(String path)`
Obtain the list of the names of all of the files and directories located in the specified directory.
`final Set<String>`
`listWebAppPaths(String path)`
Obtain the Set of the web applications pathnames of all of the files and directories located in the specified directory.
`final boolean`
`mkdir(String path)`
Create a new directory at the given path.
`protected JarFile`
`openJarFile()`
`void`
`setAllowLinking(boolean allowLinking)`
Configure if this `ResourceSet` allows the use of symbolic links.
`protected final void`
`setBaseUrl(URL baseUrl)`
`void`
`setReadOnly(boolean readOnly)`
Configures whether or not this set of resources is read-only.
`final boolean`
`write(String path, InputStream is, boolean overwrite)`
Create a new resource at the requested path using the provided InputStream.

### Methods inherited from class AbstractResourceSet

`checkPath, destroyInternal, getBase, getClassLoaderOnly, getInternalPath, getManifest, getRoot, getStaticOnly, getWebAppMount, isPathMounted, setBase, setClassLoaderOnly, setInternalPath, setManifest, setRoot, setStaticOnly, setWebAppMount, startInternal, stopInternal`

### Methods inherited from class LifecycleBase

`addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, initInternal, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop`

### Methods inherited from class Object

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

### Methods inherited from interface Lifecycle

`addLifecycleListener, destroy, findLifecycleListeners, getState, getStateName, init, removeLifecycleListener, start, stop`

## Field Details

### archive

protected JarFile archive

### archiveEntries

protected Map<String,JarEntry> archiveEntries

### archiveLock

protected final Object archiveLock

### archiveUseCount

protected long archiveUseCount

### jarContents

protected JarContents jarContents

### retainBloomFilterForArchives

protected boolean retainBloomFilterForArchives

## Constructor Details

### AbstractArchiveResourceSet

public AbstractArchiveResourceSet()

## Method Details

### setBaseUrl

protected final void setBaseUrl(URL baseUrl)

### getBaseUrl

public final URL getBaseUrl()
Description copied from interface: `WebResourceSet`
Obtain the base URL for this set of resources. One of the uses of this is to grant read permissions to the resources when running under a security manager.

Returns:
  The base URL for this set of resources

### getBaseUrlString

protected final String getBaseUrlString()

### list

public final String[] list(String path)
Description copied from interface: `WebResourceSet`
Obtain the list of the names of all of the files and directories located in the specified directory.

Parameters:
  `path` - The path for the resource of interest relative to the root of the web application. It must start with '/'.
Returns:
  The list of resources. If path does not refer to a directory then a zero length array will be returned.

### listWebAppPaths

public final Set<String> listWebAppPaths(String path)
Description copied from interface: `WebResourceSet`
Obtain the Set of the web applications pathnames of all of the files and directories located in the specified directory. Paths representing directories will end with a "/" character.

Parameters:
  `path` - The path for the resource of interest relative to the root of the web application. It must start with '/'.
Returns:
  The Set of resources. If path does not refer to a directory then an empty set will be returned.

### getArchiveEntries

protected abstract Map<String,JarEntry> getArchiveEntries(boolean single)
Obtain the map of entries in the archive. May return null in which case `getArchiveEntry(String)` should be used.

Parameters:
  `single` - Is this request being make to support a single lookup? If false, a map will always be returned. If true, implementations may use this as a hint in determining the optimum way to respond.
Returns:
  The archives entries mapped to their names or null if `getArchiveEntry(String)` should be used.

### getArchiveEntry

protected abstract JarEntry getArchiveEntry(String pathInArchive)
Obtain a single entry from the archive. For performance reasons, `getArchiveEntries(boolean)` should always be called first and the archive entry looked up in the map if one is returned. Only if that call returns null should this method be used.

Parameters:
  `pathInArchive` - The path in the archive of the entry required
Returns:
  The specified archive entry or null if it does not exist

### mkdir

public final boolean mkdir(String path)
Description copied from interface: `WebResourceSet`
Create a new directory at the given path.

Parameters:
  `path` - The path for the new resource to create relative to the root of the web application. It must start with '/'.
Returns:
  `true` if the directory was created, otherwise `false`

### write

public final boolean write(String path, InputStream is, boolean overwrite)
Description copied from interface: `WebResourceSet`
Create a new resource at the requested path using the provided InputStream.

Parameters:
  `path` - The path to be used for the new Resource. It is relative to the root of the web application and must start with '/'.
  `is` - The InputStream that will provide the content for the new Resource.
  `overwrite` - If `true` and the resource already exists it will be overwritten. If `false` and the resource already exists the write will fail.
Returns:
  `true` if and only if the new Resource is written

### getResource

public final WebResource getResource(String path)
Description copied from interface: `WebResourceSet`
Obtain the object that represents the resource at the given path. Note the resource at that path may not exist.

Parameters:
  `path` - The path for the resource of interest relative to the root of the web application. It must start with '/'.
Returns:
  The object that represents the resource at the given path

### isMultiRelease

protected abstract boolean isMultiRelease()

### createArchiveResource

protected abstract WebResource createArchiveResource(JarEntry jarEntry, String webAppPath, Manifest manifest)

### isReadOnly

public final boolean isReadOnly()
Description copied from interface: `WebResourceSet`
Obtains the current value of the read-only setting for this set of resources.

Returns:
  `true` if this set of resources is configured to be read-only, otherwise `false`

### setReadOnly

public void setReadOnly(boolean readOnly)
Description copied from interface: `WebResourceSet`
Configures whether or not this set of resources is read-only.

Parameters:
  `readOnly` - `true` if this set of resources should be configured to be read-only

### setAllowLinking

public void setAllowLinking(boolean allowLinking)
Configure if this `ResourceSet` allows the use of symbolic links.

Calls to this method will be ignored as archives do not allow linking.

Parameters:
  `allowLinking` - `true` if symbolic links are allowed.

### getAllowLinking

public boolean getAllowLinking()
Determine if this `ResourceSet` allows the use of symbolic links. If `WebResourceSet.setAllowLinking(boolean)` has not been called for this instance, the value of `WebResourceRoot.getAllowLinking()` is returned.

Calls to this method always return `false` as archives do not allow linking.

Returns:
  `true` if symbolic links are allowed

### openJarFile

protected JarFile openJarFile() throws IOException

Throws:
  `IOException`

### closeJarFile

protected void closeJarFile()

### gc

public void gc()
Description copied from interface: `WebResourceSet`
Implementations may cache some information to improve performance. This method triggers the clean-up of those resources.