1 package org.myorg.jpatickets.ejb;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import javax.annotation.PostConstruct;
8 import javax.annotation.PreDestroy;
9 import javax.ejb.Stateless;
10 import javax.ejb.TransactionAttribute;
11 import javax.ejb.TransactionAttributeType;
12 import javax.persistence.EntityManager;
13 import javax.persistence.PersistenceContext;
14
15 import org.myorg.jpatickets.bl.EventMgmt;
16 import org.myorg.jpatickets.bl.EventMgmtImpl;
17 import org.myorg.jpatickets.bl.UnavailableException;
18 import org.myorg.jpatickets.bo.Event;
19 import org.myorg.jpatickets.bo.Seat;
20 import org.myorg.jpatickets.bo.Ticket;
21 import org.myorg.jpatickets.bo.Venue;
22 import org.myorg.jpatickets.dao.EventMgmtDAO;
23 import org.myorg.jpatickets.dao.EventMgmtDAOImpl;
24 import org.myorg.jpatickets.dao.VenueDAOImpl;
25 import org.myorg.jpatickets.dto.EventDTO;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 @Stateless
30 public class EventMgmtEJB implements EventMgmtRemote {
31 private static final Logger logger = LoggerFactory.getLogger(EventMgmtEJB.class);
32
33
34 private EntityManager em;
35
36 private EventMgmtDAO edao;
37 private EventMgmt eventMgmt;
38
39 @PostConstruct
40 public void init() {
41 logger.debug("*** EventMgmtEJB:init({}) ***", super.hashCode());
42
43 edao = new EventMgmtDAOImpl();
44 ((EventMgmtDAOImpl)edao).setEntityManager(em);
45 VenueDAOImpl vdao = new VenueDAOImpl();
46 vdao.setEntityManager(em);
47 eventMgmt = new EventMgmtImpl();
48 ((EventMgmtImpl)eventMgmt).setEventDAO(edao);
49 ((EventMgmtImpl)eventMgmt).setVenueDAO(vdao);
50 }
51
52 @PreDestroy
53 public void destroy() {
54 logger.debug("*** EventMgmtEJB:destroy({}) ***", super.hashCode());
55 }
56
57
58 @Override
59 @TransactionAttribute(TransactionAttributeType.REQUIRED)
60 public Event createEvent(Event event, Venue venue) throws UnavailableException {
61 return eventMgmt.createEvent(event, venue);
62 }
63
64 @Override
65 @TransactionAttribute(TransactionAttributeType.SUPPORTS)
66 public Event getEvent(int id) {
67 logger.debug("getEvent({})", id);
68 return eventMgmt.getEvent(id);
69 }
70
71 @Override
72 public Event getEventCleansed(int id) {
73 logger.debug("getCleansedEvent({})", id);
74 Event event = getEvent(id);
75 return toCleansed(event);
76 }
77
78 private Event toCleansed(Event bo) {
79 Event pojo = new Event(bo.getId());
80 pojo.setName(bo.getName());
81 pojo.setStartTime(bo.getStartTime());
82 List<Ticket> tickets = new ArrayList<Ticket>(bo.getTickets().size());
83 for (Ticket t: bo.getTickets()) {
84 toCleansed(t, pojo);
85 }
86 pojo.setTickets(tickets);
87 return pojo;
88 }
89
90 private Ticket toCleansed(Ticket bo, Event event) {
91
92 Ticket pojo = new Ticket(event, bo.getSeat());
93 pojo.setPrice(bo.getPrice());
94 pojo.setSold(bo.isSold());
95 return pojo;
96 }
97
98 @Override
99 public Event getEventTouchedSome(int id) {
100 logger.debug("getEventTouchedSome({})", id);
101 Event event = getEvent(id);
102
103 event.getTickets().size();
104 return event;
105 }
106
107 @Override
108 public Event getEventTouchedMore(int id) {
109 logger.debug("getEventTouchedMore({})", id);
110 Event event = getEvent(id);
111
112 event.getTickets().size();
113 event.getVenue().getName();
114 for (Ticket t: event.getTickets()) {
115 t.getSeat().getPosition();
116 }
117 return event;
118 }
119
120 @Override
121 public Event getEventFetchedSome(int id) {
122 logger.debug("getEventFetchedSome({})", id);
123 Event event = eventMgmt.fetchEventTickets(id);
124 return event;
125 }
126
127 @Override
128 public Event getEventFetchedMore(int id) {
129 logger.debug("getEventFetchedMore({})", id);
130 Event event = eventMgmt.fetchEventTicketsSeats(id);
131 return event;
132 }
133
134 @Override
135 public EventDTO getEventLazyDTO(int id) {
136 logger.debug("getEventLazyDTO({})", id);
137 Event event = eventMgmt.getEvent(id);
138 return toEventDTO(event);
139 }
140
141 private EventDTO toEventDTO(Event event) {
142 EventDTO dto = new EventDTO();
143 dto.setId(event.getId());
144 dto.setEventName(event.getName());
145 dto.setVenueName(event.getVenue().getName());
146 dto.setStartTime(event.getStartTime());
147 dto.setNumTickets(event.getTickets().size());
148 return dto;
149 }
150
151 @Override
152 public EventDTO getEventFetchedDTO(int eventId) {
153 logger.debug("getEventFetchedDTO({})", eventId);
154 Map<String, Object> dtoData = edao.fetchEventDTOData(eventId);
155 return toEventDTO(dtoData);
156 }
157
158 private EventDTO toEventDTO(Map<String, Object> dtoData) {
159 EventDTO dto = new EventDTO();
160 Event event = (Event) dtoData.get(EventMgmtDAO.EVENT);
161 String venueName = (String) dtoData.get(EventMgmtDAO.VENUE_NAME);
162 int numTickets = (Integer) dtoData.get(EventMgmtDAO.NUM_TICKETS);
163 dto.setId(event.getId());
164 dto.setEventName(event.getName());
165 dto.setStartTime(event.getStartTime());
166 dto.setVenueName(venueName);
167 dto.setNumTickets(numTickets);
168 return dto;
169 }
170
171 }