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
20package org.apache.james.mime4j.field.address;
21
22import java.util.ArrayList;
23
24/**
25 * Represents a single e-mail address.
26 *
27 *
28 */
29public class Mailbox extends Address {
30	private DomainList route;
31	private String localPart;
32	private String domain;
33
34	/**
35	 * Creates a mailbox without a route. Routes are obsolete.
36	 * @param localPart The part of the e-mail address to the left of the "@".
37	 * @param domain The part of the e-mail address to the right of the "@".
38	 */
39	public Mailbox(String localPart, String domain) {
40		this(null, localPart, domain);
41	}
42
43	/**
44	 * Creates a mailbox with a route. Routes are obsolete.
45	 * @param route The zero or more domains that make up the route. Can be null.
46	 * @param localPart The part of the e-mail address to the left of the "@".
47	 * @param domain The part of the e-mail address to the right of the "@".
48	 */
49	public Mailbox(DomainList route, String localPart, String domain) {
50		this.route = route;
51		this.localPart = localPart;
52		this.domain = domain;
53	}
54
55	/**
56	 * Returns the route list.
57	 */
58	public DomainList getRoute() {
59		return route;
60	}
61
62	/**
63	 * Returns the left part of the e-mail address
64	 * (before "@").
65	 */
66	public String getLocalPart() {
67		return localPart;
68	}
69
70	/**
71	 * Returns the right part of the e-mail address
72	 * (after "@").
73	 */
74	public String getDomain() {
75		return domain;
76	}
77
78	/**
79	 * Formats the address as a string, not including
80	 * the route.
81	 *
82	 * @see #getAddressString(boolean)
83	 */
84	public String getAddressString() {
85		return getAddressString(false);
86	}
87
88	/**
89	 * Note that this value may not be usable
90	 * for transport purposes, only display purposes.
91	 *
92	 * For example, if the unparsed address was
93	 *
94	 *   <"Joe Cheng"@joecheng.com>
95	 *
96	 * this method would return
97	 *
98	 *   <Joe Cheng@joecheng.com>
99	 *
100	 * which is not valid for transport; the local part
101	 * would need to be re-quoted.
102	 *
103	 * @param includeRoute true if the route should be included if it exists.
104	 */
105	public String getAddressString(boolean includeRoute) {
106		return "<" + (!includeRoute || route == null ? "" : route.toRouteString() + ":")
107			+ localPart
108			+ (domain == null ? "" : "@")
109			+ domain + ">";
110	}
111
112	@Override
113	protected final void doAddMailboxesTo(ArrayList<Address> results) {
114		results.add(this);
115	}
116
117	@Override
118	public String toString() {
119		return getAddressString();
120	}
121}
122