1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Conditions Of Use
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software was developed by employees of the National Institute of
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Standards and Technology (NIST), an agency of the Federal Government.
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Pursuant to title 15 Untied States Code Section 105, works of NIST
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* employees are not subject to copyright protection in the United States
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* and are considered to be in the public domain.  As a result, a formal
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* license is not needed to use the software.
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software is provided by NIST as a service and is expressly
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* AND DATA ACCURACY.  NIST does not warrant or make any representations
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* regarding the use of the software or the results thereof, including but
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* not limited to the correctness, accuracy, reliability or usefulness of
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* the software.
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Permission to use this software is contingent upon your acceptance
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* of the terms of this agreement
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* .
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*******************************************************************************
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header;
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.CallIdHeader;
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException;
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Call ID SIPHeader.
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan   <br/>
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:27 $
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 1.1
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class CallID
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    extends SIPHeader
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    implements javax.sip.header.CallIdHeader {
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Comment for <code>serialVersionUID</code>
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = -6463630258703731156L;
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * callIdentifier field
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected CallIdentifier callIdentifier;
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Default constructor
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public CallID() {
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /* (non-Javadoc)
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @see java.lang.Object#equals(java.lang.Object)
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * CallIDs are compared case-insensitively
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean equals( Object other ) {
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this==other) return true;
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (other instanceof CallIdHeader) {
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            final CallIdHeader o = (CallIdHeader) other;
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return this.getCallId().equalsIgnoreCase( o.getCallId() );
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return false;
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Encode the body part of this header (i.e. leave out the hdrName).
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@return String encoded body part of the header.
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String encodeBody() {
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return encodeBody(new StringBuffer()).toString();
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected StringBuffer encodeBody(StringBuffer buffer) {
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (callIdentifier != null)
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            callIdentifier.encode(buffer);
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return buffer;
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the CallId field. This does the same thing as
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * encodeBody
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return String the encoded body part of the
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getCallId() {
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return encodeBody();
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the call Identifer member.
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return CallIdentifier
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public CallIdentifier getCallIdentifer() {
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return callIdentifier;
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * set the CallId field
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param cid String to set. This is the body part of the Call-Id
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *  header. It must have the form localId@host or localId.
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws IllegalArgumentException if cid is null, not a token, or is
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * not a token@token.
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setCallId(String cid) throws ParseException {
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        try {
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            callIdentifier = new CallIdentifier(cid);
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } catch (IllegalArgumentException ex) {
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new ParseException(cid, 0);
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the callIdentifier member.
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param cid CallIdentifier to set (localId@host).
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setCallIdentifier(CallIdentifier cid) {
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        callIdentifier = cid;
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Constructor given the call Identifier.
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@param callId string call identifier (should be localid@host)
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@throws IllegalArgumentException if call identifier is bad.
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public CallID(String callId) throws IllegalArgumentException {
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.callIdentifier = new CallIdentifier(callId);
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Object clone() {
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        CallID retval = (CallID) super.clone();
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this.callIdentifier != null)
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            retval.callIdentifier = (CallIdentifier) this.callIdentifier.clone();
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return retval;
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
148