Author: olegk
Date: Wed Jun 22 12:38:51 2005
New Revision: 192979

URL: http://svn.apache.org/viewcvs?rev=192979&view=rev
Log:
PR #35365 (No equals operation for Credentials implementations)

Contributed by Eric Johnson <eric at tibco.com>
Reviewed by Oleg Kalnichevski & Michael Becke

Modified:
    
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/NTCredentials.java
    
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java
    
jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestCredentials.java

Modified: 
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/NTCredentials.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/NTCredentials.java?rev=192979&r1=192978&r2=192979&view=diff
==============================================================================
--- 
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/NTCredentials.java
 (original)
+++ 
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/NTCredentials.java
 Wed Jun 22 12:38:51 2005
@@ -29,6 +29,8 @@
 
 package org.apache.commons.httpclient;
 
+import org.apache.commons.httpclient.util.LangUtils;
+
 /** [EMAIL PROTECTED] Credentials} for use with the NTLM authentication scheme 
which requires additional
  * information.
  *
@@ -152,4 +154,39 @@
         return sbResult.toString();
     }
 
+    /**
+     * Computes a hash code based on all the case-sensitive parts of the 
credentials object.
+     *
+     * @return  The hash code for the credentials.
+     */
+    public int hashCode() {
+        int hash = super.hashCode();
+        hash = LangUtils.hashCode(hash, this.host);
+        hash = LangUtils.hashCode(hash, this.domain);
+        return hash;
+    }
+
+    /**
+     * Performs a case-sensitive check to see if the components of the 
credentials
+     * are the same.
+     *
+     * @param o  The object to match.
+     *
+     * @return <code>true</code> if all of the credentials match.
+     */
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+
+        if (super.equals(o) ) {
+            if (o instanceof NTCredentials) {
+                NTCredentials that = (NTCredentials) o;
+
+                return LangUtils.equals(this.domain, that.domain)
+                    && LangUtils.equals(this.host, that.host);
+            }
+        }
+
+        return false;
+    }
 }

Modified: 
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java?rev=192979&r1=192978&r2=192979&view=diff
==============================================================================
--- 
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java
 (original)
+++ 
jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java
 Wed Jun 22 12:38:51 2005
@@ -29,6 +29,8 @@
 
 package org.apache.commons.httpclient;
 
+import org.apache.commons.httpclient.util.LangUtils;
+
 /**
  * <p>Username and password [EMAIL PROTECTED] Credentials}.</p>
  *
@@ -169,6 +171,44 @@
         result.append(":");
         result.append((this.password == null) ? "null" : this.password);
         return result.toString();
+    }
+
+    /**
+     * Does a hash of both user name and password.
+     *
+     * @return The hash code including user name and password.
+     */
+    public int hashCode() {
+        int hash = LangUtils.HASH_SEED;
+        hash = LangUtils.hashCode(hash, this.userName);
+        hash = LangUtils.hashCode(hash, this.password);
+        return hash;
+    }
+
+    /**
+     * These credentials are assumed equal if the username and password are the
+     * same.
+     *
+     * @param o The other object to compare with.
+     *
+     * @return  <code>true</code> if the object is equivalent.
+     */
+    public boolean equals(Object o) {
+        if (o == this) {
+            return true;
+        }
+
+        // note - to allow for sub-classing, this checks that class is the same
+        // rather than do "instanceof".
+        if (o.getClass() == this.getClass() ) {
+            UsernamePasswordCredentials that = (UsernamePasswordCredentials) o;
+
+            if (LangUtils.equals(this.userName, that.userName)
+                    && LangUtils.equals(this.password, that.password) ) {
+                return true;
+            }
+        }
+        return false;
     }
 
 }

Modified: 
jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestCredentials.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestCredentials.java?rev=192979&r1=192978&r2=192979&view=diff
==============================================================================
--- 
jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestCredentials.java
 (original)
+++ 
jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestCredentials.java
 Wed Jun 22 12:38:51 2005
@@ -86,4 +86,32 @@
         assertNotNull(creds.getHost());
     }
 
+    /**
+     * Verifies that credentials report equal when they should.
+     */
+    public void testCredentialEquals() {
+
+        Credentials creds1 = new UsernamePasswordCredentials("user1", 
"password1");
+        Credentials creds1Again = new UsernamePasswordCredentials("user1", 
"password1");
+        Credentials creds2 = new UsernamePasswordCredentials("user2", 
"password2");
+        Credentials creds3 = new UsernamePasswordCredentials("user3", null);
+        Credentials creds3Again = new UsernamePasswordCredentials("user3", 
null);
+
+        assertEquals(creds1, creds1Again);
+        assertNotSame(creds1, creds2);
+        assertEquals(creds3, creds3Again);
+
+        Credentials ntCreds1 = new NTCredentials("user1", "password1", 
"host1", "domain1");
+        Credentials ntCreds1Again = new NTCredentials("user1", "password1", 
"host1", "domain1");
+        Credentials ntCreds2 = new NTCredentials("user1", "password2", 
"host1", "domain1");
+        Credentials ntCreds3 = new NTCredentials("user1", "password1", 
"host2", "domain1");
+        Credentials ntCreds4 = new NTCredentials("user1", "password1", 
"host1", "domain2");
+
+        assertEquals(ntCreds1, ntCreds1Again);
+        assertNotSame(ntCreds1, creds1);
+        assertNotSame(creds1, ntCreds1);
+        assertNotSame(ntCreds1, ntCreds2);
+        assertNotSame(ntCreds1, ntCreds3);
+        assertNotSame(ntCreds1, ntCreds4);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to