001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.net.ftp.parser; 019 import java.text.ParseException; 020 021 import org.apache.commons.net.ftp.FTPClientConfig; 022 import org.apache.commons.net.ftp.FTPFile; 023 024 /** 025 * Implementation of FTPFileEntryParser and FTPFileListParser for OS2 Systems. 026 * 027 * @author <a href="Winston.Ojeda@qg.com">Winston Ojeda</a> 028 * @author <a href="mailto:scohen@apache.org">Steve Cohen</a> 029 * @version $Id: OS2FTPEntryParser.java 1299238 2012-03-10 17:12:28Z sebb $ 030 * @see org.apache.commons.net.ftp.FTPFileEntryParser FTPFileEntryParser (for usage instructions) 031 */ 032 public class OS2FTPEntryParser extends ConfigurableFTPFileEntryParserImpl 033 034 { 035 036 private static final String DEFAULT_DATE_FORMAT 037 = "MM-dd-yy HH:mm"; //11-09-01 12:30 038 /** 039 * this is the regular expression used by this parser. 040 */ 041 private static final String REGEX = 042 "\\s*([0-9]+)\\s*" 043 + "(\\s+|[A-Z]+)\\s*" 044 + "(DIR|\\s+)\\s*" 045 + "(\\S+)\\s+(\\S+)\\s+" /* date stuff */ 046 + "(\\S.*)"; 047 048 /** 049 * The default constructor for a OS2FTPEntryParser object. 050 * 051 * @exception IllegalArgumentException 052 * Thrown if the regular expression is unparseable. Should not be seen 053 * under normal conditions. It it is seen, this is a sign that 054 * <code>REGEX</code> is not a valid regular expression. 055 */ 056 public OS2FTPEntryParser() 057 { 058 this(null); 059 } 060 061 /** 062 * This constructor allows the creation of an OS2FTPEntryParser object 063 * with something other than the default configuration. 064 * 065 * @param config The {@link FTPClientConfig configuration} object used to 066 * configure this parser. 067 * @exception IllegalArgumentException 068 * Thrown if the regular expression is unparseable. Should not be seen 069 * under normal conditions. It it is seen, this is a sign that 070 * <code>REGEX</code> is not a valid regular expression. 071 * @since 1.4 072 */ 073 public OS2FTPEntryParser(FTPClientConfig config) 074 { 075 super(REGEX); 076 configure(config); 077 } 078 079 /** 080 * Parses a line of an OS2 FTP server file listing and converts it into a 081 * usable format in the form of an <code> FTPFile </code> instance. If the 082 * file listing line doesn't describe a file, <code> null </code> is 083 * returned, otherwise a <code> FTPFile </code> instance representing the 084 * files in the directory is returned. 085 * <p> 086 * @param entry A line of text from the file listing 087 * @return An FTPFile instance corresponding to the supplied entry 088 */ 089 public FTPFile parseFTPEntry(String entry) 090 { 091 092 FTPFile f = new FTPFile(); 093 if (matches(entry)) 094 { 095 String size = group(1); 096 String attrib = group(2); 097 String dirString = group(3); 098 String datestr = group(4)+" "+group(5); 099 String name = group(6); 100 try 101 { 102 f.setTimestamp(super.parseTimestamp(datestr)); 103 } 104 catch (ParseException e) 105 { 106 // intentionally do nothing 107 } 108 109 110 //is it a DIR or a file 111 if (dirString.trim().equals("DIR") || attrib.trim().equals("DIR")) 112 { 113 f.setType(FTPFile.DIRECTORY_TYPE); 114 } 115 else 116 { 117 f.setType(FTPFile.FILE_TYPE); 118 } 119 120 121 //set the name 122 f.setName(name.trim()); 123 124 //set the size 125 f.setSize(Long.parseLong(size.trim())); 126 127 return (f); 128 } 129 return null; 130 131 } 132 133 /** 134 * Defines a default configuration to be used when this class is 135 * instantiated without a {@link FTPClientConfig FTPClientConfig} 136 * parameter being specified. 137 * @return the default configuration for this parser. 138 */ 139 @Override 140 protected FTPClientConfig getDefaultConfiguration() { 141 return new FTPClientConfig( 142 FTPClientConfig.SYST_OS2, 143 DEFAULT_DATE_FORMAT, 144 null, null, null, null); 145 } 146 147 }