View Javadoc

    1   /*
    2    * Copyright 2004 The Apache Software Foundation
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *     http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  package org.apache.commons.net.ftp.parser;
    17
    18  import org.apache.commons.net.ftp.FTPFile;
    19  import org.apache.commons.net.ftp.FTPFileEntryParser;
    20  import org.apache.commons.net.ftp.FTPFileEntryParserImpl;
    21
    22  /***
    23   * This implementation allows to pack some FileEntryParsers together
    24   * and handle the case where to returned dirstyle isnt clearly defined.
    25   * The matching parser will be cached.
    26   * If the cached parser wont match due to the server changed the dirstyle,
    27   * a new matching parser will be searched.
    28   *
    29   * @author Mario Ivankovits <mario@ops.co.at>
    30   */
    31  public class CompositeFileEntryParser extends FTPFileEntryParserImpl
    32  {
    33      private final FTPFileEntryParser[] ftpFileEntryParsers;
    34      private FTPFileEntryParser cachedFtpFileEntryParser;
    35
    36      public CompositeFileEntryParser(FTPFileEntryParser[] ftpFileEntryParsers)
    37      {
    38          super();
    39
    40          this.cachedFtpFileEntryParser = null;
    41          this.ftpFileEntryParsers = ftpFileEntryParsers;
    42      }
    43
    44      public FTPFile parseFTPEntry(String listEntry)
    45      {
    46          if (cachedFtpFileEntryParser != null)
    47          {
    48              FTPFile matched = cachedFtpFileEntryParser.parseFTPEntry(listEntry);
    49              if (matched != null)
    50              {
    51                  return matched;
    52              }
    53          }
    54          else
    55          {
    56              for (int iterParser=0; iterParser < ftpFileEntryParsers.length; iterParser++)
    57              {
    58                  FTPFileEntryParser ftpFileEntryParser = ftpFileEntryParsers[iterParser];
    59
    60                  FTPFile matched = ftpFileEntryParser.parseFTPEntry(listEntry);
    61                  if (matched != null)
    62                  {
    63                      cachedFtpFileEntryParser = ftpFileEntryParser;
    64                      return matched;
    65                  }
    66              }
    67          }
    68          return null;
    69      }
    70  }