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       * @deprecated use {@link #setResourceFilter(ResourceFilter)} instead
71       */
72      public ClasspathResource(String path, ResourceFilter resourceFilter) throws ResourceException {
73          super(resourceFilter);
74          
75          if (DatatypeHelper.isEmpty(path)) {
76              throw new ResourceException("Resource path may not be null or empty");
77          }
78  
79          resource = getClass().getResource(path);
80          if (resource == null) {
81              throw new ResourceException("Classpath resource does not exist: " + path);
82          }
83  
84          lastModTime = new DateTime();
85      }
86  
87      /** {@inheritDoc} */
88      public boolean exists() throws ResourceException {
89          if (resource != null) {
90              return true;
91          }
92  
93          return false;
94      }
95  
96      /** {@inheritDoc} */
97      public InputStream getInputStream() throws ResourceException {
98          try {
99              InputStream ins = resource.openStream();
100             return applyFilter(ins);
101         } catch (IOException e) {
102             throw new ResourceException("Unable to open resource: " + resource);
103         }
104     }
105 
106     /** {@inheritDoc} */
107     public DateTime getLastModifiedTime() throws ResourceException {
108         return lastModTime;
109     }
110 
111     /** {@inheritDoc} */
112     public String getLocation() {
113         return resource.toString();
114     }
115 
116     /** {@inheritDoc} */
117     public String toString() {
118         return getLocation();
119     }
120 
121     /** {@inheritDoc} */
122     public int hashCode() {
123         return getLocation().hashCode();
124     }
125 
126     /** {@inheritDoc} */
127     public boolean equals(Object o) {
128         if (o == this) {
129             return true;
130         }
131 
132         if (o instanceof ClasspathResource) {
133             return getLocation().equals(((ClasspathResource) o).getLocation());
134         }
135 
136         return false;
137     }
138 }