View Javadoc

1   /**
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2011, QOS.ch. All rights reserved.
4    *
5    * This program and the accompanying materials are dual-licensed under
6    * either the terms of the Eclipse Public License v1.0 as published by
7    * the Eclipse Foundation
8    *
9    *   or (per the licensee's choosing)
10   *
11   * under the terms of the GNU Lesser General Public License version 2.1
12   * as published by the Free Software Foundation.
13   */
14  package ch.qos.logback.core.rolling.helper;
15  
16  import java.text.SimpleDateFormat;
17  import java.util.ArrayList;
18  import java.util.List;
19  
20  /**
21   * This class is concerned with computing a regex corresponding to a date
22   * pattern (in {@link SimpleDateFormat} format).
23   * 
24   * @author Ceki Gülcü
25   * 
26   */
27  public class DatePatternToRegexUtil {
28  
29    final String datePattern;
30    final int length;
31  
32    DatePatternToRegexUtil(String datePattern) {
33      this.datePattern = datePattern;
34      length = datePattern.length();
35    }
36  
37    String toRegex() {
38      List<SequenceToRegex4SDF> sequenceList = tokenize();
39      StringBuilder sb = new StringBuilder();
40      for (SequenceToRegex4SDF seq : sequenceList) {
41        sb.append(seq.toRegex());
42      }
43      return sb.toString();
44    }
45  
46    private List<SequenceToRegex4SDF> tokenize() {
47      List<SequenceToRegex4SDF> sequenceList = new ArrayList<SequenceToRegex4SDF>();
48      SequenceToRegex4SDF sequence = null;
49      for (int i = 0; i < length; i++) {
50        char t = datePattern.charAt(i);
51        if (sequence == null || sequence.c != t) {
52          sequence = addNewSequence(sequenceList, t);
53        } else {
54          sequence.inc();
55        }
56      }
57      return sequenceList;
58    }
59  
60    SequenceToRegex4SDF addNewSequence(List<SequenceToRegex4SDF> sequenceList,
61        char t) {
62      SequenceToRegex4SDF token = new SequenceToRegex4SDF(t);
63      sequenceList.add(token);
64      return token;
65    }
66  }