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 Wang/*******************************************************************************
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.address;
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*;
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Authority part of a URI structure. Section 3.2.2 RFC2396
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.10 $ $Date: 2009/12/16 14:48:33 $
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan   <br/>
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class Authority extends NetObject {
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = -3570349777347017894L;
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** hostport field
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected HostPort hostPort;
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** userInfo field
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected UserInfo userInfo;
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Return the host name in encoded form.
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return encoded string (does the same thing as toString)
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String encode() {
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return encode(new StringBuffer()).toString();
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public StringBuffer encode(StringBuffer buffer) {
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (userInfo != null) {
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            userInfo.encode(buffer);
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            buffer.append(AT);
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            hostPort.encode(buffer);
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } else {
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            hostPort.encode(buffer);
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return buffer;
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** retruns true if the two Objects are equals , false otherwise.
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param other Object to test.
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return boolean
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    @Override
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean equals(Object other) {
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (other == null) return false;
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (other.getClass() != getClass()) {
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return false;
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        Authority otherAuth = (Authority) other;
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (!this.hostPort.equals(otherAuth.hostPort)) {
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return false;
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this.userInfo != null && otherAuth.userInfo != null) {
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (!this.userInfo.equals(otherAuth.userInfo)) {
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                return false;
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return true;
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the hostPort member.
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return HostPort
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public HostPort getHostPort() {
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return hostPort;
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the userInfo memnber.
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return UserInfo
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public UserInfo getUserInfo() {
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return userInfo;
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         * Get password from the user info.
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         * @return String
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         */
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getPassword() {
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (userInfo == null)
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return userInfo.password;
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Get the user name if it exists.
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return String user or null if not set.
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getUser() {
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return userInfo != null ? userInfo.user : null;
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Get the host name.
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return Host (null if not set)
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Host getHost() {
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (hostPort == null)
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return hostPort.getHost();
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Get the port.
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return int port (-1) if port is not set.
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int getPort() {
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (hostPort == null)
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return -1;
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return hostPort.getPort();
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** remove the port.
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removePort() {
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (hostPort != null)
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            hostPort.removePort();
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * set the password.
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param passwd String to set
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setPassword(String passwd) {
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (userInfo == null)
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            userInfo = new UserInfo();
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        userInfo.setPassword(passwd);
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the user name of the userInfo member.
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param user String to set
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setUser(String user) {
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (userInfo == null)
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            userInfo = new UserInfo();
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.userInfo.setUser(user);
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * set the host.
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param host Host to set
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setHost(Host host) {
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (hostPort == null)
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            hostPort = new HostPort();
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        hostPort.setHost(host);
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the port.
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port int to set
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setPort(int port) {
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (hostPort == null)
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            hostPort = new HostPort();
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        hostPort.setPort(port);
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         * Set the hostPort member
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         * @param h HostPort to set
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         */
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setHostPort(HostPort h) {
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        hostPort = h;
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         * Set the userInfo member
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         * @param u UserInfo to set
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang         */
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setUserInfo(UserInfo u) {
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        userInfo = u;
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Remove the user Infor.
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    *
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    */
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removeUserInfo() {
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.userInfo = null;
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Object clone() {
223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        Authority retval = (Authority) super.clone();
224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this.hostPort != null)
225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            retval.hostPort = (HostPort) this.hostPort.clone();
226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this.userInfo != null)
227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            retval.userInfo = (UserInfo) this.userInfo.clone();
228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return retval;
229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    @Override
232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int hashCode() {
233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if ( this.hostPort == null ) throw new UnsupportedOperationException("Null hostPort cannot compute hashcode");
234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.hostPort.encode().hashCode();
235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
237