/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
package org.apache.tools.ant.taskdefs.email;

Holds an email address.
Since:Ant 1.5
/** * Holds an email address. * * @since Ant 1.5 */
public class EmailAddress { private String name; private String address;
Creates an empty email address
/** Creates an empty email address */
public EmailAddress() { }
Creates a new email address based on the given string
Params:
  • email – the email address (with or without <>) Acceptable forms include: address <address> name <address> <address> name (name) address address (name)
/** * Creates a new email address based on the given string * * @param email the email address (with or without &lt;&gt;) * Acceptable forms include: * address * &lt;address&gt; * name &lt;address&gt; * &lt;address&gt; name * (name) address * address (name) */
// Make a limited attempt to extract a sanitized name and email address // Algorithm based on the one found in Ant's MailMessage.java public EmailAddress(String email) { final int minLen = 9; int len = email.length(); // shortcut for "<address>" if (len > minLen) { if ((email.charAt(0) == '<' || email.charAt(1) == '<') && (email.charAt(len - 1) == '>' || email.charAt(len - 2) == '>')) { this.address = trim(email, true); return; } } int paramDepth = 0; int start = 0; int end = 0; int nStart = 0; int nEnd = 0; for (int i = 0; i < len; i++) { char c = email.charAt(i); if (c == '(') { paramDepth++; if (start == 0) { end = i; // support "address (name)" nStart = i + 1; } } else if (c == ')') { paramDepth--; if (end == 0) { start = i + 1; // support "(name) address" nEnd = i; } } else if (paramDepth == 0 && c == '<') { if (start == 0) { nEnd = i; } start = i + 1; } else if (paramDepth == 0 && c == '>') { end = i; if (end != len - 1) { nStart = i + 1; } } } // DEBUG: System.out.println(email); if (end == 0) { end = len; } // DEBUG: System.out.println("address: " + start + " " + end); if (nEnd == 0) { nEnd = len; } // DEBUG: System.out.println("name: " + nStart + " " + nEnd); this.address = trim(email.substring(start, end), true); this.name = trim(email.substring(nStart, nEnd), false); // if the two substrings are longer than the original, then name // contains address - so reset the name to null if (this.name.length() + this.address.length() > len) { this.name = null; } }
A specialised trim() that trims whitespace, '(', ')', '"', '<', '>' from the start and end of strings
/** * A specialised trim() that trims whitespace, * '(', ')', '"', '<', '>' from the start and end of strings */
private String trim(String t, boolean trimAngleBrackets) { int start = 0; int end = t.length(); boolean trim; do { trim = false; if (t.charAt(end - 1) == ')' || (t.charAt(end - 1) == '>' && trimAngleBrackets) || (t.charAt(end - 1) == '"' && t.charAt(end - 2) != '\\') || t.charAt(end - 1) <= '\u0020') { trim = true; end--; } if (t.charAt(start) == '(' || (t.charAt(start) == '<' && trimAngleBrackets) || t.charAt(start) == '"' || t.charAt(start) <= '\u0020') { trim = true; start++; } } while (trim); return t.substring(start, end); }
Sets the personal / display name of the address.
Params:
  • name – the display name
/** * Sets the personal / display name of the address. * * @param name the display name */
public void setName(String name) { this.name = name; }
Sets the email address.
Params:
  • address – the actual email address (without <>)
/** * Sets the email address. * * @param address the actual email address (without &lt;&gt;) */
public void setAddress(String address) { this.address = address; }
Constructs a string "name <address>" or "address"
Returns:a string representation of the address
/** * Constructs a string "name &lt;address&gt;" or "address" * * @return a string representation of the address */
@Override public String toString() { if (name == null) { return address; } return name + " <" + address + ">"; }
Returns the address
Returns:the address part
/** * Returns the address * * @return the address part */
public String getAddress() { return address; }
Returns the display name
Returns:the display name part
/** * Returns the display name * * @return the display name part */
public String getName() { return name; } }