View Javadoc

1   /*
2    * Copyright 2006 University Corporation for Advanced Internet Development, Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.opensaml.util.resource;
18  
19  import java.io.File;
20  import java.io.FileInputStream;
21  import java.io.FileNotFoundException;
22  import java.io.InputStream;
23  import java.net.URI;
24  
25  import org.joda.time.DateTime;
26  import org.opensaml.xml.util.DatatypeHelper;
27  
28  /**
29   * A resource representing a file on the local filesystem.
30   */
31  public class FilesystemResource extends AbstractFilteredResource {
32  
33      /** The file represented by this resource. */
34      private File resource;
35  
36      /**
37       * Constructor.
38       * 
39       * @param resourcePath the path to the file for this resource
40       * 
41       * @throws ResourceException thrown if the resource path is null or empty
42       */
43      public FilesystemResource(String resourcePath) throws ResourceException {
44          super();
45  
46          if (DatatypeHelper.isEmpty(resourcePath)) {
47              throw new ResourceException("Resource path may not be null or empty");
48          }
49  
50          resource = new File(resourcePath);
51      }
52  
53      /**
54       * Constructor.
55       * 
56       * @param resourceURI file: URI to the file
57       * 
58       * @throws ResourceException thrown if the resource path is null or empty
59       * 
60       * @since 1.2.0
61       */
62      public FilesystemResource(URI resourceURI) throws ResourceException {
63          super();
64  
65          if (resourceURI == null) {
66              throw new ResourceException("Resource URL may not be null");
67          }
68  
69          resource = new File(resourceURI);
70      }
71  
72      /**
73       * Constructor.
74       * 
75       * @param resourcePath the path to the file for this resource
76       * @param resourceFilter filter to apply to this resource
77       * 
78       * @throws ResourceException thrown if the resource path is null or empty
79       */
80      public FilesystemResource(String resourcePath, ResourceFilter resourceFilter) throws ResourceException {
81          super(resourceFilter);
82  
83          if (DatatypeHelper.isEmpty(resourcePath)) {
84              throw new ResourceException("Resource path may not be null or empty");
85          }
86  
87          resource = new File(resourcePath);
88      }
89  
90      /**
91       * Constructor.
92       * 
93       * @param resourceURI the file: URI to the file for this resource
94       * @param resourceFilter filter to apply to this resource
95       * 
96       * @throws ResourceException thrown if the resource path is null or empty
97       * 
98       * @since 1.2.0
99       */
100     public FilesystemResource(URI resourceURI, ResourceFilter resourceFilter) throws ResourceException {
101         super(resourceFilter);
102 
103         if (resourceURI == null) {
104             throw new ResourceException("Resource URI may not be null");
105         }
106 
107         resource = new File(resourceURI);
108     }
109 
110     /** {@inheritDoc} */
111     public boolean exists() throws ResourceException {
112         return resource.exists();
113     }
114 
115     /** {@inheritDoc} */
116     public InputStream getInputStream() throws ResourceException {
117         try {
118             FileInputStream ins = new FileInputStream(resource);
119             if (getResourceFilter() != null) {
120                 return getResourceFilter().applyFilter(ins);
121             } else {
122                 return ins;
123             }
124         } catch (FileNotFoundException e) {
125             throw new ResourceException("Resource file does not exist: " + resource.getAbsolutePath());
126         }
127     }
128 
129     /** {@inheritDoc} */
130     public DateTime getLastModifiedTime() throws ResourceException {
131         if (!resource.exists()) {
132             throw new ResourceException("Resource file does not exist: " + resource.getAbsolutePath());
133         }
134 
135         return new DateTime(resource.lastModified());
136     }
137 
138     /** {@inheritDoc} */
139     public String getLocation() {
140         return resource.getAbsolutePath();
141     }
142 
143     /** {@inheritDoc} */
144     public String toString() {
145         return getLocation();
146     }
147 
148     /** {@inheritDoc} */
149     public int hashCode() {
150         return getLocation().hashCode();
151     }
152 
153     /** {@inheritDoc} */
154     public boolean equals(Object o) {
155         if (o == this) {
156             return true;
157         }
158 
159         if (o instanceof FilesystemResource) {
160             return getLocation().equals(((FilesystemResource) o).getLocation());
161         }
162 
163         return false;
164     }
165 }