1 package org.djunits.generator;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.net.Authenticator;
7 import java.net.MalformedURLException;
8 import java.net.PasswordAuthentication;
9 import java.net.URL;
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public final class URLResource
45 {
46
47
48
49 private URLResource()
50 {
51 super();
52
53 }
54
55
56
57
58
59
60 public static URL getResource(final String name)
61 {
62 try
63 {
64 File file = new File(name);
65
66 if (name.startsWith("/"))
67 {
68 URL url = URLResource.class.getResource(name);
69 if (url != null)
70 {
71 return url;
72 }
73 url = Thread.currentThread().getContextClassLoader().getResource(name.substring(1));
74 if (url != null)
75 {
76 return url;
77 }
78 if (file.exists())
79 {
80 return new URL("file:" + name);
81 }
82 }
83 else if (name.startsWith("\\") || name.contains("\\"))
84 {
85 if (file.exists())
86 {
87 return new URL("file:" + name);
88 }
89 }
90 else if (file.exists())
91 {
92 return new URL("file:" + name);
93 }
94 else
95 {
96 if (name.indexOf("@") == -1)
97 {
98 return new URL(name);
99 }
100
101 String temp = name.substring(name.indexOf("//") + 2);
102 String userName = temp.substring(0, temp.indexOf(":"));
103 String password = temp.substring(temp.indexOf(":") + 1);
104 password = password.substring(0, password.indexOf("@"));
105 String url = name.substring(0, name.indexOf("//") + 2);
106 url = url + name.substring(name.indexOf("@") + 1);
107 Authenticator.setDefault(new PasswordAuthenticator(userName, password));
108 return new URL(url);
109 }
110 }
111 catch (Exception exception)
112 {
113 exception = null;
114
115 }
116 return null;
117 }
118
119
120
121
122
123
124
125
126 public static URL getResource(final String name, final String base)
127 {
128 URL url = null;
129
130
131 try
132 {
133 url = new URL(name);
134 }
135 catch (MalformedURLException ex)
136 {
137
138 }
139
140
141 if (url == null)
142 {
143 String completeName = name;
144 if (!name.startsWith(File.separator) && !name.startsWith("/") && base != null)
145 {
146 String baseDir = "";
147 int i = base.lastIndexOf(File.separator);
148 if (i == -1 && !File.separator.equals("/"))
149 {
150 i = base.lastIndexOf("/");
151 }
152 if (i != -1)
153 {
154 baseDir = base.substring(0, i + 1);
155 }
156 completeName = baseDir + name;
157 }
158
159
160 try
161 {
162 url = new URL(completeName);
163 if (url.getProtocol().equalsIgnoreCase("file"))
164 {
165 File file = new File(url.getPath());
166 if (!file.exists())
167 {
168 url = null;
169 }
170 }
171 }
172 catch (MalformedURLException ex)
173 {
174 url = getResourceOrFile(completeName);
175 }
176
177
178 if (url == null && !name.equalsIgnoreCase(completeName))
179 {
180 url = getResourceOrFile(name);
181 }
182
183 }
184
185
186 if (url != null && url.getUserInfo() != null)
187 {
188 String ui = url.getUserInfo();
189 String userName = ui.substring(0, ui.indexOf(":"));
190 String password = ui.substring(ui.indexOf(":") + 1);
191 Authenticator.setDefault(new PasswordAuthenticator(userName, password));
192 }
193
194 return url;
195 }
196
197
198
199
200
201
202 private static URL getResourceOrFile(String path)
203 {
204 URL url = null;
205
206
207 if (url == null)
208 {
209 url = URLResource.class.getResource(path);
210 }
211
212
213 if (url == null)
214 {
215 url = Thread.currentThread().getContextClassLoader().getResource(path.substring(1));
216 }
217
218
219 if (url == null)
220 {
221 File file = new File(path);
222 if (file.exists())
223 {
224 try
225 {
226 url = new URL("file:" + file.getCanonicalPath());
227 }
228 catch (IOException ex)
229 {
230
231 }
232 }
233 }
234
235 return url;
236 }
237
238
239
240
241
242
243 public static InputStream getResourceAsStream(final String name)
244 {
245 try
246 {
247 URL url = URLResource.getResource(name);
248 if (url == null)
249 {
250 return null;
251 }
252 return url.openStream();
253 }
254 catch (Exception exception)
255 {
256 return null;
257 }
258 }
259
260
261
262
263 private static class PasswordAuthenticator extends Authenticator
264 {
265
266 private String userName = null;
267
268
269 private String password = null;
270
271
272
273
274
275
276 public PasswordAuthenticator(final String userName, final String password)
277 {
278 super();
279 this.userName = userName;
280 this.password = password;
281 }
282
283
284 @Override
285 protected PasswordAuthentication getPasswordAuthentication()
286 {
287 return new PasswordAuthentication(this.userName, this.password.toCharArray());
288 }
289 }
290
291 }