001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package gov.nist.siplite.header;
028:
029: import gov.nist.core.*;
030: import gov.nist.siplite.*;
031: import gov.nist.siplite.address.*;
032:
033: /**
034: * The generic AcceptContact header
035: *
036: *
037: */
038: public class AcceptContactHeader extends ParametersHeader {
039:
040: /** Handle for class. */
041: public static Class clazz;
042: /** Accept-contact header field label. */
043: public static final String NAME = Header.ACCEPT_CONTACT;
044:
045: static {
046: clazz = new AcceptContactHeader().getClass();
047: }
048:
049: /**
050: * Default constructor.
051: */
052: public AcceptContactHeader() {
053: super (ACCEPT_CONTACT);
054: }
055:
056: /**
057: * Sets the specified parameter.
058: * @param nv parameter's name/value pair
059: */
060: public void setParameter(NameValue nv) {
061: Object val = nv.getValue();
062: setParameter(nv.getName(), (val == null) ? null : val
063: .toString());
064: }
065:
066: /**
067: * Sets the specified parameter.
068: * @param name name of the parameter
069: * @param value value of the parameter.
070: */
071: public void setParameter(String name, String value)
072: throws IllegalArgumentException {
073: NameValue nv = super .parameters
074: .getNameValue(name.toLowerCase());
075:
076: if (value == null) {
077: throw new NullPointerException("null value");
078: }
079:
080: boolean quoteStart = value.startsWith(Separators.DOUBLE_QUOTE);
081: boolean quoteEnd = value.endsWith(Separators.DOUBLE_QUOTE);
082:
083: if ((quoteStart && !quoteEnd) || (!quoteStart && quoteEnd)) {
084: throw new IllegalArgumentException(value
085: + " : Unexpected DOUBLE_QUOTE");
086: }
087:
088: if (quoteStart) { // quoteEnd is true in this case
089: value = value.substring(1, value.length() - 1);
090: }
091:
092: if (nv == null) {
093: nv = new NameValue(name.toLowerCase(), value);
094:
095: nv.setQuotedValue();
096: super .setParameter(nv);
097:
098: } else {
099: nv.setValue(value);
100: }
101:
102: }
103:
104: /**
105: * Sets the "type" parameter.
106: * @param value value of the parameter.
107: */
108: public void setType(String value) {
109: setParameter(SIPConstants.GENERAL_TYPE, value);
110: }
111:
112: /**
113: * Returns the value of the named parameter, or null if it is not set. A
114: * zero-length String indicates flag parameter.
115: *
116: * @param name name of parameter to retrieve
117: * @return the value of specified parameter
118: */
119: public String getParameter(String name) {
120: String returnValue = super .getParameter(name);
121: if (returnValue != null) { // remove quotes
122: returnValue = returnValue.substring(1,
123: returnValue.length() - 1);
124: }
125: return returnValue;
126: }
127:
128: /**
129: * Returns the value of the "type" parameter, or null if it is not set.
130: *
131: * @return the value of specified parameter
132: */
133: public String getType() {
134: return getParameter(SIPConstants.GENERAL_TYPE);
135: }
136:
137: /**
138: * Encodes in canonical form.
139: * @return canonical string.
140: */
141: public String encodeBody() {
142: return Separators.STAR + encodeWithSep();
143: }
144:
145: /**
146: * Clone - do a deep copy.
147: * @return Object AcceptContactHeader
148: */
149: public Object clone() {
150: try {
151: AcceptContactHeader retval = (AcceptContactHeader) this
152: .getClass().newInstance();
153: if (this .parameters != null)
154: retval.parameters = (NameValueList) parameters.clone();
155: return retval;
156: } catch (Exception ex) {
157: InternalErrorHandler.handleException(ex);
158: return null;
159: }
160: }
161:
162: /**
163: * Compares for equivalence.
164: * @param that object to compare
165: * @return true if object matches
166: */
167: public boolean equals(Object that) {
168: if (!that.getClass().equals(this .getClass())) {
169: return false;
170: } else {
171: AcceptContactHeader other = (AcceptContactHeader) that;
172: return this .parameters.equals(other.parameters);
173: }
174: }
175:
176: /**
177: * Gets the header value.
178: * @return the content type
179: */
180: public Object getValue() {
181: return Separators.STAR;
182: }
183:
184: }
|