package org.hibernate.auction.model; import org.hibernate.auction.exceptions.BusinessException; import java.io.Serializable; import java.util.*; /** * A user of the CaveatEmptor auction application. *
* This class represents the user entity of CaveatEmptor business. * The associations are: a Set of Items the user * is selling, a Set of Bids the user has made, * and an Address component. Also a Set of * BuyNows, that is, immediate buys made for an item. *
* The billingDetails are used to calculate and bill the
* user for his activities on our system. The username
* and password are used as login credentials. The
* ranking is a number that is increased by each successful
* transaction, but may also be manually increased (or decreased) by
* the system administrators.
*
*
* @author Christian Bauer
* This method checks if there is only one billing method
* in the set, then makes this the default.
*
* @param billingDetails
*/
public void addBillingDetails(BillingDetails billingDetails) {
if (billingDetails == null)
throw new IllegalArgumentException("Can't add a null BillingDetails.");
this.getBillingDetails().add(billingDetails);
if (getBillingDetails().size() == 1) {
setDefaultBillingDetails(billingDetails);
}
}
/**
* Removes a BillingDetails from the set.
*
* This method checks if the removed is the default element,
* and will throw a BusinessException if there is more than one
* left to chose from. This might actually not be the best way
* to handle this situation.
*
* @param billingDetails
* @throws BusinessException
*/
public void removeBillingDetails(BillingDetails billingDetails)
throws BusinessException {
if (billingDetails == null)
throw new IllegalArgumentException("Can't add a null BillingDetails.");
if (getBillingDetails().size() >= 2) {
getBillingDetails().remove(billingDetails);
setDefaultBillingDetails((BillingDetails)getBillingDetails().iterator().next());
} else {
throw new BusinessException("Please set new default BillingDetails first");
}
}
public BillingDetails getDefaultBillingDetails() { return defaultBillingDetails; }
public void setDefaultBillingDetails(BillingDetails defaultBillingDetails) {
this.defaultBillingDetails = defaultBillingDetails;
}
public Date getCreated() { return created; }
public boolean isAdmin() { return admin; }
public void setAdmin(boolean admin) { this.admin = admin; }
// ********************** Common Methods ********************** //
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
final User user = (User) o;
if (!username.equals(user.username)) return false;
return true;
}
public int hashCode() {
return username.hashCode();
}
public String toString() {
return "User ('" + getId() + "'), " +
"Username: '" + getUsername() + "'";
}
public int compareTo(Object o) {
if (o instanceof User)
return this.getCreated().compareTo( ((User)o).getCreated() );
return 0;
}
// ********************** Business Methods ********************** //
public void increaseRanking() {
setRanking(getRanking() + 1);
}
}