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