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 private long id;
21 private long version;
22 private String name;
23 private String productId;
24 private Date startDate;
25 private Date endDate;
26 private double minBid;
27 private Person owner;
28 private List<Bid> bids = new ArrayList<Bid>();
29 private boolean closed=false;
30 private Bid winningBid;
31
32 public AuctionItem() {}
33 public AuctionItem(long id) { setId(id); }
34
35 @Id @GeneratedValue
36 public long getId() {
37 return id;
38 }
39 private void setId(long id) {
40 this.id = id;
41 }
42 @Version
43 public long getVersion() {
44 return version;
45 }
46 public void setVersion(long version) {
47 this.version = version;
48 }
49
50 public String getName() {
51 return name;
52 }
53 public void setName(String name) {
54 this.name = name;
55 }
56 public String getProductId() {
57 return productId;
58 }
59 public void setProductId(String productId) {
60 this.productId = productId;
61 }
62
63 public double getMinBid() {
64 return minBid;
65 }
66 public void setMinBid(double minBid) {
67 this.minBid = minBid;
68 }
69
70 @Temporal(TemporalType.TIMESTAMP)
71 public Date getEndDate() {
72 return endDate;
73 }
74 public void setEndDate(Date endDate) {
75 this.endDate = endDate;
76 }
77 @Temporal(TemporalType.TIMESTAMP)
78 public Date getStartDate() {
79 return startDate;
80 }
81 public void setStartDate(Date startDate) {
82 this.startDate = startDate;
83 }
84
85 @ManyToOne
86 public Person getOwner() {
87 return owner;
88 }
89 public void setOwner(Person owner) {
90 this.owner = owner;
91 }
92 public void closeBids() {
93 closed=true;
94 setWinningBid(getHighestBid());
95 }
96 public void setClosed(boolean closed) {
97 this.closed = closed;
98 }
99 public boolean isClosed() {
100 return closed;
101 }
102
103 @OneToMany(mappedBy="item")
104 public List<Bid> getBids() {
105 return bids;
106 }
107 public void setBids(List<Bid> bids) {
108 this.bids = bids;
109 }
110 public void addBid(Bid bid) throws IllegalArgumentException {
111 Bid highest = getHighestBid();
112 if (highest == null || bid.getAmount() > highest.getAmount()) {
113 bids.add(bid);
114 }
115 }
116
117 @Transient
118 public Bid getHighestBid() {
119 Bid highest = null;
120 for (Bid b : bids) {
121 if (highest == null || b.getAmount() > highest.getAmount()) {
122 highest = b;
123 }
124 }
125 return highest;
126 }
127
128 @OneToOne
129 public Bid getWinningBid() {
130 return winningBid;
131 }
132 public void setWinningBid(Bid winningBid) {
133 this.winningBid = winningBid;
134 }
135
136 public String toString() {
137 StringBuilder text = new StringBuilder();
138 text.append("id=" + id);
139 text.append(", name=" + name);
140 text.append(", version=" + version);
141 text.append(", startDate=" + startDate);
142 text.append(", endDate=" + endDate);
143 text.append(", midBid=$" + minBid);
144 text.append(", bids(" + bids.size() + ")={");
145 for(Bid b : bids) {
146 text.append(b.getBidder() + " $" + b.getAmount() + ",");
147 }
148 text.append("}");
149 text.append(", closed=" + closed);
150 text.append(", winning bid=" + (winningBid==null ? null :
151 winningBid.getAmount() + " $" + winningBid.getAmount()));
152 return text.toString();
153 }
154 }