/ org.apache.commons.httpclient / src / org / apache / commons / httpclient / UsernamePasswordCredentials.java
UsernamePasswordCredentials.java
  1  /*
  2   * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java,v 1.14 2004/04/18 23:51:35 jsdever Exp $
  3   * $Revision: 480424 $
  4   * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
  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: 480424 $ $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
 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