View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.net.ftp.parser;
19  
20  import java.text.ParseException;
21  import java.util.Calendar;
22  
23  import org.apache.commons.net.ftp.Configurable;
24  import org.apache.commons.net.ftp.FTPClientConfig;
25  
26  
27  /**
28   * <p>
29   * This abstract class implements the common timestamp parsing
30   * algorithm for all the concrete parsers.  Classes derived from
31   * this one will parse file listings via a supplied regular expression
32   * that pulls out the date portion as a separate string which is
33   * passed to the underlying {@link FTPTimestampParser delegate} to
34   * handle parsing of the file timestamp.
35   * </p><p>
36   * This class also implements the {@link Configurable Configurable}
37   * interface to allow the parser to be configured from the outside.
38   * </p>
39   * @since 1.4
40   */
41  /**
42   * To change the template for this generated type comment go to
43   * Window - Preferences - Java - Code Style - Code Templates - Comments
44   */
45  public abstract class ConfigurableFTPFileEntryParserImpl
46  extends RegexFTPFileEntryParserImpl
47  implements Configurable
48  {
49  
50      private final FTPTimestampParser timestampParser;
51  
52      /**
53       * Only constructor for this abstract class.
54       * @param regex  Regular expression used main parsing of the
55       * file listing.
56       */
57      public ConfigurableFTPFileEntryParserImpl(String regex)
58      {
59          super(regex);
60          this.timestampParser = new FTPTimestampParserImpl();
61      }
62  
63      /**
64       * This method is called by the concrete parsers to delegate
65       * timestamp parsing to the timestamp parser.
66       * <p>
67       * @param timestampStr the timestamp string pulled from the
68       * file listing by the regular expression parser, to be submitted
69       * to the <code>timestampParser</code> for extracting the timestamp.
70       * @return a <code>java.util.Calendar</code> containing results of the
71       * timestamp parse.
72       */
73      public Calendar parseTimestamp(String timestampStr) throws ParseException {
74          return this.timestampParser.parseTimestamp(timestampStr);
75      }
76  
77  
78      /**
79       * Implementation of the {@link  Configurable  Configurable}
80       * interface. Configures this parser by delegating to the
81       * underlying Configurable FTPTimestampParser implementation, '
82       * passing it the supplied {@link  FTPClientConfig FTPClientConfig}
83       * if that is non-null or a default configuration defined by
84       * each concrete subclass.
85       *
86       * @param config the configuration to be used to configure this parser.
87       * If it is null, a default configuration defined by
88       * each concrete subclass is used instead.
89       */
90  //    @Override
91      public void configure(FTPClientConfig config)
92      {
93          if (this.timestampParser instanceof Configurable) {
94              FTPClientConfig defaultCfg = getDefaultConfiguration();
95              if (config != null) {
96                  if (null == config.getDefaultDateFormatStr()) {
97                      config.setDefaultDateFormatStr(defaultCfg.getDefaultDateFormatStr());
98                  }
99                  if (null == config.getRecentDateFormatStr()) {
100                     config.setRecentDateFormatStr(defaultCfg.getRecentDateFormatStr());
101                 }
102                 ((Configurable)this.timestampParser).configure(config);
103             } else {
104                 ((Configurable)this.timestampParser).configure(defaultCfg);
105             }
106         }
107     }
108 
109     /**
110      * Each concrete subclass must define this member to create
111      * a default configuration to be used when that subclass is
112      * instantiated without a {@link  FTPClientConfig  FTPClientConfig}
113      * parameter being specified.
114      * @return the default configuration for the subclass.
115      */
116     protected abstract FTPClientConfig getDefaultConfiguration();
117 }