View Javadoc
1   package org.myorg.jpatickets.bl;
2   
3   import java.math.BigDecimal;
4   import java.util.List;
5   
6   import org.myorg.jpatickets.bo.Event;
7   import org.myorg.jpatickets.bo.Seat;
8   import org.myorg.jpatickets.bo.Ticket;
9   import org.myorg.jpatickets.bo.Venue;
10  import org.myorg.jpatickets.dao.EventMgmtDAO;
11  import org.myorg.jpatickets.dao.VenueDAO;
12  
13  public class EventMgmtImpl implements EventMgmt {
14      private EventMgmtDAO edao;
15      private VenueDAO vdao;
16      
17      public void setEventDAO(EventMgmtDAO edao) {
18          this.edao = edao;
19      }
20      public void setVenueDAO(VenueDAO vdao) {
21          this.vdao = vdao;
22      }
23  
24      @Override
25      public Event createEvent(Event event, Venue venue) throws UnavailableException {
26          BigDecimal maxPrice = new BigDecimal(1000);
27          List<Seat> seats = vdao.getSeatsForVenue(venue, 0, 0);
28          for (Seat seat: seats) {
29              Ticket ticket = new Ticket(event, seat);
30              BigDecimal discount = new BigDecimal(seat.getRow()*.1);
31              ticket.setPrice(maxPrice.subtract(maxPrice.multiply(discount)));
32              event.withTicket(ticket);
33          }
34          return edao.createEvent(event);
35      }
36  
37      @Override
38      public Event getEvent(int id) {
39          return edao.getEvent(id);
40      }
41      @Override
42      public Event fetchEventTickets(int id) {
43          return edao.fetchEventTickets(id);
44      }
45      @Override
46      public Event fetchEventTicketsSeats(int id) {
47          return edao.fetchEventTicketsSeats(id);
48      }
49  
50      @Override
51      public List<Seat> findSeats(Event event, String section, Integer row, Integer position, int offset, int limit) {
52          return edao.findSeats(event, section, row, position, offset, limit);
53      }
54      
55      @Override
56      public List<Ticket> getTickets(Event event, List<Seat> seats) {
57          return edao.findTickets(event, seats);
58      }
59  
60      @Override
61      public List<Ticket> reserveSeats(Event event, List<Seat> seats) throws UnavailableException {
62          if (event==null) { throw new IllegalArgumentException("no event provided"); }
63          if (seats==null) { throw new IllegalArgumentException("no seat selected"); }
64  
65          List<Ticket> tickets = getTickets(event, seats);
66          for (Ticket ticket: tickets) {
67              if (ticket.isSold()) {
68                  throw new UnavailableException(String.format("seat %s already sold", ticket.getSeat()));
69              } else {
70                  ticket.setSold(true);
71              }
72          }
73          return tickets;
74      }
75  }