1 package ejava.examples.asyncmarket.bo; 2 3 import java.io.Serializable; 4 import java.util.List; 5 import java.util.ArrayList; 6 import java.util.Date; 7 8 import javax.persistence.*; 9 10 @NamedQueries({ 11 @NamedQuery(name="AsyncMarket_getAuctionItems", 12 query="select ai from AuctionItem ai"), 13 @NamedQuery(name="AsyncMarket_getAvailableAuctionItems", 14 query="select ai from AuctionItem ai " + 15 "where ai.closed = false") 16 }) 17 @Entity @Table(name="ASYNCMARKET_AUCTIONITEM") 18 public class AuctionItem implements Serializable { 19 private static final long serialVersionUID = 1L; 20 21 @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 22 private long id; 23 24 @Version 25 private long version; 26 27 @Column(length=32) 28 private String name; 29 @Column(length=32) 30 private String productId; 31 32 @Temporal(TemporalType.TIMESTAMP) 33 private Date startDate; 34 35 @Temporal(TemporalType.TIMESTAMP) 36 private Date endDate; 37 38 private double minBid; 39 40 @ManyToOne(optional=false, fetch=FetchType.LAZY) 41 private Person owner; 42 43 @OneToMany(mappedBy="item", 44 fetch=FetchType.LAZY, 45 cascade= {CascadeType.PERSIST, 46 CascadeType.REMOVE}) 47 private List<Bid> bids = new ArrayList<Bid>(); 48 private boolean closed=false; 49 50 @OneToOne(fetch=FetchType.EAGER) 51 private Bid winningBid; 52 53 public AuctionItem() {} 54 public AuctionItem(long id) { setId(id); } 55 56 public long getId() { 57 return id; 58 } 59 private void setId(long id) { 60 this.id = id; 61 } 62 63 public long getVersion() { 64 return version; 65 } 66 public void setVersion(long version) { 67 this.version = version; 68 } 69 70 public String getName() { 71 return name; 72 } 73 public void setName(String name) { 74 this.name = name; 75 } 76 77 public String getProductId() { 78 return productId; 79 } 80 public void setProductId(String productId) { 81 this.productId = productId; 82 } 83 84 public double getMinBid() { 85 return minBid; 86 } 87 public void setMinBid(double minBid) { 88 this.minBid = minBid; 89 } 90 91 public Date getEndDate() { 92 return endDate; 93 } 94 public void setEndDate(Date endDate) { 95 this.endDate = endDate; 96 } 97 98 public Date getStartDate() { 99 return startDate; 100 } 101 public void setStartDate(Date startDate) { 102 this.startDate = startDate; 103 } 104 105 public Person getOwner() { 106 return owner; 107 } 108 public void setOwner(Person owner) { 109 this.owner = owner; 110 } 111 112 public void closeBids() { 113 closed=true; 114 setWinningBid(getHighestBid()); 115 } 116 117 public void setClosed(boolean closed) { 118 this.closed = closed; 119 } 120 public boolean isClosed() { 121 return closed; 122 } 123 124 public List<Bid> getBids() { 125 return bids; 126 } 127 public void setBids(List<Bid> bids) { 128 this.bids = bids; 129 } 130 131 public void addBid(Bid bid) throws IllegalArgumentException { 132 Bid highest = getHighestBid(); 133 if (highest == null || bid.getAmount() > highest.getAmount()) { 134 bids.add(bid); 135 } 136 } 137 138 @Transient 139 public Bid getHighestBid() { 140 Bid highest = null; 141 for (Bid b : bids) { 142 if (highest == null || b.getAmount() > highest.getAmount()) { 143 highest = b; 144 } 145 } 146 return highest; 147 } 148 149 public Bid getWinningBid() { 150 return winningBid; 151 } 152 public void setWinningBid(Bid winningBid) { 153 this.winningBid = winningBid; 154 } 155 156 public String toString() { 157 StringBuilder text = new StringBuilder(); 158 text.append("id=" + id); 159 text.append(", name=" + name); 160 text.append(", version=" + version); 161 text.append(", startDate=" + startDate); 162 text.append(", endDate=" + endDate); 163 text.append(", midBid=$" + minBid); 164 text.append(", bids(" + bids.size() + ")={"); 165 for(Bid b : bids) { 166 text.append(b.getBidder() + " $" + b.getAmount() + ","); 167 } 168 text.append("}"); 169 text.append(", closed=" + closed); 170 text.append(", winning bid=" + (winningBid==null ? null : 171 winningBid.getAmount() + " $" + winningBid.getAmount())); 172 return text.toString(); 173 } 174 }