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 extends AbstractFilteredResource {
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          super();
49          
50          if (DatatypeHelper.isEmpty(path)) {
51              throw new ResourceException("Resource path may not be null or empty");
52          }
53  
54          resource = getClass().getResource(path);
55          if (resource == null) {
56              throw new ResourceException("Classpath resource does not exist: " + path);
57          }
58  
59          lastModTime = new DateTime();
60      }
61      
62      /**
63       * Constructor.
64       * 
65       * @param path the path to the file for this resource
66       * @param resourceFilter filter to apply to this resource
67       * 
68       * @throws ResourceException thrown if the resource path is null or empty or if the resource does not exist
69       */
70      public ClasspathResource(String path, ResourceFilter resourceFilter) throws ResourceException {
71          super(resourceFilter);
72          
73          if (DatatypeHelper.isEmpty(path)) {
74              throw new ResourceException("Resource path may not be null or empty");
75          }
76  
77          resource = getClass().getResource(path);
78          if (resource == null) {
79              throw new ResourceException("Classpath resource does not exist: " + path);
80          }
81  
82          lastModTime = new DateTime();
83      }
84  
85      /** {@inheritDoc} */
86      public boolean exists() throws ResourceException {
87          if (resource != null) {
88              return true;
89          }
90  
91          return false;
92      }
93  
94      /** {@inheritDoc} */
95      public InputStream getInputStream() throws ResourceException {
96          try {
97              InputStream ins = resource.openStream();
98              if (getResourceFilter() != null) {
99                  return getResourceFilter().applyFilter(ins);
100             } else {
101                 return ins;
102             }
103         } catch (IOException e) {
104             throw new ResourceException("Unable to open resource: " + resource);
105         }
106     }
107 
108     /** {@inheritDoc} */
109     public DateTime getLastModifiedTime() throws ResourceException {
110         return lastModTime;
111     }
112 
113     /** {@inheritDoc} */
114     public String getLocation() {
115         return resource.toString();
116     }
117 
118     /** {@inheritDoc} */
119     public String toString() {
120         return getLocation();
121     }
122 
123     /** {@inheritDoc} */
124     public int hashCode() {
125         return getLocation().hashCode();
126     }
127 
128     /** {@inheritDoc} */
129     public boolean equals(Object o) {
130         if (o == this) {
131             return true;
132         }
133 
134         if (o instanceof ClasspathResource) {
135             return getLocation().equals(((ClasspathResource) o).getLocation());
136         }
137 
138         return false;
139     }
140 }