1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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 }