14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/****************************************************************
24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one   *
34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * or more contributor license agreements.  See the NOTICE file *
44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed with this work for additional information        *
54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * regarding copyright ownership.  The ASF licenses this file   *
64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * to you under the Apache License, Version 2.0 (the            *
74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "License"); you may not use this file except in compliance   *
84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * with the License.  You may obtain a copy of the License at   *
94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *                                                              *
104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *   http://www.apache.org/licenses/LICENSE-2.0                 *
114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *                                                              *
124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing,   *
134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * software distributed under the License is distributed on an  *
144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * KIND, either express or implied.  See the License for the    *
164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * specific language governing permissions and limitations      *
174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * under the License.                                           *
184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira ****************************************************************/
194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.james.mime4j.field.address;
214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.util.ArrayList;
234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/**
254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Represents a single e-mail address.
264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class Mailbox extends Address {
304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	private DomainList route;
314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	private String localPart;
324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	private String domain;
334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Creates a mailbox without a route. Routes are obsolete.
364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @param localPart The part of the e-mail address to the left of the "@".
374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @param domain The part of the e-mail address to the right of the "@".
384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public Mailbox(String localPart, String domain) {
404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		this(null, localPart, domain);
414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Creates a mailbox with a route. Routes are obsolete.
454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @param route The zero or more domains that make up the route. Can be null.
464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @param localPart The part of the e-mail address to the left of the "@".
474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @param domain The part of the e-mail address to the right of the "@".
484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public Mailbox(DomainList route, String localPart, String domain) {
504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		this.route = route;
514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		this.localPart = localPart;
524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		this.domain = domain;
534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Returns the route list.
574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public DomainList getRoute() {
594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		return route;
604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Returns the left part of the e-mail address
644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * (before "@").
654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public String getLocalPart() {
674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		return localPart;
684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Returns the right part of the e-mail address
724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * (after "@").
734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public String getDomain() {
754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		return domain;
764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Formats the address as a string, not including
804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * the route.
814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @see #getAddressString(boolean)
834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public String getAddressString() {
854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		return getAddressString(false);
864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	/**
894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * Note that this value may not be usable
904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * for transport purposes, only display purposes.
914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * For example, if the unparsed address was
934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *   <"Joe Cheng"@joecheng.com>
954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * this method would return
974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *   <Joe Cheng@joecheng.com>
994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * which is not valid for transport; the local part
1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * would need to be re-quoted.
1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 *
1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 * @param includeRoute true if the route should be included if it exists.
1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	 */
1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public String getAddressString(boolean includeRoute) {
1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		return "<" + (!includeRoute || route == null ? "" : route.toRouteString() + ":")
1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira			+ localPart
1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira			+ (domain == null ? "" : "@")
1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira			+ domain + ">";
1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	@Override
1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	protected final void doAddMailboxesTo(ArrayList<Address> results) {
1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		results.add(this);
1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	@Override
1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	public String toString() {
1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira		return getAddressString();
1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	}
1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira}
122