001 /* 002 * Copyright 2001-2005 The Apache Software Foundation 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.apache.commons.net.ftp.parser; 017 import java.text.ParseException; 018 019 import org.apache.commons.net.ftp.FTPClientConfig; 020 import org.apache.commons.net.ftp.FTPFile; 021 022 /** 023 * Implementation of FTPFileEntryParser and FTPFileListParser for OS2 Systems. 024 * 025 * @author <a href="Winston.Ojeda@qg.com">Winston Ojeda</a> 026 * @author <a href="mailto:scohen@apache.org">Steve Cohen</a> 027 * @version $Id: OS2FTPEntryParser.java 155429 2005-02-26 13:13:04Z dirkv $ 028 * @see org.apache.commons.net.ftp.FTPFileEntryParser FTPFileEntryParser (for usage instructions) 029 */ 030 public class OS2FTPEntryParser extends ConfigurableFTPFileEntryParserImpl 031 032 { 033 034 private static final String DEFAULT_DATE_FORMAT 035 = "MM-dd-yy HH:mm"; //11-09-01 12:30 036 /** 037 * this is the regular expression used by this parser. 038 */ 039 private static final String REGEX = 040 "(\\s+|[0-9]+)\\s*" 041 + "(\\s+|[A-Z]+)\\s*" 042 + "(DIR|\\s+)\\s*" 043 + "(\\S+)\\s+(\\S+)\\s+" /* date stuff */ 044 + "(\\S.*)"; 045 046 /** 047 * The default constructor for a OS2FTPEntryParser object. 048 * 049 * @exception IllegalArgumentException 050 * Thrown if the regular expression is unparseable. Should not be seen 051 * under normal conditions. It it is seen, this is a sign that 052 * <code>REGEX</code> is not a valid regular expression. 053 */ 054 public OS2FTPEntryParser() 055 { 056 this(null); 057 } 058 059 /** 060 * This constructor allows the creation of an OS2FTPEntryParser object 061 * with something other than the default configuration. 062 * 063 * @param config The {@link FTPClientConfig configuration} object used to 064 * configure this parser. 065 * @exception IllegalArgumentException 066 * Thrown if the regular expression is unparseable. Should not be seen 067 * under normal conditions. It it is seen, this is a sign that 068 * <code>REGEX</code> is not a valid regular expression. 069 * @since 1.4 070 */ 071 public OS2FTPEntryParser(FTPClientConfig config) 072 { 073 super(REGEX); 074 configure(config); 075 } 076 077 /** 078 * Parses a line of an OS2 FTP server file listing and converts it into a 079 * usable format in the form of an <code> FTPFile </code> instance. If the 080 * file listing line doesn't describe a file, <code> null </code> is 081 * returned, otherwise a <code> FTPFile </code> instance representing the 082 * files in the directory is returned. 083 * <p> 084 * @param entry A line of text from the file listing 085 * @return An FTPFile instance corresponding to the supplied entry 086 */ 087 public FTPFile parseFTPEntry(String entry) 088 { 089 090 FTPFile f = new FTPFile(); 091 if (matches(entry)) 092 { 093 String size = group(1); 094 String attrib = group(2); 095 String dirString = group(3); 096 String datestr = group(4)+" "+group(5); 097 String name = group(6); 098 try 099 { 100 f.setTimestamp(super.parseTimestamp(datestr)); 101 } 102 catch (ParseException e) 103 { 104 return null; // this is a parsing failure too. 105 } 106 107 108 //is it a DIR or a file 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 //set the name 120 f.setName(name.trim()); 121 122 //set the size 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 }