1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.provider.local;
18
19 import java.net.URI;
20
21 import org.apache.commons.vfs2.FileName;
22 import org.apache.commons.vfs2.FileSystemException;
23 import org.apache.commons.vfs2.FileType;
24 import org.apache.commons.vfs2.provider.AbstractFileNameParser;
25 import org.apache.commons.vfs2.provider.UriParser;
26 import org.apache.commons.vfs2.provider.VfsComponentContext;
27
28
29
30
31 public abstract class LocalFileNameParser extends AbstractFileNameParser {
32
33
34
35
36 public LocalFileNameParser() {
37
38 }
39
40
41
42
43
44
45
46
47
48
49 protected abstract FileName createFileName(String scheme, String rootFile, String path, FileType fileType);
50
51
52
53
54
55
56
57
58
59 protected abstract String extractRootPrefix(String uri, StringBuilder name) throws FileSystemException;
60
61 private String[] getSchemes(final VfsComponentContext context, final FileName base, final String uri) {
62 if (context == null) {
63 return new String[] {base != null ? base.getScheme() : URI.create(uri).getScheme()};
64 }
65 return context.getFileSystemManager().getSchemes();
66 }
67
68
69
70
71
72
73
74 public boolean isAbsoluteName(final String name) {
75
76 final StringBuilder b = new StringBuilder(name);
77 try {
78 UriParser.fixSeparators(b);
79 extractRootPrefix(name, b);
80 return true;
81 } catch (final FileSystemException e) {
82 return false;
83 }
84 }
85
86 @Override
87 public FileName parseUri(final VfsComponentContext context, final FileName base, final String uri)
88 throws FileSystemException {
89 final StringBuilder nameBuilder = new StringBuilder();
90
91
92 String scheme = UriParser.extractScheme(getSchemes(context, base, uri), uri, nameBuilder);
93 if (scheme == null && base != null) {
94 scheme = base.getScheme();
95 }
96 if (scheme == null) {
97 scheme = "file";
98 }
99
100
101 UriParser.canonicalizePath(nameBuilder, 0, nameBuilder.length(), this);
102
103 UriParser.fixSeparators(nameBuilder);
104
105
106 final String rootFile = extractRootPrefix(uri, nameBuilder);
107
108
109 final FileType fileType = UriParser.normalisePath(nameBuilder);
110
111 final String path = nameBuilder.toString();
112
113 return createFileName(scheme, rootFile, path, fileType);
114 }
115 }