package org.hibernate.auction.model; import java.io.Serializable; import java.util.Date; /** * This is the abstract superclass for BillingDetails. *

* A BillingDetails object is always associated with a single * User and depends on the lifecycle of that user. It represents * one of the billing strategies the User has choosen, usually * on BillingDetails is the default in a collection of many. * * @author Christian Bauer */ public abstract class BillingDetails implements Serializable, Comparable { private Long id = null; private int version; private String ownerName; private User user; private Date created = new Date(); /** * No-arg constructor for JavaBean tools. */ BillingDetails() {} /** * Full constructor; */ protected BillingDetails(String ownerName, User user) { this.ownerName = ownerName; this.user = user; } // ********************** Accessor Methods ********************** // public Long getId() { return id; } public String getOwnerName() { return ownerName; } public void setOwnerName(String ownerName) { this.ownerName = ownerName; } public User getUser() { return user; } public Date getCreated() { return created; } // ********************** Common Methods ********************** // public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof BillingDetails)) return false; final BillingDetails billingDetails = (BillingDetails) o; if (!getCreated().equals(billingDetails.getCreated())) return false; if (!getOwnerName().equals(billingDetails.getOwnerName())) return false; return true; } public int hashCode() { int result; result = getCreated().hashCode(); result = 29 * result + getOwnerName().hashCode(); return result; } public int compareTo(Object o) { // Billing Details are simply sorted by creation date if (o instanceof BillingDetails) return getCreated().compareTo( ((BillingDetails)o).getCreated() ); return 0; } // ********************** Business Methods ********************** // /** * Checks if the billing information is correct. *

* Check algorithm is implemented in subclasses. * * @return boolean */ public abstract boolean isValid(); }