1 package ejava.examples.txagent.jpa;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import javax.persistence.EntityManager;
8 import javax.persistence.Query;
9
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12
13 import ejava.examples.txagent.bo.Booking;
14 import ejava.examples.txagent.dao.DAOException;
15 import ejava.examples.txagent.dao.BookingDAO;
16
17 public class JPABookingDAO implements BookingDAO {
18 Logger log = LoggerFactory.getLogger(JPABookingDAO.class);
19
20 private EntityManager em;
21
22 public void setEntityManager(EntityManager em) {
23 this.em = em;
24 }
25
26 public Booking createBooking(Booking booking)
27 throws DAOException {
28 try {
29 log.debug("persisting booking:" + booking);
30
31 em.persist(booking);
32
33 log.debug("booking persisted:" + booking);
34 return booking;
35 }
36 catch (RuntimeException ex) {
37 log.debug("error persisting booking:" + booking, ex);
38 throw new DAOException("error persisting booking:" +
39 booking, ex);
40 }
41 }
42
43 public Booking getBooking(long id) throws DAOException {
44 try {
45 log.debug("getting booking:" + id);
46 Booking booking = em.find(Booking.class, id);
47 log.debug("found booking:" + booking);
48 return booking;
49 }
50 catch (RuntimeException ex) {
51 log.debug("error getting booking:" + id, ex);
52 throw new DAOException("error getting booking:" + id, ex);
53 }
54 }
55
56 public List<Booking> getBookings(int index, int count)
57 throws DAOException {
58 return getBookings("getAllBookings", null, index, count);
59 }
60
61 @SuppressWarnings("unchecked")
62 public List<Booking> getBookings(
63 String queryName, Map<String, Object> params,
64 int index, int count)
65 throws DAOException {
66 try {
67 Query query = em.createNamedQuery(queryName)
68 .setFirstResult(index)
69 .setMaxResults(count);
70 if (params != null && !params.keySet().isEmpty()) {
71 for(String key: params.keySet()) {
72 query.setParameter(key, params.get(key));
73 }
74 }
75 List<Booking> bookings = query.getResultList();
76 log.debug(bookings.size() + " bookings found");
77 return bookings;
78 }
79 catch (RuntimeException ex) {
80 log.debug("error getting bookings:" + queryName +
81 ", params=" + params, ex);
82 throw new DAOException("error getting bookings:" + queryName +
83 ", params=" + params, ex);
84 }
85 }
86
87 public Booking removeBooking(Booking booking)
88 throws DAOException {
89 try {
90 log.debug("removing booking:" + booking);
91 booking = em.find(Booking.class,
92 booking.getId());
93 em.remove(booking);
94 log.debug("removed booking:" + booking);
95 return booking;
96 }
97 catch (RuntimeException ex) {
98 log.debug("error removing booking:" + booking, ex);
99 throw new DAOException("error removing booking:" +
100 booking, ex);
101 }
102 }
103
104 public Booking updateBooking(Booking booking) throws DAOException {
105 try {
106 log.debug("merging booking:" + booking);
107 Booking updated = em.merge(booking);
108 log.debug("merged booking:" + updated);
109 return updated;
110 }
111 catch (RuntimeException ex) {
112 log.debug("error merging booking:" + booking, ex);
113 throw new DAOException("error merging booking:" +
114 booking, ex);
115 }
116 }
117
118 public Booking getBookingByConfirmation(String confirmation)
119 throws DAOException {
120
121 Map<String, Object> params = new HashMap<String, Object>();
122 params.put("confirmation", confirmation);
123 return getBookings(
124 "getBookingByConfirmation", params, 0, 1).get(0);
125 }
126
127 }