View Javadoc

1   /*
2    * Copyright [2007] [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.IOException;
20  import java.io.InputStream;
21  import java.net.URL;
22  
23  import org.joda.time.DateTime;
24  import org.opensaml.xml.util.DatatypeHelper;
25  
26  /**
27   * Resource that represents a resource found on the classpath.
28   * 
29   * Because object on the classpath are not meant to change during runtime the last modification is set to the time the
30   * {@link ClasspathResource} is created and is never changed.
31   */
32  public class ClasspathResource implements Resource {
33  
34      /** Classpath location of resource. */
35      private URL resource;
36  
37      /** Last modification time, set to when resources is created. */
38      private DateTime lastModTime;
39  
40      /**
41       * Constructor.
42       * 
43       * @param path the path to the file for this resource
44       * 
45       * @throws ResourceException thrown if the resource path is null or empty or if the resource does not exist
46       */
47      public ClasspathResource(String path) throws ResourceException {
48          if (DatatypeHelper.isEmpty(path)) {
49              throw new ResourceException("Resource path may not be null or empty");
50          }
51  
52          resource = getClass().getResource(path);
53          if (resource == null) {
54              throw new ResourceException("Classpath resource does not exist: " + path);
55          }
56  
57          lastModTime = new DateTime();
58      }
59  
60      /** {@inheritDoc} */
61      public boolean exists() throws ResourceException {
62          if(resource != null){
63              return true;
64          }
65          
66          return false;
67      }
68  
69      /** {@inheritDoc} */
70      public InputStream getInputStream() throws ResourceException {
71          try {
72              return resource.openStream();
73          } catch (IOException e) {
74              throw new ResourceException("Unable to open resource: " + resource);
75          }
76      }
77  
78      /** {@inheritDoc} */
79      public DateTime getLastModifiedTime() throws ResourceException {
80          return lastModTime;
81      }
82  
83      /** {@inheritDoc} */
84      public String getLocation() {
85          return resource.toString();
86      }
87      
88      /** {@inheritDoc} */
89      public String toString() {
90          return getLocation();
91      }
92      
93      /** {@inheritDoc} */
94      public int hashCode() {
95          return getLocation().hashCode();
96      }
97      
98      /** {@inheritDoc} */
99      public boolean equals(Object o) {
100         if(o == this){
101             return true;
102         }
103         
104         if(o instanceof ClasspathResource){
105             return getLocation().equals(((ClasspathResource)o).getLocation());
106         }
107         
108         return false;
109     }
110 }