/*
* Conditions Of Use
*
* This software was developed by employees of the National Institute of
* Standards and Technology (NIST), an agency of the Federal Government.
* Pursuant to title 15 Untied States Code Section 105, works of NIST
* employees are not subject to copyright protection in the United States
* and are considered to be in the public domain. As a result, a formal
* license is not needed to use the software.
*
* This software is provided by NIST as a service and is expressly
* provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
* AND DATA ACCURACY. NIST does not warrant or make any representations
* regarding the use of the software or the results thereof, including but
* not limited to the correctness, accuracy, reliability or usefulness of
* the software.
*
* Permission to use this software is contingent upon your acceptance
* of the terms of this agreement
*
* .
*
*/
/*******************************************************************************
* Product of NIST/ITL Advanced Networking Technologies Division (ANTD). *
*******************************************************************************/
package gov.nist.javax.sip.address;
import gov.nist.core.*;
/**
* Authority part of a URI structure. Section 3.2.2 RFC2396
*
* @version 1.2 $Revision: 1.10 $ $Date: 2009/12/16 14:48:33 $
*
* @author M. Ranganathan <br/>
*
*
*
*/
public class Authority extends NetObject {
private static final long serialVersionUID = -3570349777347017894L;
/** hostport field
*/
protected HostPort hostPort;
/** userInfo field
*/
protected UserInfo userInfo;
/**
* Return the host name in encoded form.
* @return encoded string (does the same thing as toString)
*/
public String encode() {
return encode(new StringBuffer()).toString();
}
public StringBuffer encode(StringBuffer buffer) {
if (userInfo != null) {
userInfo.encode(buffer);
buffer.append(AT);
hostPort.encode(buffer);
} else {
hostPort.encode(buffer);
}
return buffer;
}
/** retruns true if the two Objects are equals , false otherwise.
* @param other Object to test.
* @return boolean
*/
@Override
public boolean equals(Object other) {
if (other == null) return false;
if (other.getClass() != getClass()) {
return false;
}
Authority otherAuth = (Authority) other;
if (!this.hostPort.equals(otherAuth.hostPort)) {
return false;
}
if (this.userInfo != null && otherAuth.userInfo != null) {
if (!this.userInfo.equals(otherAuth.userInfo)) {
return false;
}
}
return true;
}
/**
* get the hostPort member.
* @return HostPort
*/
public HostPort getHostPort() {
return hostPort;
}
/**
* get the userInfo memnber.
* @return UserInfo
*/
public UserInfo getUserInfo() {
return userInfo;
}
/**
* Get password from the user info.
* @return String
*/
public String getPassword() {
if (userInfo == null)
return null;
else
return userInfo.password;
}
/**
* Get the user name if it exists.
* @return String user or null if not set.
*/
public String getUser() {
return userInfo != null ? userInfo.user : null;
}
/**
* Get the host name.
* @return Host (null if not set)
*/
public Host getHost() {
if (hostPort == null)
return null;
else
return hostPort.getHost();
}
/**
* Get the port.
* @return int port (-1) if port is not set.
*/
public int getPort() {
if (hostPort == null)
return -1;
else
return hostPort.getPort();
}
/** remove the port.
*/
public void removePort() {
if (hostPort != null)
hostPort.removePort();
}
/**
* set the password.
* @param passwd String to set
*/
public void setPassword(String passwd) {
if (userInfo == null)
userInfo = new UserInfo();
userInfo.setPassword(passwd);
}
/**
* Set the user name of the userInfo member.
* @param user String to set
*/
public void setUser(String user) {
if (userInfo == null)
userInfo = new UserInfo();
this.userInfo.setUser(user);
}
/**
* set the host.
* @param host Host to set
*/
public void setHost(Host host) {
if (hostPort == null)
hostPort = new HostPort();
hostPort.setHost(host);
}
/**
* Set the port.
* @param port int to set
*/
public void setPort(int port) {
if (hostPort == null)
hostPort = new HostPort();
hostPort.setPort(port);
}
/**
* Set the hostPort member
* @param h HostPort to set
*/
public void setHostPort(HostPort h) {
hostPort = h;
}
/**
* Set the userInfo member
* @param u UserInfo to set
*/
public void setUserInfo(UserInfo u) {
userInfo = u;
}
/** Remove the user Infor.
*
*/
public void removeUserInfo() {
this.userInfo = null;
}
public Object clone() {
Authority retval = (Authority) super.clone();
if (this.hostPort != null)
retval.hostPort = (HostPort) this.hostPort.clone();
if (this.userInfo != null)
retval.userInfo = (UserInfo) this.userInfo.clone();
return retval;
}
@Override
public int hashCode() {
if ( this.hostPort == null ) throw new UnsupportedOperationException("Null hostPort cannot compute hashcode");
return this.hostPort.encode().hashCode();
}
}