01: // FileURL.java - Construct a file: scheme URL
02:
03: /*
04: * Copyright 2001-2004 The Apache Software Foundation or its licensors,
05: * as applicable.
06: *
07: * Licensed under the Apache License, Version 2.0 (the "License");
08: * you may not use this file except in compliance with the License.
09: * You may obtain a copy of the License at
10: *
11: * http://www.apache.org/licenses/LICENSE-2.0
12: *
13: * Unless required by applicable law or agreed to in writing, software
14: * distributed under the License is distributed on an "AS IS" BASIS,
15: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16: * See the License for the specific language governing permissions and
17: * limitations under the License.
18: */
19:
20: package com.sun.org.apache.xml.internal.resolver.helpers;
21:
22: import java.net.URL;
23: import java.net.MalformedURLException;
24:
25: /**
26: * Static method for dealing with file: URLs.
27: *
28: * <p>This class defines a static method that can be used to construct
29: * an appropriate file: URL from parts. It's defined here so that it
30: * can be reused throught the resolver.</p>
31: *
32: * <p>(Yes, I'd rather have called this class FileUR<b>I</b>, but
33: * given that a jave.net.URL is returned, it seemed...even more
34: * confusing.)</p>
35: *
36: * @author Norman Walsh
37: * <a href="mailto:Norman.Walsh@Sun.COM">Norman.Walsh@Sun.COM</a>
38: *
39: * @version 1.0
40: */
41: public abstract class FileURL {
42: protected FileURL() {
43: }
44:
45: /**
46: * Construct a file: URL for a path name.
47: *
48: * <p>URLs in the file: scheme can be constructed for paths on
49: * the local file system. Several possibilities need to be considered:
50: * </p>
51: *
52: * <ul>
53: * <li>If the path does not begin with a slash, then it is assumed
54: * to reside in the users current working directory
55: * (System.getProperty("user.dir")).</li>
56: * <li>On Windows machines, the current working directory uses
57: * backslashes (\\, instead of /).</li>
58: * <li>If the current working directory is "/", don't add an extra
59: * slash before the base name.</li>
60: * </ul>
61: *
62: * <p>This method is declared static so that other classes
63: * can use it directly.</p>
64: *
65: * @param pathname The path name component for which to construct a URL.
66: *
67: * @return The appropriate file: URL.
68: *
69: * @throws MalformedURLException if the pathname can't be turned into
70: * a proper URL.
71: */
72: public static URL makeURL(String pathname)
73: throws MalformedURLException {
74: if (pathname.startsWith("/")) {
75: return new URL("file://" + pathname);
76: }
77:
78: String userdir = System.getProperty("user.dir");
79: userdir.replace('\\', '/');
80:
81: if (userdir.endsWith("/")) {
82: return new URL("file:///" + userdir + pathname);
83: } else {
84: return new URL("file:///" + userdir + "/" + pathname);
85: }
86: }
87: }
|