package at.gv.egovernment.moa.spss.server.config;

import java.math.BigInteger;

/**
 * A class containing information about an entry in a key group.
 * 
 * @author Patrick Peck
 * @version $Id$
 */
public class KeyGroupEntry {
  /** The module ID of the key. */
  private String moduleID;
  /** The issuer DN of the certificate identifying the key. */
  private String issuerDN;
  /** The serial number of the certificate identifying the key. */
  private BigInteger serialNumber;

  /**
   * Create a new <code>KeyGroupEntry</code>.
   * 
   * @param moduleID The key module ID to which this entry belongs to.
   * @param issuerAndSerial The issuer and serial number which uniquely
   * identifies a certificate within the key module.
   */
  public KeyGroupEntry(String moduleID, IssuerAndSerial issuerAndSerial) {
    this.moduleID = moduleID;
    this.issuerDN = issuerAndSerial.getIssuerDN();
    this.serialNumber = issuerAndSerial.getSerial();
  }

  /**
   * Create a new <code>KeyGroupEntry</code>.
   * 
   * @param moduleID The key module ID to which this entry belongs to.
   * @param issuerDN The isser DN of the certificate within the key module.
   * @param serialNumber The serial number of the certificate within the key
   * module.
   */
  public KeyGroupEntry(
    String moduleID,
    String issuerDN,
    BigInteger serialNumber) {
    this.moduleID = moduleID;
    this.issuerDN = issuerDN;
    this.serialNumber = serialNumber;
  }

  /**
   * Return the key module ID to which this <code>KeyGroupEntry</code> belongs
   * to.
   * 
   * @return The key module ID.
   */
  public String getModuleID() {
    return moduleID;
  }

  /**
   * Return the issuer DN of this <code>KeyGroupEntry</code> for identifying the
   * certificate within the key module.
   * 
   * @return The issuer DN of the certificate.
   */
  public String getIssuerDN() {
    return issuerDN;
  }

  /**
   * Return the serial number of this <code>KeyGroupEntry</code> for identifying
   * the certificate within the key module.
   * 
   * @return The serial number of the certificate.
   */
  public BigInteger getSerialNumber() {
    return serialNumber;
  }

  /**
   * Compare this <code>KeyGroupEntry</code> to another.
   *
   * @param other The <code>KeyGroupEntry</code> to compare to.
   * @return <code>true</code>, if module ID, isser DN and serial number of
   * <code>other</code> match the ones contained in this object, otherwise
   * <code>false</code>.
   * @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object other) {
    if (other instanceof KeyGroupEntry) {
      KeyGroupEntry entry = (KeyGroupEntry) other;
      return getModuleID().equals(entry.getModuleID())
        && getIssuerDN().equals(entry.getIssuerDN())
        && getSerialNumber().equals(entry.getSerialNumber());
    }
    return false;
  }
  
  /**
   * @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return getModuleID().hashCode()
      ^ getIssuerDN().hashCode()
      ^ getSerialNumber().hashCode();
  }
}