1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.impl;
18
19 import java.io.File;
20 import java.security.AccessController;
21 import java.security.PrivilegedAction;
22 import java.security.PrivilegedActionException;
23 import java.security.PrivilegedExceptionAction;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.vfs2.FileObject;
27 import org.apache.commons.vfs2.FileSelector;
28 import org.apache.commons.vfs2.FileSystemException;
29 import org.apache.commons.vfs2.provider.FileReplicator;
30 import org.apache.commons.vfs2.provider.VfsComponent;
31 import org.apache.commons.vfs2.provider.VfsComponentContext;
32
33
34
35
36 public class PrivilegedFileReplicator implements FileReplicator, VfsComponent {
37
38
39
40
41 private final class CloseAction implements PrivilegedAction<Object> {
42
43
44
45 @Override
46 public Object run() {
47 replicatorComponent.close();
48 return null;
49 }
50 }
51
52
53
54 private final class InitAction implements PrivilegedExceptionAction<Object> {
55
56
57
58 @Override
59 public Object run() throws Exception {
60 replicatorComponent.init();
61 return null;
62 }
63 }
64
65
66
67
68 private final class ReplicateAction implements PrivilegedExceptionAction<File> {
69 private final FileObject srcFile;
70 private final FileSelector selector;
71
72 ReplicateAction(final FileObject srcFile, final FileSelector selector) {
73 this.srcFile = srcFile;
74 this.selector = selector;
75 }
76
77
78
79
80
81
82 @Override
83 public File run() throws Exception {
84
85
86 return replicator.replicateFile(srcFile, selector);
87 }
88 }
89
90 private final FileReplicator replicator;
91
92 private final VfsComponent replicatorComponent;
93
94
95
96
97
98
99 public PrivilegedFileReplicator(final FileReplicator replicator) {
100 this.replicator = replicator;
101 if (replicator instanceof VfsComponent) {
102 replicatorComponent = (VfsComponent) replicator;
103 } else {
104 replicatorComponent = null;
105 }
106 }
107
108
109
110
111 @Override
112 public void close() {
113 if (replicatorComponent != null) {
114 AccessController.doPrivileged(new CloseAction());
115 }
116 }
117
118
119
120
121
122
123 @Override
124 public void init() throws FileSystemException {
125 if (replicatorComponent != null) {
126 try {
127 AccessController.doPrivileged(new InitAction());
128 } catch (final PrivilegedActionException e) {
129 throw new FileSystemException("vfs.impl/init-replicator.error", e);
130 }
131 }
132 }
133
134
135
136
137
138
139
140
141
142 @Override
143 public File replicateFile(final FileObject srcFile, final FileSelector selector) throws FileSystemException {
144 try {
145 final ReplicateAction action = new ReplicateAction(srcFile, selector);
146 return AccessController.doPrivileged(action);
147 } catch (final PrivilegedActionException e) {
148 throw new FileSystemException("vfs.impl/replicate-file.error", e, srcFile.getName());
149 }
150 }
151
152
153
154
155
156
157 @Override
158 public void setContext(final VfsComponentContext context) {
159 if (replicatorComponent != null) {
160 replicatorComponent.setContext(context);
161 }
162 }
163
164
165
166
167
168
169 @Override
170 public void setLogger(final Log logger) {
171 if (replicatorComponent != null) {
172 replicatorComponent.setLogger(logger);
173 }
174 }
175 }