View Javadoc

1   /*
2    * $HeadURL: https://svn.apache.org/repos/asf/httpcomponents/oac.hc3x/trunk/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java $
3    * $Revision$
4    * $Date$
5    *
6    * ====================================================================
7    *
8    *  Licensed to the Apache Software Foundation (ASF) under one or more
9    *  contributor license agreements.  See the NOTICE file distributed with
10   *  this work for additional information regarding copyright ownership.
11   *  The ASF licenses this file to You under the Apache License, Version 2.0
12   *  (the "License"); you may not use this file except in compliance with
13   *  the License.  You may obtain a copy of the License at
14   *
15   *      http://www.apache.org/licenses/LICENSE-2.0
16   *
17   *  Unless required by applicable law or agreed to in writing, software
18   *  distributed under the License is distributed on an "AS IS" BASIS,
19   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20   *  See the License for the specific language governing permissions and
21   *  limitations under the License.
22   * ====================================================================
23   *
24   * This software consists of voluntary contributions made by many
25   * individuals on behalf of the Apache Software Foundation.  For more
26   * information on the Apache Software Foundation, please see
27   * <http://www.apache.org/>.
28   *
29   */
30  
31  package org.apache.commons.httpclient;
32  
33  import org.apache.commons.httpclient.util.LangUtils;
34  
35  /***
36   * <p>Username and password {@link Credentials}.</p>
37   *
38   * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
39   * @author Sean C. Sullivan
40   * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
41   * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
42   * 
43   * @version $Revision$ $Date$
44   * 
45   */
46  public class UsernamePasswordCredentials implements Credentials {
47  
48      // ----------------------------------------------------------- Constructors
49  
50      /***
51       * Default constructor.
52       * 
53       * @deprecated Do not use. Null user name no longer allowed
54       */
55      public UsernamePasswordCredentials() {
56          super();
57      }
58  
59  
60      /***
61       * The constructor with the username and password combined string argument.
62       *
63       * @param usernamePassword the username:password formed string
64       * @see #toString
65       */
66      public UsernamePasswordCredentials(String usernamePassword) {
67          super();
68          if (usernamePassword == null) {
69              throw new IllegalArgumentException("Username:password string may not be null");            
70          }
71          int atColon = usernamePassword.indexOf(':');
72          if (atColon >= 0) {
73              this.userName = usernamePassword.substring(0, atColon);
74              this.password = usernamePassword.substring(atColon + 1);
75          } else {
76              this.userName = usernamePassword;
77          }
78      }
79  
80  
81      /***
82       * The constructor with the username and password arguments.
83       *
84       * @param userName the user name
85       * @param password the password
86       */
87      public UsernamePasswordCredentials(String userName, String password) {
88          super();
89          if (userName == null) {
90              throw new IllegalArgumentException("Username may not be null");            
91          }
92          this.userName = userName;
93          this.password = password;
94      }
95  
96      // ----------------------------------------------------- Instance Variables
97  
98      /***
99       * User name.
100      */
101     private String userName;
102 
103 
104     /***
105      * Password.
106      */
107     private String password;
108 
109 
110     // ------------------------------------------------------------- Properties
111 
112 
113     /***
114      * User name property setter. User name may not be null.
115      *
116      * @param userName
117      * @see #getUserName()
118      * 
119      * @deprecated Do not use. The UsernamePasswordCredentials objects should be immutable
120      */
121     public void setUserName(String userName) {
122         if (userName == null) {
123             throw new IllegalArgumentException("Username may not be null");            
124         }
125         this.userName = userName;
126     }
127 
128 
129     /***
130      * User name property getter.
131      *
132      * @return the userName
133      * @see #setUserName(String)
134      */
135     public String getUserName() {
136         return userName;
137     }
138 
139 
140     /***
141      * Password property setter.
142      *
143      * @param password
144      * @see #getPassword()
145      * 
146      * @deprecated Do not use. The UsernamePasswordCredentials objects should be immutable
147      */
148     public void setPassword(String password) {
149         this.password = password;
150     }
151 
152 
153     /***
154      * Password property getter.
155      *
156      * @return the password
157      * @see #setPassword(String)
158      */
159     public String getPassword() {
160         return password;
161     }
162 
163     
164     /***
165      * Get this object string.
166      *
167      * @return the username:password formed string
168      */
169     public String toString() {
170         StringBuffer result = new StringBuffer();
171         result.append(this.userName);
172         result.append(":");
173         result.append((this.password == null) ? "null" : this.password);
174         return result.toString();
175     }
176 
177     /***
178      * Does a hash of both user name and password.
179      *
180      * @return The hash code including user name and password.
181      */
182     public int hashCode() {
183         int hash = LangUtils.HASH_SEED;
184         hash = LangUtils.hashCode(hash, this.userName);
185         hash = LangUtils.hashCode(hash, this.password);
186         return hash;
187     }
188 
189     /***
190      * These credentials are assumed equal if the username and password are the
191      * same.
192      *
193      * @param o The other object to compare with.
194      *
195      * @return  <code>true</code> if the object is equivalent.
196      */
197     public boolean equals(Object o) {
198         if (o == null) return false;
199         if (this == o) return true;
200         // note - to allow for sub-classing, this checks that class is the same
201         // rather than do "instanceof".
202         if (this.getClass().equals(o.getClass())) {
203             UsernamePasswordCredentials that = (UsernamePasswordCredentials) o;
204 
205             if (LangUtils.equals(this.userName, that.userName)
206                     && LangUtils.equals(this.password, that.password) ) {
207                 return true;
208             }
209         }
210         return false;
211     }
212 
213 }
214