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 Wangpackage gov.nist.javax.sip.address;
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.NameValueList;
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException;
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.Iterator;
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Implementation of the TelURL interface.
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.10 $ $Date: 2009/11/15 19:50:45 $
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class TelURLImpl
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    extends GenericURI
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    implements javax.sip.address.TelURL {
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = 5873527320305915954L;
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected TelephoneNumber telephoneNumber;
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Creates a new instance of TelURLImpl */
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public TelURLImpl() {
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.scheme = "tel";
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Set the telephone number.
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@param telephoneNumber -- telephone number to set.
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setTelephoneNumber(TelephoneNumber telephoneNumber) {
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.telephoneNumber = telephoneNumber;
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the value of the <code>isdnSubAddress</code> parameter, or null
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * if it is not set.
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return  the value of the <code>isdnSubAddress</code> parameter
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getIsdnSubAddress() {
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return telephoneNumber.getIsdnSubaddress();
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the value of the <code>postDial</code> parameter, or null if it
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * is not set.
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return  the value of the <code>postDial</code> parameter
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getPostDial() {
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return telephoneNumber.getPostDial();
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the value of the "scheme" of this URI, for example "sip", "sips"
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * or "tel".
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the scheme paramter of the URI
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getScheme() {
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.scheme;
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns <code>true</code> if this TelURL is global i.e. if the TelURI
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * has a global phone user.
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return <code>true</code> if this TelURL represents a global phone user,
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * and <code>false</code> otherwise.
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean isGlobal() {
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return telephoneNumber.isGlobal();
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** This method determines if this is a URI with a scheme of "sip" or "sips".
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return true if the scheme is "sip" or "sips", false otherwise.
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean isSipURI() {
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return false;
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets phone user of this TelURL to be either global or local. The default
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * value is false, hence the TelURL is defaulted to local.
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param global - the boolean value indicating if the TelURL has a global
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * phone user.
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setGlobal(boolean global) {
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.telephoneNumber.setGlobal(global);
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets ISDN subaddress of this TelURL. If a subaddress is present, it is
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * appended to the phone number after ";isub=".
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param isdnSubAddress - new value of the <code>isdnSubAddress</code>
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * parameter
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setIsdnSubAddress(String isdnSubAddress) {
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.telephoneNumber.setIsdnSubaddress(isdnSubAddress);
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets post dial of this TelURL. The post-dial sequence describes what and
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * when the local entity should send to the phone line.
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param postDial - new value of the <code>postDial</code> parameter
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setPostDial(String postDial) {
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.telephoneNumber.setPostDial(postDial);
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the telephone number.
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param telephoneNumber long phone number to set.
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setPhoneNumber(String telephoneNumber) {
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.telephoneNumber.setPhoneNumber(telephoneNumber);
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Get the telephone number.
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@return -- the telephone number.
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getPhoneNumber() {
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.telephoneNumber.getPhoneNumber();
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Return the string encoding.
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@return -- the string encoding.
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String toString() {
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.scheme + ":" + telephoneNumber.encode();
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String encode() {
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return encode(new StringBuffer()).toString();
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public StringBuffer encode(StringBuffer buffer) {
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        buffer.append(this.scheme).append(':');
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        telephoneNumber.encode(buffer);
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return buffer;
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Deep copy clone operation.
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    *
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    *@return -- a cloned version of this telephone number.
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    */
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Object clone() {
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        TelURLImpl retval = (TelURLImpl) super.clone();
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this.telephoneNumber != null)
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            retval.telephoneNumber = (TelephoneNumber) this.telephoneNumber.clone();
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return retval;
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getParameter(String parameterName) {
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return telephoneNumber.getParameter(parameterName);
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setParameter(String name, String value) {
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        telephoneNumber.setParameter(name, value);
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Iterator<String> getParameterNames() {
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return telephoneNumber.getParameterNames();
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public NameValueList getParameters() {
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return telephoneNumber.getParameters();
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removeParameter(String name) {
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        telephoneNumber.removeParameter(name);
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /* (non-Javadoc)
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @see javax.sip.address.TelURL#setPhoneContext(java.lang.String)
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setPhoneContext(String phoneContext) throws ParseException {
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // JvB: set (null) should be interpreted as 'remove'
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (phoneContext==null) {
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            this.removeParameter("phone-context");
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } else {
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            this.setParameter("phone-context",phoneContext);
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /* (non-Javadoc)
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @see javax.sip.address.TelURL#getPhoneContext()
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getPhoneContext() {
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.getParameter("phone-context");
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
223