1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.provider.webdav;
18
19 import java.util.Arrays;
20 import java.util.Collection;
21 import java.util.Collections;
22
23 import org.apache.commons.httpclient.HttpClient;
24 import org.apache.commons.vfs2.Capability;
25 import org.apache.commons.vfs2.FileName;
26 import org.apache.commons.vfs2.FileObject;
27 import org.apache.commons.vfs2.FileSystem;
28 import org.apache.commons.vfs2.FileSystemConfigBuilder;
29 import org.apache.commons.vfs2.FileSystemException;
30 import org.apache.commons.vfs2.FileSystemOptions;
31 import org.apache.commons.vfs2.UserAuthenticationData;
32 import org.apache.commons.vfs2.provider.GenericFileName;
33 import org.apache.commons.vfs2.provider.http.HttpClientFactory;
34 import org.apache.commons.vfs2.provider.http.HttpFileProvider;
35 import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
36
37
38
39
40
41
42 public class WebdavFileProvider extends HttpFileProvider {
43
44
45
46
47
48
49 @Deprecated
50 public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = {
51 UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD };
52
53
54 protected static final Collection<Capability> capabilities = Collections
55 .unmodifiableCollection(Arrays.asList(Capability.CREATE, Capability.DELETE, Capability.RENAME, Capability.GET_TYPE,
56 Capability.LIST_CHILDREN, Capability.READ_CONTENT, Capability.URI, Capability.WRITE_CONTENT,
57 Capability.GET_LAST_MODIFIED, Capability.ATTRIBUTES, Capability.RANDOM_ACCESS_READ,
58 Capability.DIRECTORY_READ_CONTENT));
59
60
61
62
63 public WebdavFileProvider() {
64 setFileNameParser(WebdavFileNameParser.getInstance());
65 }
66
67
68
69
70
71
72
73
74
75
76
77
78 @Override
79 protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
80 throws FileSystemException {
81
82 final GenericFileName rootName = (GenericFileName) name;
83 final FileSystemOptions fsOpts = fileSystemOptions == null ? new FileSystemOptions() : fileSystemOptions;
84
85 UserAuthenticationData authData = null;
86 HttpClient httpClient;
87 try {
88 authData = UserAuthenticatorUtils.authenticate(fsOpts, AUTHENTICATOR_TYPES);
89
90 httpClient = HttpClientFactory.createConnection(WebdavFileSystemConfigBuilder.getInstance(), "http",
91 rootName.getHostName(), rootName.getPort(),
92 UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
93 UserAuthenticationData.USERNAME, UserAuthenticatorUtils.toChar(rootName.getUserName()))),
94 UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
95 UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(rootName.getPassword()))),
96 fsOpts);
97 } finally {
98 UserAuthenticatorUtils.cleanup(authData);
99 }
100
101 return new WebdavFileSystem(rootName, httpClient, fsOpts);
102 }
103
104 @Override
105 public Collection<Capability> getCapabilities() {
106 return capabilities;
107 }
108
109 @Override
110 public FileSystemConfigBuilder getConfigBuilder() {
111 return WebdavFileSystemConfigBuilder.getInstance();
112 }
113 }