rwinston    2004/12/03 06:47:46

  Modified:    net/src/java/org/apache/commons/net/ftp FTPClient.java
                        FTPFileEntryParserImpl.java FTPFileList.java
                        FTPFileListParser.java FTPListParseEngine.java
  Log:
  Update FTPClient code to use the user-specified encoding throughout the 
entire FTPClient codebase. These changes are taken from the patch for PR 30719. 
The next candidate for updating is any/all instances of String.getBytes() that 
don;'t pass the encoding.
  
  Revision  Changes    Path
  1.46      +3 -3      
jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPClient.java
  
  Index: FTPClient.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPClient.java,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- FTPClient.java    23 Nov 2004 19:57:12 -0000      1.45
  +++ FTPClient.java    3 Dec 2004 14:47:46 -0000       1.46
  @@ -1945,7 +1945,7 @@
               return null;
   
           reader =
  -            new BufferedReader(new 
InputStreamReader(socket.getInputStream()));
  +            new BufferedReader(new 
InputStreamReader(socket.getInputStream(), getControlEncoding()));
   
           results = new Vector();
           while ((line = reader.readLine()) != null)
  @@ -2359,7 +2359,7 @@
           }
   
   
  -        engine.readServerList(socket.getInputStream());
  +        engine.readServerList(socket.getInputStream(), getControlEncoding());
   
           socket.close();
   
  @@ -2454,7 +2454,7 @@
           if ((socket = _openDataConnection_(FTPCommand.LIST, pathname)) == 
null)
               return new FTPFile[0];
   
  -        results = parser.parseFileList(socket.getInputStream());
  +        results = parser.parseFileList(socket.getInputStream(), 
getControlEncoding());
   
           socket.close();
   
  
  
  
  1.9       +23 -2     
jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java
  
  Index: FTPFileEntryParserImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FTPFileEntryParserImpl.java       22 Apr 2004 00:48:07 -0000      1.8
  +++ FTPFileEntryParserImpl.java       3 Dec 2004 14:47:46 -0000       1.9
  @@ -52,11 +52,32 @@
        *     the directory.
        * @exception java.io.IOException  If an I/O error occurs reading the 
listStream.
        ***/
  -    public FTPFile[] parseFileList(InputStream listStream) throws IOException
  +    public FTPFile[] parseFileList(InputStream listStream, String encoding) 
throws IOException
       {
  -        FTPFileList ffl = FTPFileList.create(listStream, this);
  +        FTPFileList ffl = FTPFileList.create(listStream, this, encoding);
           return ffl.getFiles();
   
  +    }
  +    
  +    /***
  +     * Parses an FTP server file listing and converts it into a usable format
  +     * in the form of an array of <code> FTPFile </code> instances.  If the
  +     * file list contains no files, <code> null </code> should be
  +     * returned, otherwise an array of <code> FTPFile </code> instances
  +     * representing the files in the directory is returned.
  +     * <p>
  +     * @param listStream The InputStream from which the file list should be
  +     *        read.
  +     * @return The list of file information contained in the given path.  
null
  +     *     if the list could not be obtained or if there are no files in
  +     *     the directory.
  +     * @exception java.io.IOException  If an I/O error occurs reading the 
listStream.
  +     *
  +     * @deprecated The version of this method which takes an encoding should 
be used.
  +    ***/
  +    public FTPFile[] parseFileList(InputStream listStream) throws IOException
  +    {
  +     return parseFileList(listStream, null);
       }
   
       /**
  
  
  
  1.14      +56 -8     
jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileList.java
  
  Index: FTPFileList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileList.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- FTPFileList.java  21 Apr 2004 23:30:33 -0000      1.13
  +++ FTPFileList.java  3 Dec 2004 14:47:46 -0000       1.14
  @@ -65,8 +65,9 @@
        *
        * @param parser a <code>FTPFileEntryParser</code> value that knows
        * how to parse the entries returned by a particular FTP site.
  +     * @param encoding The encoding to use.
        */
  -    private FTPFileList (FTPFileEntryParser parser)
  +    private FTPFileList (FTPFileEntryParser parser, String encoding)
       {
           this.parser = parser;
           this.lines = new LinkedList();
  @@ -82,6 +83,7 @@
        * the output of the LIST command was returned
        * @param parser the default <code>FTPFileEntryParser</code> to be used
        * by this object.  This may later be changed using the init() method.
  +     * @param encoding The encoding to use
        *
        * @return the <code>FTPFileList</code> created, with an initialized
        * of unparsed lines of output.  Will be null if the listing cannot
  @@ -90,26 +92,55 @@
        *                   Thrown on any failure to read from the socket.
        */
       public static FTPFileList create(InputStream stream,
  -                                      FTPFileEntryParser parser)
  +                                      FTPFileEntryParser parser,
  +                                                                       
String encoding)
               throws IOException
       {
  -        FTPFileList list = new FTPFileList(parser);
  -        list.readStream(stream);
  +        FTPFileList list = new FTPFileList(parser, encoding);
  +        list.readStream(stream, encoding);
           parser.preParse(list.lines);
           return list;
       }
  +    
  +    /**
  +     * The only way to create an <code>FTPFileList</code> object.  Invokes
  +     * the private constructor and then reads the stream  supplied stream to
  +     * build the intermediate array of "lines" which will later be parsed
  +     * into <code>FTPFile</code> object.
  +     *
  +     * @param stream The input stream created by reading the socket on which
  +     * the output of the LIST command was returned
  +     * @param parser the default <code>FTPFileEntryParser</code> to be used
  +     * by this object.  This may later be changed using the init() method.
  +     *
  +     * @return the <code>FTPFileList</code> created, with an initialized
  +     * of unparsed lines of output.  Will be null if the listing cannot
  +     * be read from the stream.
  +     * @exception IOException
  +     *                   Thrown on any failure to read from the socket.
  +     *
  +     * @deprecated The version of this method which takes an encoding should 
be used.
  +    */
  +    public static FTPFileList create(InputStream stream, 
  +                                                               
FTPFileEntryParser parser)
  +     throws IOException
  +    {
  +     return create(stream, parser, null);
  +    }
  +    
  +    
   
       /**
        * internal method for reading the input into the <code>lines</code> 
vector.
        *
        * @param stream The socket stream on which the input will be read.
  +     * @param encoding The encoding to use.
        *
        * @exception IOException thrown on any failure to read the stream
        */
  -    public void readStream(InputStream stream) throws IOException
  +    public void readStream(InputStream stream, String encoding) throws 
IOException
       {
  -        BufferedReader reader =
  -            new BufferedReader(new InputStreamReader(stream));
  +        BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, encoding));
   
           String line = this.parser.readNextEntry(reader);
   
  @@ -120,6 +151,21 @@
           }
           reader.close();
       }
  +    
  +    /**
  +      * internal method for reading the input into the <code>lines</code> 
vector.
  +      *
  +      * @param stream The socket stream on which the input will be read.
  +      *
  +      * @exception IOException thrown on any failure to read the stream
  +      *
  +      * @deprecated The version of this method which takes an encoding 
should be used.
  +     */
  +     public void readStream(InputStream stream) throws IOException
  +     {
  +      readStream(stream, null);
  +     }
  +      
   
       /**
        * Accessor for this object's default parser.
  @@ -177,6 +223,8 @@
       {
           return iterator().getFiles();
       }
  +    
  +
   
   }
   
  
  
  
  1.13      +17 -0     
jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileListParser.java
  
  Index: FTPFileListParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileListParser.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FTPFileListParser.java    29 Jun 2004 02:16:33 -0000      1.12
  +++ FTPFileListParser.java    3 Dec 2004 14:47:46 -0000       1.13
  @@ -45,6 +45,23 @@
        * <p>
        * @param listStream The InputStream from which the file list should be
        *        read.
  +     * @param encoding The encoding to use.
  +     * @return The list of file information contained in the given path.  
null
  +     *     if the list could not be obtained or if there are no files in
  +     *     the directory.
  +     * @exception IOException  If an I/O error occurs reading the listStream.
  +     ***/
  +    FTPFile[] parseFileList(InputStream listStream, String encoding) throws 
IOException;
  +    
  +    /***
  +     * Parses an FTP server file listing and converts it into a usable format
  +     * in the form of an array of <code> FTPFile </code> instances.  If the
  +     * file list contains no files, <code> null </code> should be
  +     * returned, otherwise an array of <code> FTPFile </code> instances
  +     * representing the files in the directory is returned.
  +     * <p>
  +     * @param listStream The InputStream from which the file list should be
  +     *        read.
        * @return The list of file information contained in the given path.  
null
        *     if the list could not be obtained or if there are no files in
        *     the directory.
  
  
  
  1.9       +34 -7     
jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPListParseEngine.java
  
  Index: FTPListParseEngine.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPListParseEngine.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FTPListParseEngine.java   15 Sep 2004 02:24:04 -0000      1.8
  +++ FTPListParseEngine.java   3 Dec 2004 14:47:46 -0000       1.9
  @@ -91,14 +91,34 @@
        * @exception IOException
        *                   thrown on any failure to read from the sever.
        */
  -    public void readServerList(InputStream stream)
  +    public void readServerList(InputStream stream, String encoding)
       throws IOException
       {
           this.entries = new LinkedList();
  -        readStream(stream);
  +        readStream(stream, encoding);
           this.parser.preParse(this.entries);
           resetIterator();
       }
  +    
  +    /**
  +      * handle the iniitial reading and preparsing of the list returned by
  +      * the server.  After this method has completed, this object will 
contain
  +      * a list of unparsed entries (Strings) each referring to a unique file
  +      * on the server.
  +      *
  +      * @param stream input stream provided by the server socket.
  +      *
  +      * @exception IOException
  +      *                   thrown on any failure to read from the sever.
  +      *
  +      * @deprecated The version of this method which takes an encoding 
should be used.
  +     */
  +     public void readServerList(InputStream stream)
  +     throws IOException
  +     {
  +             readServerList(stream, null);
  +     }
  +     
   
   
       /**
  @@ -114,11 +134,18 @@
        * @exception IOException
        *                   thrown on any failure to read the stream
        */
  -    private void readStream(InputStream stream) throws IOException
  +    private void readStream(InputStream stream, String encoding) throws 
IOException
       {
  -        BufferedReader reader =
  -            new BufferedReader(new InputStreamReader(stream));
  -
  +     BufferedReader reader;
  +     if (encoding == null)
  +     {
  +             reader = new BufferedReader(new InputStreamReader(stream));
  +     }
  +     else
  +     {
  +             reader = new BufferedReader(new InputStreamReader(stream, 
encoding));
  +     }
  +     
           String line = this.parser.readNextEntry(reader);
   
           while (line != null)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to