007a29a72d552d778243fdf93309f4a0ed916765
[jalview.git] / srcjar2 / org / apache / log4j / pattern / RelativeTimePatternConverter.java
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.log4j.pattern;
19
20 import org.apache.log4j.spi.LoggingEvent;
21
22
23 /**
24  * Return the relative time in milliseconds since loading of the LoggingEvent
25  * class.
26  *
27  * @author Ceki Gülcü
28  */
29 public class RelativeTimePatternConverter extends LoggingEventPatternConverter {
30   /**
31    * Cached formatted timestamp.
32    */
33   private CachedTimestamp lastTimestamp = new CachedTimestamp(0, "");
34
35   /**
36    * Private constructor.
37    */
38   public RelativeTimePatternConverter() {
39     super("Time", "time");
40   }
41
42   /**
43    * Obtains an instance of RelativeTimePatternConverter.
44    * @param options options, currently ignored, may be null.
45    * @return instance of RelativeTimePatternConverter.
46    */
47   public static RelativeTimePatternConverter newInstance(
48     final String[] options) {
49     return new RelativeTimePatternConverter();
50   }
51
52   /**
53    * {@inheritDoc}
54    */
55   public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
56     long timestamp = event.timeStamp;
57
58     if (!lastTimestamp.format(timestamp, toAppendTo)) {
59       final String formatted =
60         Long.toString(timestamp - LoggingEvent.getStartTime());
61       toAppendTo.append(formatted);
62       lastTimestamp = new CachedTimestamp(timestamp, formatted);
63     }
64   }
65
66   /**
67    * Cached timestamp and formatted value.
68    */
69   private static final class CachedTimestamp {
70     /**
71      * Cached timestamp.
72      */
73     private final long timestamp;
74
75     /**
76      * Cached formatted timestamp.
77      */
78     private final String formatted;
79
80     /**
81      * Creates a new instance.
82      * @param timestamp timestamp.
83      * @param formatted formatted timestamp.
84      */
85     public CachedTimestamp(long timestamp, final String formatted) {
86       this.timestamp = timestamp;
87       this.formatted = formatted;
88     }
89
90     /**
91      * Appends the cached formatted timestamp to the buffer if timestamps match.
92      * @param newTimestamp requested timestamp.
93      * @param toAppendTo buffer to append formatted timestamp.
94      * @return true if requested timestamp matched cached timestamp.
95      */
96     public boolean format(long newTimestamp, final StringBuffer toAppendTo) {
97       if (newTimestamp == timestamp) {
98         toAppendTo.append(formatted);
99
100         return true;
101       }
102
103       return false;
104     }
105   }
106 }