1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs.provider.local;
18
19 import org.apache.commons.vfs.FileName;
20 import org.apache.commons.vfs.FileSystemException;
21 import org.apache.commons.vfs.FileType;
22 import org.apache.commons.vfs.provider.AbstractFileNameParser;
23 import org.apache.commons.vfs.provider.UriParser;
24 import org.apache.commons.vfs.provider.VfsComponentContext;
25
26 /***
27 * A name parser.
28 *
29 * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
30 * @version $Revision: 480428 $ $Date: 2006-11-29 07:15:24 +0100 (Mi, 29 Nov 2006) $
31 */
32 public abstract class LocalFileNameParser extends AbstractFileNameParser
33 {
34 /***
35 * Determines if a name is an absolute file name.
36 */
37 public boolean isAbsoluteName(final String name)
38 {
39
40 StringBuffer b = new StringBuffer(name);
41 try
42 {
43 UriParser.fixSeparators(b);
44 extractRootPrefix(name, b);
45 return true;
46 }
47 catch (FileSystemException e)
48 {
49 return false;
50 }
51 }
52
53 /***
54 * Pops the root prefix off a URI, which has had the scheme removed.
55 */
56 protected abstract String extractRootPrefix(final String uri,
57 final StringBuffer name)
58 throws FileSystemException;
59
60
61 public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
62 {
63 final StringBuffer name = new StringBuffer();
64
65
66 String scheme = UriParser.extractScheme(filename, name);
67 if (scheme == null)
68 {
69 scheme = "file";
70 }
71
72
73 UriParser.canonicalizePath(name, 0, name.length(), this);
74
75 UriParser.fixSeparators(name);
76
77
78 final String rootFile = extractRootPrefix(filename, name);
79
80
81 FileType fileType = UriParser.normalisePath(name);
82
83 final String path = name.toString();
84
85 return createFileName(
86 scheme,
87 rootFile,
88 path,
89 fileType);
90 }
91
92 protected abstract FileName createFileName(String scheme, final String rootFile, final String path, final FileType type);
93 }