~ubuntu-branches/ubuntu/saucy/apache-mime4j/saucy

« back to all changes in this revision

Viewing changes to src/main/java/org/apache/james/mime4j/field/DateTimeField.java

  • Committer: Bazaar Package Importer
  • Author(s): David Paleino
  • Date: 2010-07-13 09:28:28 UTC
  • Revision ID: james.westby@ubuntu.com-20100713092828-g6wafdtidgmtx7su
Tags: upstream-0.6
ImportĀ upstreamĀ versionĀ 0.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************
 
2
 * Licensed to the Apache Software Foundation (ASF) under one   *
 
3
 * or more contributor license agreements.  See the NOTICE file *
 
4
 * distributed with this work for additional information        *
 
5
 * regarding copyright ownership.  The ASF licenses this file   *
 
6
 * to you under the Apache License, Version 2.0 (the            *
 
7
 * "License"); you may not use this file except in compliance   *
 
8
 * with the License.  You may obtain a copy of the License at   *
 
9
 *                                                              *
 
10
 *   http://www.apache.org/licenses/LICENSE-2.0                 *
 
11
 *                                                              *
 
12
 * Unless required by applicable law or agreed to in writing,   *
 
13
 * software distributed under the License is distributed on an  *
 
14
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
 
15
 * KIND, either express or implied.  See the License for the    *
 
16
 * specific language governing permissions and limitations      *
 
17
 * under the License.                                           *
 
18
 ****************************************************************/
 
19
 
 
20
package org.apache.james.mime4j.field;
 
21
 
 
22
import java.io.StringReader;
 
23
import java.util.Date;
 
24
 
 
25
import org.apache.commons.logging.Log;
 
26
import org.apache.commons.logging.LogFactory;
 
27
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
 
28
import org.apache.james.mime4j.field.datetime.parser.ParseException;
 
29
import org.apache.james.mime4j.field.datetime.parser.TokenMgrError;
 
30
import org.apache.james.mime4j.util.ByteSequence;
 
31
 
 
32
/**
 
33
 * Date-time field such as <code>Date</code> or <code>Resent-Date</code>.
 
34
 */
 
35
public class DateTimeField extends AbstractField {
 
36
    private static Log log = LogFactory.getLog(DateTimeField.class);
 
37
 
 
38
    private boolean parsed = false;
 
39
 
 
40
    private Date date;
 
41
    private ParseException parseException;
 
42
 
 
43
    DateTimeField(String name, String body, ByteSequence raw) {
 
44
        super(name, body, raw);
 
45
    }
 
46
 
 
47
    public Date getDate() {
 
48
        if (!parsed)
 
49
            parse();
 
50
 
 
51
        return date;
 
52
    }
 
53
 
 
54
    @Override
 
55
    public ParseException getParseException() {
 
56
        if (!parsed)
 
57
            parse();
 
58
 
 
59
        return parseException;
 
60
    }
 
61
 
 
62
    private void parse() {
 
63
        String body = getBody();
 
64
 
 
65
        try {
 
66
            date = new DateTimeParser(new StringReader(body)).parseAll()
 
67
                    .getDate();
 
68
        } catch (ParseException e) {
 
69
            if (log.isDebugEnabled()) {
 
70
                log.debug("Parsing value '" + body + "': " + e.getMessage());
 
71
            }
 
72
            parseException = e;
 
73
        } catch (TokenMgrError e) {
 
74
            if (log.isDebugEnabled()) {
 
75
                log.debug("Parsing value '" + body + "': " + e.getMessage());
 
76
            }
 
77
            parseException = new ParseException(e.getMessage());
 
78
        }
 
79
 
 
80
        parsed = true;
 
81
    }
 
82
 
 
83
    static final FieldParser PARSER = new FieldParser() {
 
84
        public ParsedField parse(final String name, final String body,
 
85
                final ByteSequence raw) {
 
86
            return new DateTimeField(name, body, raw);
 
87
        }
 
88
    };
 
89
}