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  }