Home | History | Annotate | Download | only in address
      1 /*
      2 * Conditions Of Use
      3 *
      4 * This software was developed by employees of the National Institute of
      5 * Standards and Technology (NIST), an agency of the Federal Government.
      6 * Pursuant to title 15 Untied States Code Section 105, works of NIST
      7 * employees are not subject to copyright protection in the United States
      8 * and are considered to be in the public domain.  As a result, a formal
      9 * license is not needed to use the software.
     10 *
     11 * This software is provided by NIST as a service and is expressly
     12 * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
     13 * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
     14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
     15 * AND DATA ACCURACY.  NIST does not warrant or make any representations
     16 * regarding the use of the software or the results thereof, including but
     17 * not limited to the correctness, accuracy, reliability or usefulness of
     18 * the software.
     19 *
     20 * Permission to use this software is contingent upon your acceptance
     21 * of the terms of this agreement
     22 *
     23 * .
     24 *
     25 */
     26 package gov.nist.javax.sip.address;
     27 
     28 import gov.nist.core.*;
     29 
     30 import java.util.Iterator;
     31 
     32 /**
     33  * Telephone number class.
     34  * @version 1.2
     35  * @version 1.2 $Revision: 1.10 $ $Date: 2009/07/17 18:57:23 $
     36  *
     37  * @author M. Ranganathan
     38  *
     39  */
     40 public class TelephoneNumber extends NetObject {
     41     public static final String POSTDIAL = ParameterNames.POSTDIAL;
     42     public static final String PHONE_CONTEXT_TAG =
     43         ParameterNames.PHONE_CONTEXT_TAG;
     44     public static final String ISUB = ParameterNames.ISUB;
     45     public static final String PROVIDER_TAG = ParameterNames.PROVIDER_TAG;
     46 
     47     /** isglobal field
     48      */
     49     protected boolean isglobal;
     50 
     51     /** phoneNumber field
     52      */
     53     protected String phoneNumber;
     54 
     55     /** parmeters list
     56      */
     57     protected NameValueList parameters;
     58 
     59     /** Creates new TelephoneNumber */
     60     public TelephoneNumber() {
     61         parameters = new NameValueList();
     62     }
     63 
     64     /** delete the specified parameter.
     65      * @param name String to set
     66      */
     67     public void deleteParm(String name) {
     68         parameters.delete(name);
     69     }
     70 
     71     /** get the PhoneNumber field
     72      * @return String
     73      */
     74     public String getPhoneNumber() {
     75         return phoneNumber;
     76     }
     77 
     78     /** get the PostDial field
     79      * @return String
     80      */
     81     public String getPostDial() {
     82         return (String) parameters.getValue(POSTDIAL);
     83     }
     84 
     85     /**
     86      * Get the isdn subaddress for this number.
     87      * @return String
     88      */
     89     public String getIsdnSubaddress() {
     90         return (String) parameters.getValue(ISUB);
     91     }
     92 
     93     /** returns true if th PostDial field exists
     94      * @return boolean
     95      */
     96     public boolean hasPostDial() {
     97         return parameters.getValue(POSTDIAL) != null;
     98     }
     99 
    100     /** return true if this header has parameters.
    101      * @param pname String to set
    102      * @return boolean
    103      */
    104     public boolean hasParm(String pname) {
    105         return parameters.hasNameValue(pname);
    106     }
    107 
    108     /**
    109      * return true if the isdn subaddress exists.
    110      * @return boolean
    111      */
    112     public boolean hasIsdnSubaddress() {
    113         return hasParm(ISUB);
    114     }
    115 
    116     /**
    117      * is a global telephone number.
    118      * @return boolean
    119      */
    120     public boolean isGlobal() {
    121         return isglobal;
    122     }
    123 
    124     /** remove the PostDial field
    125      */
    126     public void removePostDial() {
    127         parameters.delete(POSTDIAL);
    128     }
    129 
    130     /**
    131      * Remove the isdn subaddress (if it exists).
    132      */
    133     public void removeIsdnSubaddress() {
    134         deleteParm(ISUB);
    135     }
    136 
    137     /**
    138      * Set the list of parameters.
    139      * @param p NameValueList to set
    140      */
    141     public void setParameters(NameValueList p) {
    142         parameters = p;
    143     }
    144 
    145     /** set the Global field
    146      * @param g boolean to set
    147      */
    148     public void setGlobal(boolean g) {
    149         isglobal = g;
    150     }
    151 
    152     /** set the PostDial field
    153      * @param p String to set
    154      */
    155     public void setPostDial(String p) {
    156         NameValue nv = new NameValue(POSTDIAL, p);
    157         parameters.set(nv);
    158     }
    159 
    160     /** set the specified parameter
    161      * @param name String to set
    162      * @param value Object to set
    163      */
    164     public void setParm(String name, Object value) {
    165         NameValue nv = new NameValue(name, value);
    166         parameters.set(nv);
    167     }
    168 
    169     /**
    170      * set the isdn subaddress for this structure.
    171      * @param isub String to set
    172      */
    173     public void setIsdnSubaddress(String isub) {
    174         setParm(ISUB, isub);
    175     }
    176 
    177     /** set the PhoneNumber field
    178      * @param num String to set
    179      */
    180     public void setPhoneNumber(String num) {
    181         phoneNumber = num;
    182     }
    183 
    184     public String encode() {
    185         return encode(new StringBuffer()).toString();
    186     }
    187 
    188     public StringBuffer encode(StringBuffer buffer) {
    189         if (isglobal)
    190             buffer.append('+');
    191         buffer.append(phoneNumber);
    192         if (!parameters.isEmpty()) {
    193             buffer.append(SEMICOLON);
    194             parameters.encode(buffer);
    195         }
    196         return buffer;
    197     }
    198 
    199     /**
    200      * Returns the value of the named parameter, or null if it is not set. A
    201      * zero-length String indicates flag parameter.
    202      *
    203      * @param name name of parameter to retrieve
    204      *
    205      * @return the value of specified parameter
    206      *
    207      */
    208     public String getParameter(String name) {
    209         Object val = parameters.getValue(name);
    210         if (val == null)
    211             return null;
    212         if (val instanceof GenericObject)
    213             return ((GenericObject) val).encode();
    214         else
    215             return val.toString();
    216     }
    217 
    218     /**
    219      *
    220      * Returns an Iterator over the names (Strings) of all parameters.
    221      *
    222      * @return an Iterator over all the parameter names
    223      *
    224      */
    225     public Iterator<String> getParameterNames() {
    226         return this.parameters.getNames();
    227     }
    228 
    229     public void removeParameter(String parameter) {
    230         this.parameters.delete(parameter);
    231     }
    232 
    233     public void setParameter(String name, String value) {
    234         NameValue nv = new NameValue(name, value);
    235         this.parameters.set(nv);
    236     }
    237 
    238     public Object clone() {
    239         TelephoneNumber retval = (TelephoneNumber) super.clone();
    240         if (this.parameters != null)
    241             retval.parameters = (NameValueList) this.parameters.clone();
    242         return retval;
    243     }
    244 
    245     public NameValueList getParameters() {
    246         return this.parameters;
    247     }
    248 }
    249