1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*******************************************************************************
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header.extensions;
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException;
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.*;
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.ExtensionHeader;
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This code is in the public domain.
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Join SIPHeader.
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author jean.deruelle@gmail.com  <br/>
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version JAIN-SIP-1.2
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class Join
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    extends ParametersHeader implements ExtensionHeader, JoinHeader {
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = -840116548918120056L;
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String NAME = "Join";
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * callIdentifier field
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public CallIdentifier callIdentifier;
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String callId;
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Default constructor
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Join() {
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Constructor given the call Identifier.
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@param callId string call identifier (should be localid@host)
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@throws IllegalArgumentException if call identifier is bad.
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Join(String callId) throws IllegalArgumentException {
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.callIdentifier = new CallIdentifier(callId);
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Encode the body part of this header (i.e. leave out the hdrName).
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return String encoded body part of the header.
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String encodeBody() {
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (callId == null)
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else {
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            String retVal = callId;
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (!parameters.isEmpty()) {
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                retVal += SEMICOLON + parameters.encode();
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return retVal;
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the CallId field. This does the same thing as encodeBody
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return String the encoded body part of the
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getCallId() {
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return callId;
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the call Identifer member.
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return CallIdentifier
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public CallIdentifier getCallIdentifer() {
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return callIdentifier;
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * set the CallId field
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param cid String to set. This is the body part of the Call-Id
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *  header. It must have the form localId@host or localId.
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws IllegalArgumentException if cid is null, not a token, or is
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * not a token@token.
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setCallId(String cid) {
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        callId = cid;
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the callIdentifier member.
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param cid CallIdentifier to set (localId@host).
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setCallIdentifier(CallIdentifier cid) {
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        callIdentifier = cid;
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Get the to-tag parameter from the address parm list.
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return tag field
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getToTag() {
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (parameters == null)
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return getParameter(ParameterNames.TO_TAG);
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the to-tag member
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param t tag to set. From tags are mandatory.
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setToTag(String t) throws ParseException {
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (t == null)
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new NullPointerException("null tag ");
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else if (t.trim().equals(""))
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new ParseException("bad tag", 0);
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.TO_TAG, t);
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Boolean function
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return true if the Tag exist
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean hasToTag() {
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return hasParameter(ParameterNames.TO_TAG);
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** remove Tag member
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removeToTag() {
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        parameters.delete(ParameterNames.TO_TAG);
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Get the from-tag parameter from the address parm list.
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return tag field
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getFromTag() {
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (parameters == null)
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return getParameter(ParameterNames.FROM_TAG);
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the to-tag member
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param t tag to set. From tags are mandatory.
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setFromTag(String t) throws ParseException {
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (t == null)
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new NullPointerException("null tag ");
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else if (t.trim().equals(""))
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new ParseException("bad tag", 0);
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.FROM_TAG, t);
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Boolean function
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return true if the Tag exist
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean hasFromTag() {
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return hasParameter(ParameterNames.FROM_TAG);
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** remove Tag member
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removeFromTag() {
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        parameters.delete(ParameterNames.FROM_TAG);
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setValue(String value) throws ParseException {
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // not implemented.
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        throw new ParseException(value,0);
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang//  public Object clone() {
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang//      CallID retval = (CallID) super.clone();
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang//      if (this.callIdentifier != null)
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang//      retval.setCallIdentifier( (CallIdentifier) this.callIdentifier.clone() );
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang//      return retval;
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang//  }
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
188