FileDocCategorySizeDatePackage
EmailAddress.javaAPI DocApache Ant 1.705554Wed Dec 13 06:16:20 GMT 2006org.apache.tools.ant.taskdefs.email

EmailAddress

public class EmailAddress extends Object
Holds an email address.
since
Ant 1.5

Fields Summary
private String
name
private String
address
Constructors Summary
public EmailAddress()
Creates an empty email address

    
public EmailAddress(String email)
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)

        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;
        }
    
Methods Summary
public java.lang.StringgetAddress()
Returns the address

return
the address part

        return address;
    
public java.lang.StringgetName()
Returns the display name

return
the display name part

        return name;
    
public voidsetAddress(java.lang.String address)
Sets the email address

param
address the actual email address (without <>)

        this.address = address;
    
public voidsetName(java.lang.String name)
Sets the personal / display name of the address

param
name the display name

        this.name = name;
    
public java.lang.StringtoString()
Constructs a string "name <address>" or "address"

return
a string representation of the address

        if (name == null) {
            return address;
        } else {
            return name + " <" + address + ">";
        }
    
private java.lang.Stringtrim(java.lang.String t, boolean trimAngleBrackets)
A specialised trim() that trims whitespace, '(', ')', '"', '<', '>' from the start and end of strings

        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);