/**
* Copyright 2010 Voxeo Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License.
*
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package com.rayo.server.test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.StringTokenizer;
import javax.servlet.sip.TelURL;
import com.rayo.core.sip.SipGrammar;
import com.voxeo.logging.Loggerf;
public class MockTelURL implements TelURL {
private static Loggerf logger = Loggerf.getLogger(MockTelURL.class);
private String _phoneNumber;
private String _uri;
private String _scheme;
private String _number;
private HashMap<String, String> _params = new HashMap<String, String>();
public MockTelURL(String url) {
if (url != null) {
logger.debug("Url when creating: " + url);
_uri = url;
parse();
}
}
public TelURL clone() {
return null;
}
final public String getPhoneNumber() {
if (_number != null) {
return _number;
}
if (_phoneNumber != null) {
return _phoneNumber;
}
return null;
}
@Override
public String getParameter(String arg0) {
return null;
}
@Override
public Iterator<String> getParameterNames() {
return null;
}
@Override
public String getScheme() {
return null;
}
@Override
public boolean isSipURI() {
return false;
}
@Override
public void removeParameter(String arg0) {
}
@Override
public void setParameter(String arg0, String arg1) {
}
@Override
public String getPhoneContext() {
return null;
}
@Override
public boolean isGlobal() {
return false;
}
@Override
public void setPhoneNumber(String arg0) {
_phoneNumber = arg0;
}
@Override
public void setPhoneNumber(String arg0, String arg1) {
}
private void parse() {
int indexScheme = _uri.indexOf(':');
if (indexScheme < 0)
throw new IllegalArgumentException("Missing TelURL scheme in ["
+ _uri + "]");
_scheme = _uri.substring(0, indexScheme);
if (!"tel".equals(_scheme) && !"fax".equals(_scheme)) {
throw new IllegalArgumentException("Invalid TelURL scheme ["
+ _scheme + "] in [" + _uri + "]");
}
int indexParam = _uri.indexOf(';', indexScheme);
if (indexParam < 0) {
_number = _uri.substring(indexScheme + 1);
} else {
_number = _uri.substring(indexScheme + 1, indexParam);
String normalizedNumber;
if (_number.startsWith("+")) {
normalizedNumber = _number.substring(1);
} else {
normalizedNumber = _number;
}
logger.debug("Parsed TEL number: " + _number);
if (!SipGrammar.__phoneDigits.containsAll(normalizedNumber))
throw new IllegalArgumentException("Invalid phone number ["
+ _number + "] in URI [" + _uri + "]");
String sParams = _uri.substring(indexParam + 1);
parseParams(sParams);
}
}
private void parseParams(String sParams) {
StringTokenizer st = new StringTokenizer(sParams, ";");
while (st.hasMoreTokens()) {
String param = st.nextToken();
String name;
String value;
int index = param.indexOf('=');
if (index < 0) {
name = param.trim();
value = "";
} else {
name = param.substring(0, index).trim();
value = param.substring(index + 1).trim();
}
if (!SipGrammar.__param.containsAll(name)) {
throw new IllegalArgumentException("Invalid parameter name ["
+ name + "] in [" + _uri + "]");
}
if (!SipGrammar.__param.containsAll(value)) {
throw new IllegalArgumentException("Invalid parameter value ["
+ value + "] in [" + _uri + "]");
}
_params.put(SipGrammar.unescape(name.toLowerCase()),
SipGrammar.unescape(value));
}
}
}