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*/ 26package gov.nist.javax.sip.address; 27 28import gov.nist.core.*; 29 30import 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 */ 40public 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