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