Index: src/test/org/apache/commons/httpclient/TestCredentials.java
===================================================================
--- src/test/org/apache/commons/httpclient/TestCredentials.java (revision 190720)
+++ src/test/org/apache/commons/httpclient/TestCredentials.java (working copy)
@@ -86,4 +86,31 @@
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, ntCreds2);
+ assertNotSame(ntCreds1, ntCreds3);
+ assertNotSame(ntCreds1, ntCreds4);
+ }
}
Index: src/java/org/apache/commons/httpclient/NTCredentials.java
===================================================================
--- src/java/org/apache/commons/httpclient/NTCredentials.java (revision 190720)
+++ src/java/org/apache/commons/httpclient/NTCredentials.java (working copy)
@@ -29,6 +29,8 @@
package org.apache.commons.httpclient;
+import org.apache.commons.httpclient.util.LangUtils;
+
/** {@link Credentials} for use with the NTLM authentication scheme which requires additional
* information.
*
@@ -152,4 +154,38 @@
return sbResult.toString();
}
+ /**
+ * Computes a hash code based on all the parts of the credentials object.
+ *
+ * @return The hash code for the credentials.
+ */
+ public int hashCode() {
+ int hash = LangUtils.HASH_SEED;
+ hash = LangUtils.hashCode(hash, getUserName().toLowerCase());
+ hash = LangUtils.hashCode(hash, getPassword());
+ hash = LangUtils.hashCode(hash, this.host.toLowerCase());
+ hash = LangUtils.hashCode(hash, this.domain.toLowerCase());
+ return hash;
+ }
+
+ /**
+ * Checks whether the components of the credentials are the same.
+ *
+ * @param o The object to match.
+ *
+ * @return true if all of the credentials match.
+ */
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (o instanceof NTCredentials) {
+ NTCredentials that = (NTCredentials) o;
+ return this.getUserName().equalsIgnoreCase(that.getUserName())
+ && LangUtils.equals(this.getPassword(), that.getPassword())
+ && this.host.equalsIgnoreCase(that.host)
+ && this.domain.equalsIgnoreCase(that.domain);
+ }
+ return false;
+ }
}
Index: src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java
===================================================================
--- src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java (revision 190720)
+++ src/java/org/apache/commons/httpclient/UsernamePasswordCredentials.java (working copy)
@@ -29,6 +29,8 @@
package org.apache.commons.httpclient;
+import org.apache.commons.httpclient.util.LangUtils;
+
/**
*
Username and password {@link Credentials}.
* @@ -171,5 +173,40 @@ 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. + * + * @returntrue if the object is equivalent.
+ */
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (o instanceof UsernamePasswordCredentials) {
+ UsernamePasswordCredentials that = (UsernamePasswordCredentials) o;
+
+ if (LangUtils.equals(this.userName, that.userName)
+ && LangUtils.equals(this.password, that.password) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
}