1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package gov.nasa.pds.tools.label;
17
18 import gov.nasa.pds.tools.logging.ToolsLogRecord;
19
20 import java.io.IOException;
21 import java.net.URL;
22 import java.util.Iterator;
23 import java.util.List;
24 import java.util.logging.Level;
25 import java.util.logging.Logger;
26
27 /***
28 * This is a utility class to resolve URLs for pointers.
29 *
30 * @author pramirez
31 * @version $Revision: 3789 $
32 *
33 */
34 public class URLResolver {
35 private static Logger log = Logger.getLogger(URLResolver.class.getName());
36
37 public static URL resolveURL(List includePaths, PointerStatement pointer, String externalFilename) throws IOException {
38 URL resolvedURL = null;
39 String filename = externalFilename;
40
41
42 if (!filename.equals(filename.toLowerCase()) && !filename.equals(filename.toUpperCase()))
43 log.log(new ToolsLogRecord(Level.WARNING, "A pointer reference should not contain mixed case.",
44 pointer.getFilename(), pointer.getContext(), pointer.getLineNumber()));
45
46
47 for (Iterator i = includePaths.iterator(); i.hasNext() && resolvedURL == null;) {
48 URL baseURL = (URL) i.next();
49 String url = baseURL.toString();
50 if (!url.endsWith("/"))
51 url += "/";
52 URL fileURL = null;
53
54 try {
55 fileURL = new URL(url + filename);
56 fileURL.openStream();
57 resolvedURL = fileURL;
58 } catch (IOException ioEx) {
59
60 }
61
62
63 if (resolvedURL == null) {
64 try {
65 fileURL = new URL(url + filename.toUpperCase());
66 fileURL.openStream();
67 log.log(new ToolsLogRecord(Level.WARNING, "In order to resolve the pointer the filename " +
68 "had to be forced to upper case.", pointer.getFilename(), pointer.getContext(), pointer.getLineNumber()));
69 resolvedURL = fileURL;
70 } catch (IOException ioEx) {
71
72 }
73 }
74
75
76 if (resolvedURL == null) {
77 try {
78 fileURL = new URL(url + filename.toLowerCase());
79 fileURL.openStream();
80 log.log(new ToolsLogRecord(Level.WARNING, "In order to resolve the pointer the filename " +
81 "had to be forced lower case.", pointer.getFilename(), pointer.getContext(), pointer.getLineNumber()));
82 resolvedURL = fileURL;
83 } catch (IOException ioEx) {
84
85 }
86 }
87 }
88
89 if (resolvedURL == null)
90 throw new IOException("Could not find referenced pointer " + filename);
91
92 return resolvedURL;
93 }
94 }