package auction.impl;
import java.util.Collection;
import java.util.List;
import auction.Auction;
import auction.AuctionState;
import auction.Bid;
import auction.Person;
import auction.User;
import auction.states.Pending;
public class AuctionImpl implements Auction {
private List<BidImpl> bids = new java.util.ArrayList<BidImpl>();
private BulletinBoardImpl bulletinBoard = new BulletinBoardImpl();
private String description;
private int endDate;
private Collection<User> joinedUsers = new java.util.ArrayList<User>();
private int minimumBid;
private String name;
private User seller;
private int startDate;
private AuctionState state = Pending.instance;
public AuctionImpl(User seller, String name, String description, int startDate, int endDate, int minimumBid) {
this.seller = seller;
this.name = name;
this.description = description;
this.startDate = startDate;
this.endDate = endDate;
this.minimumBid = minimumBid;
ServerImpl.instance.getAuctions().put(name,this);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#cancelAuction(auction.Person)
*/
public String cancelAuction(Person person){
return state.cancelAuction(this, person);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#close()
*/
public void close() {
state.close(this);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getBidHistory()
*/
public String getBidHistory(){
StringBuffer result = new StringBuffer();
for(Bid b: bids) {
result.append(System.getProperty("line.separator"));
//result.append(b);
}
return result.length()>0 ? result.substring(System.getProperty("line.separator").length()) : "";
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getBids()
*/
public Collection<BidImpl> getBids() {
return bids;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getBulletinBoard()
*/
public BulletinBoardImpl getBulletinBoard() {
return bulletinBoard;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getCurrentBid()
*/
public String getCurrentBid(){
return state.getCurrentBid(this);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getDescription()
*/
public String getDescription() {
return description;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getEndD()
*/
public String getEndD(){
return Integer.toString(endDate);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getEndDate()
*/
public int getEndDate() {
return endDate;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getJoinedUsers()
*/
public Collection<User> getJoinedUsers() {
return joinedUsers;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getMaxBid()
*/
public Bid getMaxBid(){
if(bids.isEmpty())
return null;
return bids.get(bids.size()-1);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getMinBid()
*/
public String getMinBid(){
return Integer.toString(minimumBid);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getMinimumBid()
*/
public int getMinimumBid() {
return minimumBid;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getName()
*/
public String getName() {
return name;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getSeller()
*/
public User getSeller() {
return seller;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getStartD()
*/
public String getStartD(){
return Integer.toString(startDate);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getStartDate()
*/
public int getStartDate() {
return startDate;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#getState()
*/
public AuctionState getState() {
return state;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#join(auction.User)
*/
public String join(UserImpl user) {
return state.join(this, user);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#leave(auction.User)
*/
public String leave(User user) {
return state.leave(this, user);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#minimumAmount()
*/
public int minimumAmount() {
Bid b = getMaxBid();
if (b==null)
return minimumBid;
else
return b.getAmount()*11/10;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#open()
*/
public void open() {
state.open(this);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#placeBid(auction.User, int)
*/
public String placeBid(UserImpl user, int amount){
return state.placeBid(this, user, amount);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#postMessage(auction.Person, java.lang.String)
*/
public String postMessage(Person person, String message){
return state.postMessage(this, person, message);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setDesc(auction.Person, java.lang.String)
*/
public String setDesc(Person person, String value){
return state.setDesc(this, person, value);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setDescription(java.lang.String)
*/
public void setDescription(String description) {
this.description = description;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setEndD(auction.Person, int)
*/
public String setEndD(Person person, int value) {
return state.setEndDate(this, person, value);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setEndDate(int)
*/
public void setEndDate(int endDate) {
this.endDate = endDate;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setMinBid(auction.Person, int)
*/
public String setMinBid(Person person, int value){
return state.setMinBid(this, person, value);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setMinimumBid(int)
*/
public void setMinimumBid(int minimumBid) {
this.minimumBid = minimumBid;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setStartD(auction.Person, int)
*/
public String setStartD(Person person, int value) {
return state.setStartDate(this, person, value);
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setStartDate(int)
*/
public void setStartDate(int startDate) {
this.startDate = startDate;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#setState(auction.AuctionState)
*/
public void setState(AuctionState s) {
state = s;
}
/* (non-Javadoc)
* @see auaction.impl.Auction#toString()
*/
public String toString() {
return name+" "+description+" "+state.getName()+" "+getEndD();
}
}