001: /*
002: * Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
003: * Reserved. Use is subject to license terms.
004: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
005: *
006: * This program is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License version
008: * 2 only, as published by the Free Software Foundation.
009: *
010: * This program is distributed in the hope that it will be useful, but
011: * WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * General Public License version 2 for more details (a copy is
014: * included at /legal/license.txt).
015: *
016: * You should have received a copy of the GNU General Public License
017: * version 2 along with this work; if not, write to the Free Software
018: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
019: * 02110-1301 USA
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
022: * Clara, CA 95054 or visit www.sun.com if you need additional
023: * information or have any questions.
024: */
025: package gov.nist.javax.sdp.parser;
026:
027: import gov.nist.javax.sdp.fields.*;
028: import gov.nist.core.*;
029:
030: /**
031: * Parser for Email Field.
032: *
033: * @version JAIN-SIP-1.1
034: *
035: *
036: * <a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a>
037: *
038: */
039: public class EmailFieldParser extends SDPParser {
040:
041: /**
042: * Creates new EmailFieldParser.
043: * @param emailField the email field to be parsed
044: */
045: public EmailFieldParser(String emailField) {
046: lexer = new Lexer("charLexer", emailField);
047: }
048:
049: /** Default constructor. */
050: protected EmailFieldParser() {
051: super ();
052: }
053:
054: /**
055: * Gets the user friendly display name.
056: * @param rest the remaining string to be parsed
057: * @return the display name
058: */
059: public String getDisplayName(String rest) {
060: String retval = null;
061:
062: int begin = rest.indexOf("(");
063: int end = rest.indexOf(")");
064:
065: if (begin != -1 && end != -1 && end > begin) {
066: // e=mjh@isi.edu (Mark Handley)
067: retval = rest.substring(begin + 1, end);
068: } else {
069: // The alternative RFC822 name quoting convention
070: // is also allowed for
071: // email addresses. ex: e=Mark Handley <mjh@isi.edu>
072: begin = rest.indexOf("<");
073: if (begin != -1) {
074: retval = rest.substring(0, begin);
075: } else {
076: // There is no display name !!!
077: }
078: }
079: return retval;
080: }
081:
082: /**
083: * Gets the email address.
084: * @param rest the remaining string to be parsed
085: * @return the email address
086: */
087: public Email getEmail(String rest) {
088: Email email = new Email();
089:
090: int begin = rest.indexOf("(");
091: try {
092: if (begin != -1) {
093: // e=mjh@isi.edu (Mark Handley)
094: String emailTemp = rest.substring(0, begin);
095: int i = emailTemp.indexOf("@");
096: if (i != -1) {
097: email.setUserName(emailTemp.substring(0, i));
098: email.setHostName(emailTemp.substring(i + 1));
099: } else {
100: // Pb: the email is not well formatted
101: }
102: } else {
103: // The alternative RFC822 name quoting convention is
104: // also allowed for
105: // email addresses. ex: e=Mark Handley <mjh@isi.edu>
106: int ind = rest.indexOf("<");
107: int end = rest.indexOf(">");
108:
109: if (ind != -1) {
110: String emailTemp = rest.substring(ind + 1, end);
111: int i = emailTemp.indexOf("@");
112: if (i != -1) {
113: email.setUserName(emailTemp.substring(0, i));
114: email.setHostName(emailTemp.substring(i + 1));
115: } else {
116: // Pb: the email is not well formatted
117: }
118:
119: } else {
120: int i = rest.indexOf("@");
121: int j = rest.indexOf("\n");
122: if (i != -1) {
123: email.setUserName(rest.substring(0, i));
124: email.setHostName(rest.substring(i + 1, j));
125: } else {
126: // Pb: the email is not well formatted
127: }
128: }
129: }
130: return email;
131: } catch (IndexOutOfBoundsException iobe) {
132: return new Email();
133: }
134: }
135:
136: /**
137: * Perform the email address field parsing
138: * @return the parsed email address field
139: * @exception ParseException if a parsing error occurs
140: */
141: public EmailField emailField() throws ParseException {
142: lexer.match('e');
143: lexer.SPorHT();
144: lexer.match('=');
145: lexer.SPorHT();
146:
147: EmailField emailField = new EmailField();
148: EmailAddress emailAddress = new EmailAddress();
149:
150: String rest = lexer.getRest();
151:
152: String displayName = getDisplayName(rest.trim());
153: emailAddress.setDisplayName(displayName);
154: Email email = getEmail(rest);
155: emailAddress.setEmail(email);
156:
157: emailField.setEmailAddress(emailAddress);
158: return emailField;
159: }
160:
161: /**
162: * Perform the email address field parsing
163: * @return the parsed email address field
164: * @exception ParseException if a parsing error occurs
165: */
166: public SDPField parse() throws ParseException {
167: return this.emailField();
168: }
169:
170: }
|