/*
 * JBoss, the OpenSource EJB server
 * 
 * Distributable under LGPL license. See terms of license at gnu.org.
 */
package javax.resource.spi.security;

import java.io.Serializable;
import java.util.Arrays;

import javax.resource.spi.ManagedConnectionFactory;

/**
 * The class PasswordCredential is a placeholder for username and password.
 */
public final class PasswordCredential implements Serializable
{
   /** @since 4.0.0 */
   static final long serialVersionUID = -1770833344350711674L;

   /** The userName */
   private String userName;
   /** The password */
   private char[] password;

   /** The managed connection factory */
   private ManagedConnectionFactory mcf = null;

   /**
	 * Constructor, creates a new password credential
	 * 
	 * @param userName the user name
	 * @param password the password
	 */
   public PasswordCredential(String userName, char[] password)
   {
      this.userName = userName;
      this.password = password;
   }

   /**
	 * Returns the username
	 * 
	 * @return Username
	 */
   public String getUserName()
   {
      return userName;
   }

   /**
	 * Returns the password
	 * 
	 * @return password
	 */
   public char[] getPassword()
   {
      return password;
   }

   /**
	 * Get the managed connection factory associated with this username password
	 * pair.
    * 
    * @return the managed connection factory
	 */
   public ManagedConnectionFactory getManagedConnectionFactory()
   {
      return mcf;
   }

   /**
	 * Set the managed connection factory associated with this username password
	 * pair.
    * 
    * @param mcf the managed connection factory
	 */
   public void setManagedConnectionFactory(ManagedConnectionFactory mcf)
   {
      this.mcf = mcf;
   }

   public boolean equals(Object other)
   {
      if (this == other)
         return true;
      if (other == null || getClass() != other.getClass())
         return false;
      final PasswordCredential otherCredential = (PasswordCredential) other;
      return userName.equals(otherCredential.userName) && Arrays.equals(password, otherCredential.password);
   }

   public int hashCode()
   {
      return userName.hashCode();
   }
}