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