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;
017    import java.io.BufferedReader;
018    import java.io.IOException;
019    import java.io.InputStream;
020    import java.util.Iterator;
021    import java.util.List;
022    
023    /**
024     * This abstract class implements both the older FTPFileListParser and
025     * newer FTPFileEntryParser interfaces with default functionality.
026     * All the classes in the parser subpackage inherit from this.
027     *
028     */
029    public abstract class FTPFileEntryParserImpl
030        implements FTPFileEntryParser, FTPFileListParser
031    {
032        /**
033         * The constructor for a FTPFileEntryParserImpl object.
034         */
035        public FTPFileEntryParserImpl()
036        {
037        }
038    
039    
040        /***
041         * Parses an FTP server file listing and converts it into a usable format
042         * in the form of an array of <code> FTPFile </code> instances.  If the
043         * file list contains no files, <code> null </code> should be
044         * returned, otherwise an array of <code> FTPFile </code> instances
045         * representing the files in the directory is returned.
046         * <p>
047         * @param listStream The InputStream from which the file list should be
048         *        read.
049         * @return The list of file information contained in the given path.  null
050         *     if the list could not be obtained or if there are no files in
051         *     the directory.
052         * @exception java.io.IOException  If an I/O error occurs reading the listStream.
053         ***/
054        public FTPFile[] parseFileList(InputStream listStream, String encoding) throws IOException
055        {
056            FTPFileList ffl = FTPFileList.create(listStream, this, encoding);
057            return ffl.getFiles();
058    
059        }
060        
061        /***
062         * Parses an FTP server file listing and converts it into a usable format
063         * in the form of an array of <code> FTPFile </code> instances.  If the
064         * file list contains no files, <code> null </code> should be
065         * returned, otherwise an array of <code> FTPFile </code> instances
066         * representing the files in the directory is returned.
067         * <p>
068         * @param listStream The InputStream from which the file list should be
069         *        read.
070         * @return The list of file information contained in the given path.  null
071         *     if the list could not be obtained or if there are no files in
072         *     the directory.
073         * @exception java.io.IOException  If an I/O error occurs reading the listStream.
074         *
075         * @deprecated The version of this method which takes an encoding should be used.
076        ***/
077        public FTPFile[] parseFileList(InputStream listStream) throws IOException
078        {
079            return parseFileList(listStream, null);
080        }
081    
082        /**
083         * Reads the next entry using the supplied BufferedReader object up to
084         * whatever delemits one entry from the next.  This default implementation
085         * simply calls BufferedReader.readLine().
086         *
087         * @param reader The BufferedReader object from which entries are to be
088         * read.
089         *
090         * @return A string representing the next ftp entry or null if none found.
091         * @exception java.io.IOException thrown on any IO Error reading from the reader.
092         */
093        public String readNextEntry(BufferedReader reader) throws IOException
094        {
095            return reader.readLine();
096        }
097        /**
098         * This method is a hook for those implementors (such as
099         * VMSVersioningFTPEntryParser, and possibly others) which need to
100         * perform some action upon the FTPFileList after it has been created
101         * from the server stream, but before any clients see the list.
102         *
103         * This default implementation is a no-op.
104         *
105         * @param original Original list after it has been created from the server stream
106         *
107         * @return <code>original</code> unmodified.
108         */
109         public List preParse(List original) {
110             Iterator it = original.iterator();
111             while (it.hasNext()){
112                String entry = (String) it.next();
113                if (null == parseFTPEntry(entry)) {
114                    it.remove();
115                } else {
116                    break;
117                }
118             }
119             return original;
120         }
121    }
122    
123    /* Emacs configuration
124     * Local variables:        **
125     * mode:             java  **
126     * c-basic-offset:   4     **
127     * indent-tabs-mode: nil   **
128     * End:                    **
129     */