Author: joehni
Date: Thu Aug 13 14:30:18 2009
New Revision: 803902
URL: http://svn.apache.org/viewvc?rev=803902&view=rev
Log:
Implement reasonable equals and hashCode methods for StaticUserAuthenticator (VFS-274).
Implement Comparable for StaticUserAuthenticator.
Improve javadoc for UserAuthenticator.
Modified:
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/UserAuthenticator.java
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/auth/StaticUserAuthenticator.java
Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/UserAuthenticator.java
URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/UserAuthenticator.java?rev=803902&r1=803901&r2=803902&view=diff
==============================================================================
--- commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/UserAuthenticator.java
(original)
+++ commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/UserAuthenticator.java
Thu Aug 13 14:30:18 2009
@@ -17,13 +17,15 @@
package org.apache.commons.vfs;
/**
- * The user authenticator is used to query credentials from the user
+ * The user authenticator is used to query credentials from the user. Since a UserAuthenticator
+ * is provided with the {@link FileSystemOptions} to a {@link FileSystem} it should also
implement
+ * reasonable equals and hashCode functions if the FileSystem should be shared.
* @author <a href="http://commons.apache.org/vfs/team-list.html">Commons VFS team</a>
*/
public interface UserAuthenticator
{
/**
- * queries the given type from the user
+ * Queries the given type from the user
* @param types An array containing the user's credentials
* @return The UserAuthenticationData.
*/
Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/auth/StaticUserAuthenticator.java
URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/auth/StaticUserAuthenticator.java?rev=803902&r1=803901&r2=803902&view=diff
==============================================================================
--- commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/auth/StaticUserAuthenticator.java
(original)
+++ commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/auth/StaticUserAuthenticator.java
Thu Aug 13 14:30:18 2009
@@ -21,10 +21,10 @@
import org.apache.commons.vfs.util.UserAuthenticatorUtils;
/**
- * provides always the same credential data passed in with the constructor.
+ * Provides always the same credentials data passed in with the constructor.
* @author <a href="http://commons.apache.org/vfs/team-list.html">Commons VFS team</a>
*/
-public class StaticUserAuthenticator implements UserAuthenticator
+public class StaticUserAuthenticator implements UserAuthenticator, Comparable
{
/** The user name */
private final String username;
@@ -50,4 +50,100 @@
data.setData(UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(password));
return data;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ final int prime = 37;
+ int result = 1;
+ result = prime * result + ((domain == null) ? 0 : domain.hashCode());
+ result = prime * result + ((password == null) ? 0 : password.hashCode());
+ result = prime * result + ((username == null) ? 0 : username.hashCode());
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null) {
+ return false;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ StaticUserAuthenticator other = (StaticUserAuthenticator)obj;
+ return equalsNullsafe(domain, other.domain)
+ && equalsNullsafe(username, other.username)
+ && equalsNullsafe(password, other.password);
+ }
+
+ private boolean equalsNullsafe(final String thisString, final String otherString) {
+ if (thisString == null) {
+ if (otherString != null) {
+ return false;
+ }
+ } else if (!thisString.equals(otherString)) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int compareTo(final Object o) {
+ StaticUserAuthenticator other = (StaticUserAuthenticator)o;
+ int result = compareStringOrNull(domain, other.domain);
+ result = result == 0 ? compareStringOrNull(username, other.username) : result;
+ result = result == 0 ? compareStringOrNull(password, other.password) : result;
+
+ return result;
+ }
+
+ private int compareStringOrNull(final String thisString, final String otherString) {
+ if (thisString == null) {
+ if (otherString != null) {
+ return -1;
+ }
+ } else {
+ if (otherString == null) {
+ return 1;
+ }
+
+ final int result = thisString.compareTo(otherString);
+ if (result != 0) {
+ return result;
+ }
+ }
+
+ return 0;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ if (domain != null) {
+ buffer.append(domain).append('\\');
+ }
+ if (username != null) {
+ buffer.append(username);
+ } else {
+ buffer.append("(null)");
+ }
+ if (password != null) {
+ buffer.append(":***");
+ }
+ return buffer.toString();
+ }
}
|