| /* |
| * 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.tomcat; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.net.URL; |
| import java.util.jar.Manifest; |
| |
| /** |
| * Provides an abstraction for use by the various classes that need to scan |
| * JARs. The classes provided by the JRE for accessing JARs |
| * ({@link java.util.jar.JarFile} and {@link java.util.jar.JarInputStream}) have |
| * significantly different performance characteristics depending on the form of |
| * the URL used to access the JAR. For file based JAR {@link java.net.URL}s, |
| * {@link java.util.jar.JarFile} is faster but for non-file based |
| * {@link java.net.URL}s, {@link java.util.jar.JarFile} creates a copy of the |
| * JAR in the temporary directory so {@link java.util.jar.JarInputStream} is |
| * faster. |
| */ |
| public interface Jar extends AutoCloseable { |
| |
| /** |
| * @return The URL for accessing the JAR file. |
| */ |
| URL getJarFileURL(); |
| |
| /** |
| * Determines if a specific entry exists within the JAR. |
| * |
| * @param name Entry to look for |
| * @return <code>true</code> if the specified entry exists else |
| * <code>false</code> |
| * |
| * @throws IOException if an I/O error occurs while processing the JAR file |
| * entries |
| */ |
| boolean entryExists(String name) throws IOException; |
| |
| |
| /** |
| * Obtain an {@link InputStream} for a given entry in a JAR. The caller is |
| * responsible for closing the stream. |
| * |
| * @param name Entry to obtain an {@link InputStream} for |
| * @return An {@link InputStream} for the specified entry or null if |
| * the entry does not exist |
| * |
| * @throws IOException if an I/O error occurs while processing the JAR file |
| */ |
| InputStream getInputStream(String name) throws IOException; |
| |
| /** |
| * Obtain the last modified time for the given resource in the JAR. |
| * |
| * @param name Entry to obtain the modification time for |
| * |
| * @return The time (in the same format as |
| * {@link System#currentTimeMillis()} that the resource was last |
| * modified. Returns -1 if the entry does not exist |
| * |
| * @throws IOException if an I/O error occurs while processing the JAR file |
| */ |
| long getLastModified(String name) throws IOException; |
| |
| /** |
| * Close any resources associated with this JAR. |
| */ |
| @Override |
| void close(); |
| |
| /** |
| * Moves the internal pointer to the next entry in the JAR. |
| */ |
| void nextEntry(); |
| |
| /** |
| * Obtains the name of the current entry. |
| * |
| * @return The entry name |
| */ |
| String getEntryName(); |
| |
| /** |
| * Obtains the input stream for the current entry. |
| * |
| * @return The input stream |
| * @throws IOException If the stream cannot be obtained |
| */ |
| InputStream getEntryInputStream() throws IOException; |
| |
| /** |
| * Obtain, in String form, the URL for an entry in this JAR. Note that for |
| * JARs nested in WAR files, the Tomcat specific war:file:... form will not |
| * be used, rather the jar:jar:file:... form (that the JRE does not |
| * understand will be used). Note that this means that any code using these |
| * URLs will need to understand the jar:jar:file:... form and use the |
| * {@link org.apache.tomcat.util.scan.JarFactory} to ensure resources are |
| * accessed correctly. |
| * |
| * @param entry The entry to generate the URL for |
| * |
| * @return a URL for the specified entry in the JAR |
| */ |
| String getURL(String entry); |
| |
| /** |
| * Obtain the manifest for the JAR file. |
| * |
| * @return The manifest for this JAR file. |
| * |
| * @throws IOException If an I/O error occurs trying to obtain the manifest |
| */ |
| Manifest getManifest() throws IOException; |
| |
| /** |
| * Resets the internal pointer used to track JAR entries to the beginning of |
| * the JAR. |
| * |
| * @throws IOException If the pointer cannot be reset |
| */ |
| void reset() throws IOException; |
| } |