1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.catalina;
18
19 import java.io.InputStream;
20 import java.net.URL;
21 import java.security.cert.Certificate;
22 import java.util.jar.Manifest;
23
24 /**
25 * Represents a file or directory within a web application. It borrows heavily
26 * from {@link java.io.File}.
27 */
28 public interface WebResource {
29 /**
30 * @return {@link java.io.File#lastModified()}.
31 */
32 long getLastModified();
33
34 /**
35 * @return the last modified time of this resource in the correct format for
36 * the HTTP Last-Modified header as specified by RFC 2616.
37 */
38 String getLastModifiedHttp();
39
40 /**
41 * @return {@link java.io.File#exists()}.
42 */
43 boolean exists();
44
45 /**
46 * Indicates if this resource is required for applications to correctly scan
47 * the file structure but that does not exist in either the main or any
48 * additional {@link WebResourceSet}. For example, if an external
49 * directory is mapped to /WEB-INF/lib in an otherwise empty web
50 * application, /WEB-INF will be represented as a virtual resource.
51 *
52 * @return <code>true</code> for a virtual resource
53 */
54 boolean isVirtual();
55
56 /**
57 * @return {@link java.io.File#isDirectory()}.
58 */
59 boolean isDirectory();
60
61 /**
62 * @return {@link java.io.File#isFile()}.
63 */
64 boolean isFile();
65
66 /**
67 * @return {@link java.io.File#delete()}.
68 */
69 boolean delete();
70
71 /**
72 * @return {@link java.io.File#getName()}.
73 */
74 String getName();
75
76 /**
77 * @return {@link java.io.File#length()}.
78 */
79 long getContentLength();
80
81 /**
82 * @return {@link java.io.File#getCanonicalPath()}.
83 */
84 String getCanonicalPath();
85
86 /**
87 * @return {@link java.io.File#canRead()}.
88 */
89 boolean canRead();
90
91 /**
92 * @return The path of this resource relative to the web application root. If the
93 * resource is a directory, the return value will end in '/'.
94 */
95 String getWebappPath();
96
97 /**
98 * Return the strong ETag if available (currently not supported) else return
99 * the weak ETag calculated from the content length and last modified.
100 *
101 * @return The ETag for this resource
102 */
103 String getETag();
104
105 /**
106 * Set the MIME type for this Resource.
107 *
108 * @param mimeType The mime type that will be associated with the resource
109 */
110 void setMimeType(String mimeType);
111
112 /**
113 * @return the MIME type for this Resource.
114 */
115 String getMimeType();
116
117 /**
118 * Obtain an InputStream based on the contents of this resource.
119 *
120 * @return An InputStream based on the contents of this resource or
121 * <code>null</code> if the resource does not exist or does not
122 * represent a file
123 */
124 InputStream getInputStream();
125
126 /**
127 * @return the binary content of this resource or {@code null} if it is not
128 * available in a byte[] because, for example, it is too big.
129 */
130 byte[] getContent();
131
132 /**
133 * @return The time the file was created. If not available, the result of
134 * {@link #getLastModified()} will be returned.
135 */
136 long getCreation();
137
138 /**
139 * @return a URL to access the resource or <code>null</code> if no such URL
140 * is available or if the resource does not exist.
141 */
142 URL getURL();
143
144 /**
145 * @return the code base for this resource that will be used when looking up the
146 * assigned permissions for the code base in the security policy file when
147 * running under a security manager.
148 */
149 URL getCodeBase();
150
151 /**
152 * @return a reference to the WebResourceRoot of which this WebResource is a
153 * part.
154 */
155 WebResourceRoot getWebResourceRoot();
156
157 /**
158 * @return the certificates that were used to sign this resource to verify
159 * it or @null if none.
160 *
161 * @see java.util.jar.JarEntry#getCertificates()
162 */
163 Certificate[] getCertificates();
164
165 /**
166 * @return the manifest associated with this resource or @null if none.
167 *
168 * @see java.util.jar.JarFile#getManifest()
169 */
170 Manifest getManifest();
171 }
172