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 org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.james.mime4j.field.address.AddressList;
25 import org.apache.james.mime4j.field.address.parser.ParseException;
26 import org.apache.james.mime4j.util.ByteSequence;
27
28 /**
29 * Address list field such as <code>To</code> or <code>Reply-To</code>.
30 */
31 public class AddressListField extends AbstractField {
32 private static Log log = LogFactory.getLog(AddressListField.class);
33
34 private boolean parsed = false;
35
36 private AddressList addressList;
37 private ParseException parseException;
38
39 AddressListField(String name, String body, ByteSequence raw) {
40 super(name, body, raw);
41 }
42
43 public AddressList getAddressList() {
44 if (!parsed)
45 parse();
46
47 return addressList;
48 }
49
50 @Override
51 public ParseException getParseException() {
52 if (!parsed)
53 parse();
54
55 return parseException;
56 }
57
58 private void parse() {
59 String body = getBody();
60
61 try {
62 addressList = AddressList.parse(body);
63 } catch (ParseException e) {
64 if (log.isDebugEnabled()) {
65 log.debug("Parsing value '" + body + "': " + e.getMessage());
66 }
67 parseException = e;
68 }
69
70 parsed = true;
71 }
72
73 static final FieldParser PARSER = new FieldParser() {
74 public ParsedField parse(final String name, final String body,
75 final ByteSequence raw) {
76 return new AddressListField(name, body, raw);
77 }
78 };
79 }