⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 item.java

📁 网上拍卖系统
💻 JAVA
字号:
package auction.model;import auction.exceptions.*;import java.io.Serializable;import java.util.*;/** * An item for auction. * * @author Christian Bauer */public class Item implements Serializable, Comparable, Auditable {    private Long id = null;    private int version = 0;    private String name;    private User seller;    private User buyer;    private String description;    private MonetaryAmount initialPrice;    private MonetaryAmount reservePrice;    private Date startDate;    private Date endDate;    private ItemState state;    private User approvedBy;    private Date approvalDatetime;    private List<Bid> bids = new ArrayList<Bid>();    private Bid successfulBid;    private Map<Long,Bid> bidsByIdentifier = new HashMap<Long,Bid>(); // Not very useful    private Set<Category> categories = new HashSet<Category>();    private Set<CategorizedItem> categorizedItems = new HashSet<CategorizedItem>();    private Collection<String> images = new ArrayList<String>();    private Date created = new Date();    /**     * No-arg constructor for JavaBean tools.     */    public Item() {}    /**     * Full constructor     */    public Item(String name, User seller, User buyer, String description,                MonetaryAmount initialPrice, MonetaryAmount reservePrice, Date startDate, Date endDate,                ItemState state, User approvedBy, Date approvalDatetime,                List<Bid> bids, Bid successfulBid, Map<Long, Bid> bidsByIdentifier,                Set<Category> categories, Set<CategorizedItem> categorizedItems,                Collection<String> images) {        this.name = name;        this.seller = seller;        this.buyer = buyer;        this.description = description;        this.initialPrice = initialPrice;        this.reservePrice = reservePrice;        this.startDate = startDate;        this.endDate = endDate;        this.state = state;        this.approvedBy = approvedBy;        this.approvalDatetime = approvalDatetime;        this.bids = bids;        this.successfulBid = successfulBid;        this.bidsByIdentifier = bidsByIdentifier;        this.categories = categories;        this.categorizedItems = categorizedItems;        this.images = images;        // Referential integrity        seller.getItemsForSale().add(this);    }    /**     * Simple constructors     */    public Item(String name, String description, User seller,                MonetaryAmount initialPrice, MonetaryAmount reservePrice,                Date startDate, Date endDate) {        this.name = name;        this.seller = seller;        this.description = description;        this.initialPrice = initialPrice;        this.reservePrice = reservePrice;        this.startDate = startDate;        this.endDate = endDate;        this.state = ItemState.DRAFT;        // Referential integrity        seller.getItemsForSale().add(this);    }    // ********************** Accessor Methods ********************** //    public Long getId() { return id; }    public int getVersion() { return version; }    public String getName() { return name; }    public User getSeller() { return seller; }    public User getBuyer() { return buyer; }    public void setBuyer(User buyer) { this.buyer = buyer; }    public String getDescription() { return description; }    public void setDescription(String description) { this.description = description; }    public MonetaryAmount getInitialPrice() { return initialPrice; }    public MonetaryAmount getReservePrice() { return reservePrice; }    public Date getStartDate() { return startDate; }    public Date getEndDate() { return endDate; }    public ItemState getState() { return state; }    public User getApprovedBy() { return approvedBy; }    public void setApprovedBy(User approvedBy) { this.approvedBy = approvedBy; }    public Date getApprovalDatetime() { return approvalDatetime; }    public void setApprovalDatetime(Date approvalDatetime) { this.approvalDatetime = approvalDatetime; }    public List<Bid> getBids() { return bids; }    public void addBid(Bid bid) {        if (bid == null)            throw new IllegalArgumentException("Can't add a null Bid.");        this.getBids().add(bid);        // Don't have to set the "other" side, a Bid can only be instantiated with a given item    }    public Bid getSuccessfulBid() { return successfulBid; }    public void setSuccessfulBid(Bid successfulBid) {        // Has to preserve the integrity by using a procedure and loop, bad Java...        if (successfulBid != null) {            for (Bid bid : getBids())                bid.setSuccessful(false);            successfulBid.setSuccessful(true);            this.successfulBid = successfulBid;        }    }    public Map<Long, Bid> getBidsByIdentifier() { return bidsByIdentifier; }    public void setBidsByIdentifier(Map<Long, Bid> bidsByIdentifier) { this.bidsByIdentifier = bidsByIdentifier; }    // Read-only, modify through Category#addItem() and Category@removeItem();    public Set<Category> getCategories() { return Collections.unmodifiableSet(categories); }    // Read-only, to create a link, instantiate a CategorizedItem with the right constructor    // To remove a link, use Category.getCategorizedItems().remove()    public Set<CategorizedItem> getCategorizedItems() { return categorizedItems; }    public Collection<String> getImages() { return images; }    public Date getCreated() { return created; }    // ********************** Common Methods ********************** //    public boolean equals(Object o) {        if (this == o) return true;        if (!(o instanceof Item)) return false;        final Item item = (Item) o;        if (! (created.getTime() == item.created.getTime()) ) return false;        if (name != null ? !name.equals(item.name) : item.name != null) return false;        return true;    }    public int hashCode() {        int result;        result = (name != null ? name.hashCode() : 0);        result = 29 * result + created.hashCode();        return result;    }    public String toString() {        return  "Item ('" + getId() + "'), " +                "Name: '" + getName() + "' " +                "Initial Price: '" + getInitialPrice()+ "'";    }    public int compareTo(Object o) {        if (o instanceof Item) {            // Don't compare Date objects! Use the time in milliseconds!            return Long.valueOf(this.getCreated().getTime()).compareTo(                    Long.valueOf( ((Item)o).getCreated().getTime())                   );        }        return 0;    }    // ********************** Business Methods ********************** //        /**     * Places a bid while checking business constraints.     *     * This method may throw a BusinessException if one of the requirements     * for the bid placement wasn't met, e.g. if the auction already ended.     *     * @param bidder     * @param bidAmount     * @param currentMaxBid  the most valuable bid for this item     * @param currentMinBid  the least valuable bid for this item     * @return     * @throws BusinessException     */    public Bid placeBid(User bidder, MonetaryAmount bidAmount,                        Bid currentMaxBid, Bid currentMinBid)        throws BusinessException {        // Check initial price        if (initialPrice.compareTo(bidAmount) > 0) {            throw new BusinessException("Bid lower than initial price");        }        // Check reserve price        if (reservePrice.compareTo(bidAmount) > 0) {            throw new BusinessException("Bid lower than reserve price");        }        // Check highest bid (can also be a different Strategy (pattern))        if (currentMaxBid != null && currentMaxBid.getAmount().compareTo(bidAmount) > 0) {            throw new BusinessException("Bid too low");        }        // Auction is active        if ( !this.getState().equals(ItemState.ACTIVE) )            throw new BusinessException("Auction is not active yet");        // Auction still valid        if ( this.getEndDate().before( new Date() ) )            throw new BusinessException("Can't place new bid, auction already ended");        // Create new Bid        Bid newBid = new Bid(bidAmount, this, bidder);        // Place bid for this Item        this.addBid(newBid);        return newBid;    }    /**     * Anyone can set this item into PENDING state for approval.     */    public void setPendingForApproval() {        state = ItemState.PENDING;    }    /**     * Approve this item for auction and set its state to active.     *     * @param byUser     * @throws BusinessException     */    public void approve(User byUser) throws BusinessException {        if ( !byUser.isAdmin() )            throw new PermissionException("Not an administrator");        if ( !state.equals(ItemState.PENDING) )            throw new IllegalStateException("Item still in draft");        state = ItemState.ACTIVE;        approvedBy = byUser;        approvalDatetime = new Date();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -