1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.net.ftp.parser;
17 import java.text.ParseException;
18
19 import org.apache.commons.net.ftp.FTPClientConfig;
20 import org.apache.commons.net.ftp.FTPFile;
21
22 /**
23 * Implementation of FTPFileEntryParser and FTPFileListParser for OS2 Systems.
24 *
25 * @author <a href="Winston.Ojeda@qg.com">Winston Ojeda</a>
26 * @author <a href="mailto:scohen@apache.org">Steve Cohen</a>
27 * @version $Id: OS2FTPEntryParser.java 155429 2005-02-26 13:13:04Z dirkv $
28 * @see org.apache.commons.net.ftp.FTPFileEntryParser FTPFileEntryParser (for usage instructions)
29 */
30 public class OS2FTPEntryParser extends ConfigurableFTPFileEntryParserImpl
31
32 {
33
34 private static final String DEFAULT_DATE_FORMAT
35 = "MM-dd-yy HH:mm";
36 /**
37 * this is the regular expression used by this parser.
38 */
39 private static final String REGEX =
40 "(\\s+|[0-9]+)\\s*"
41 + "(\\s+|[A-Z]+)\\s*"
42 + "(DIR|\\s+)\\s*"
43 + "(\\S+)\\s+(\\S+)\\s+"
44 + "(\\S.*)";
45
46 /**
47 * The default constructor for a OS2FTPEntryParser object.
48 *
49 * @exception IllegalArgumentException
50 * Thrown if the regular expression is unparseable. Should not be seen
51 * under normal conditions. It it is seen, this is a sign that
52 * <code>REGEX</code> is not a valid regular expression.
53 */
54 public OS2FTPEntryParser()
55 {
56 this(null);
57 }
58
59 /**
60 * This constructor allows the creation of an OS2FTPEntryParser object
61 * with something other than the default configuration.
62 *
63 * @param config The {@link FTPClientConfig configuration} object used to
64 * configure this parser.
65 * @exception IllegalArgumentException
66 * Thrown if the regular expression is unparseable. Should not be seen
67 * under normal conditions. It it is seen, this is a sign that
68 * <code>REGEX</code> is not a valid regular expression.
69 * @since 1.4
70 */
71 public OS2FTPEntryParser(FTPClientConfig config)
72 {
73 super(REGEX);
74 configure(config);
75 }
76
77 /**
78 * Parses a line of an OS2 FTP server file listing and converts it into a
79 * usable format in the form of an <code> FTPFile </code> instance. If the
80 * file listing line doesn't describe a file, <code> null </code> is
81 * returned, otherwise a <code> FTPFile </code> instance representing the
82 * files in the directory is returned.
83 * <p>
84 * @param entry A line of text from the file listing
85 * @return An FTPFile instance corresponding to the supplied entry
86 */
87 public FTPFile parseFTPEntry(String entry)
88 {
89
90 FTPFile f = new FTPFile();
91 if (matches(entry))
92 {
93 String size = group(1);
94 String attrib = group(2);
95 String dirString = group(3);
96 String datestr = group(4)+" "+group(5);
97 String name = group(6);
98 try
99 {
100 f.setTimestamp(super.parseTimestamp(datestr));
101 }
102 catch (ParseException e)
103 {
104 return null;
105 }
106
107
108
109 if (dirString.trim().equals("DIR") || attrib.trim().equals("DIR"))
110 {
111 f.setType(FTPFile.DIRECTORY_TYPE);
112 }
113 else
114 {
115 f.setType(FTPFile.FILE_TYPE);
116 }
117
118
119
120 f.setName(name.trim());
121
122
123 f.setSize(Long.parseLong(size.trim()));
124
125 return (f);
126 }
127 return null;
128
129 }
130
131 /**
132 * Defines a default configuration to be used when this class is
133 * instantiated without a {@link FTPClientConfig FTPClientConfig}
134 * parameter being specified.
135 * @return the default configuration for this parser.
136 */
137 protected FTPClientConfig getDefaultConfiguration() {
138 return new FTPClientConfig(
139 FTPClientConfig.SYST_OS2,
140 DEFAULT_DATE_FORMAT,
141 null, null, null, null);
142 }
143
144 }