All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tools.ant.taskdefs.email.EmailAddress Maven / Gradle / Ivy

There is a newer version: 1.0-rc5
Show newest version
/*
 * Copyright  2002-2004 The Apache Software Foundation
 *
 *  Licensed 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
 *
 *      http://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
 */
public class EmailAddress {
    private String name;
    private String address;


    /** Creates an empty email address  */
    public EmailAddress() {
    }


    /**
     * Creates a new email address based on the given string
     *
     * @param email the email address (with or without <>)
     * Acceptable forms include:
     *    address
     *    
* name
*
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 "
" 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 */ private String trim(String t, boolean trimAngleBrackets) { int start = 0; int end = t.length(); boolean trim = false; 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 * * @param name the display name */ public void setName(String name) { this.name = name; } /** * Sets the email address * * @param address the actual email address (without <>) */ public void setAddress(String address) { this.address = address; } /** * Constructs a string "name <address>" or "address" * * @return a string representation of the address */ public String toString() { if (name == null) { return address; } else { return name + " <" + address + ">"; } } /** * Returns the address * * @return the address part */ public String getAddress() { return address; } /** * Returns the display name * * @return the display name part */ public String getName() { return name; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy