1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.net.ftp.parser;
19
20 import org.apache.commons.net.ftp.Configurable;
21 import org.apache.commons.net.ftp.FTPClientConfig;
22 import org.apache.commons.net.ftp.FTPFileEntryParser;
23
24
25
26
27
28
29
30
31
32
33
34
35 public class DefaultFTPFileEntryParserFactory
36 implements FTPFileEntryParserFactory
37 {
38 private FTPClientConfig config = null;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 public FTPFileEntryParser createFileEntryParser(String key)
80 {
81 if (key == null)
82 throw new ParserInitializationException("Parser key cannot be null");
83
84 Class<?> parserClass = null;
85 FTPFileEntryParser parser = null;
86 try
87 {
88 parserClass = Class.forName(key);
89 parser = (FTPFileEntryParser) parserClass.newInstance();
90 }
91 catch (ClassNotFoundException e)
92 {
93 try
94 {
95 String ukey = null;
96 if (null != key)
97 {
98 ukey = key.toUpperCase(java.util.Locale.ENGLISH);
99 }
100 if ((ukey.indexOf(FTPClientConfig.SYST_UNIX) >= 0)
101 || (ukey.indexOf(FTPClientConfig.SYST_L8) >= 0))
102 {
103 parser = createUnixFTPEntryParser();
104 }
105 else if (ukey.indexOf(FTPClientConfig.SYST_VMS) >= 0)
106 {
107 parser = createVMSVersioningFTPEntryParser();
108 }
109 else if (ukey.indexOf(FTPClientConfig.SYST_NT) >= 0)
110 {
111 parser = createNTFTPEntryParser();
112 }
113 else if (ukey.indexOf(FTPClientConfig.SYST_OS2) >= 0)
114 {
115 parser = createOS2FTPEntryParser();
116 }
117 else if (ukey.indexOf(FTPClientConfig.SYST_OS400) >= 0 ||
118 ukey.indexOf(FTPClientConfig.SYST_AS400) >= 0)
119 {
120 parser = createOS400FTPEntryParser();
121 }
122 else if (ukey.indexOf(FTPClientConfig.SYST_MVS) >= 0)
123 {
124 parser = createMVSEntryParser();
125 }
126 else if (ukey.indexOf(FTPClientConfig.SYST_NETWARE) >= 0)
127 {
128 parser = createNetwareFTPEntryParser();
129 }
130 else
131 {
132 throw new ParserInitializationException("Unknown parser type: " + key);
133 }
134 }
135 catch (NoClassDefFoundError nf) {
136 throw new ParserInitializationException("Error initializing parser", nf);
137 }
138
139 }
140 catch (NoClassDefFoundError e)
141 {
142 throw new ParserInitializationException("Error initializing parser", e);
143 }
144 catch (ClassCastException e)
145 {
146 throw new ParserInitializationException(parserClass.getName()
147 + " does not implement the interface "
148 + "org.apache.commons.net.ftp.FTPFileEntryParser.", e);
149 }
150 catch (Throwable e)
151 {
152 throw new ParserInitializationException("Error initializing parser", e);
153 }
154
155 if (parser instanceof Configurable) {
156 ((Configurable)parser).configure(this.config);
157 }
158 return parser;
159 }
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 public FTPFileEntryParser createFileEntryParser(FTPClientConfig config)
182 throws ParserInitializationException
183 {
184 this.config = config;
185 String key = config.getServerSystemKey();
186 return createFileEntryParser(key);
187 }
188
189
190 public FTPFileEntryParser createUnixFTPEntryParser()
191 {
192 return new UnixFTPEntryParser();
193 }
194
195 public FTPFileEntryParser createVMSVersioningFTPEntryParser()
196 {
197 return new VMSVersioningFTPEntryParser();
198 }
199
200 public FTPFileEntryParser createNetwareFTPEntryParser() {
201 return new NetwareFTPEntryParser();
202 }
203
204 public FTPFileEntryParser createNTFTPEntryParser()
205 {
206 if (config != null && FTPClientConfig.SYST_NT.equals(
207 config.getServerSystemKey()))
208 {
209 return new NTFTPEntryParser();
210 } else {
211 return new CompositeFileEntryParser(new FTPFileEntryParser[]
212 {
213 new NTFTPEntryParser(),
214 new UnixFTPEntryParser()
215 });
216 }
217 }
218
219 public FTPFileEntryParser createOS2FTPEntryParser()
220 {
221 return new OS2FTPEntryParser();
222 }
223
224 public FTPFileEntryParser createOS400FTPEntryParser()
225 {
226 if (config != null &&
227 FTPClientConfig.SYST_OS400.equals(config.getServerSystemKey()))
228 {
229 return new OS400FTPEntryParser();
230 } else {
231 return new CompositeFileEntryParser(new FTPFileEntryParser[]
232 {
233 new OS400FTPEntryParser(),
234 new UnixFTPEntryParser()
235 });
236 }
237 }
238
239 public FTPFileEntryParser createMVSEntryParser()
240 {
241 return new MVSFTPEntryParser();
242 }
243
244
245
246 }
247