be7d6ecce7cd304c40c299f9e8e42ccbe5ddf324
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / common / ShibResource.java
1 /*
2  * Copyright [2005] [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 edu.internet2.middleware.shibboleth.common;
18
19 import java.io.File;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.net.MalformedURLException;
23 import java.net.URI;
24 import java.net.URISyntaxException;
25 import java.net.URL;
26
27 /**
28  * Manages access to shibboleth file-based resources in a consistent fashion.
29  */
30 public class ShibResource {
31
32         private URL resource;
33
34         public ShibResource(String name) throws ResourceNotAvailableException {
35
36                 this(name, ShibResource.class);
37         }
38
39         public ShibResource(String name, Class requester) throws ResourceNotAvailableException {
40
41                 try {
42                         resource = new URL(name);
43                 } catch (MalformedURLException e) {
44                         resource = requester.getResource(name);
45                 }
46                 if (resource == null) {
47                         throw new ResourceNotAvailableException(
48                                 "ShibResource could not be found at the specified location: " + name);
49                 }
50         }
51
52         /**
53          * Returns an input stream to read the resource contents
54          */
55         public InputStream getInputStream() throws IOException {
56
57                 return resource.openStream();
58         }
59
60         /**
61          * Returns a <code>File</code> representation of the resource
62          */
63         public File getFile() throws IOException {
64
65                 try {
66                         File file = new File(new URI(resource.toString().replaceAll("\\s", "%20")));
67                         return file;
68                 } catch (URISyntaxException e) {
69                         throw new ResourceNotAvailableException("File could not be loaded from specified resource: " + e);
70                 } catch (IllegalArgumentException e) {
71                         throw new ResourceNotAvailableException("File could not be loaded from specified resource: " + e);
72                 }
73         }
74
75         /**
76          * Returns a <code>URL</code> pointer to the resource
77          */
78         public URL getURL() throws IOException {
79
80                 return resource;
81         }
82
83         public class ResourceNotAvailableException extends IOException {
84
85                 public ResourceNotAvailableException(String message) {
86
87                         super(message);
88                 }
89         }
90
91 }