/* * Copyright 2011, MyCellar * * This file is part of MyCellar. * * MyCellar is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * MyCellar is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MyCellar. If not, see <http://www.gnu.org/licenses/>. */ package fr.mycellar.interfaces.facades.booking; import java.util.List; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import jpasearch.repository.query.SearchParameters; import org.springframework.transaction.annotation.Transactional; import fr.mycellar.application.booking.BookingEventService; import fr.mycellar.application.booking.BookingService; import fr.mycellar.domain.booking.Booking; import fr.mycellar.domain.booking.BookingBottle; import fr.mycellar.domain.booking.BookingEvent; import fr.mycellar.domain.shared.exception.BusinessException; import fr.mycellar.domain.user.User; /** * @author speralta */ @Named("bookingServiceFacade") @Singleton public class BookingServiceFacadeImpl implements BookingServiceFacade { private BookingEventService bookingEventService; private BookingService bookingService; @Override @Transactional(readOnly = true) public Map<BookingBottle, Long> getBookingsQuantities(BookingEvent bookingEvent) { return bookingService.getQuantities(bookingEvent); } @Override @Transactional(readOnly = true) public Booking getBooking(Integer bookingEventId, User customer) { Booking booking = bookingService.getBooking(bookingEventId, customer); updateBooking(booking); return booking; } @Override @Transactional(readOnly = true) public List<BookingEvent> getCurrentBookingEvents() { return bookingEventService.getCurrentBookingEvents(); } @Override @Transactional(readOnly = true) public long countBookingEvents(SearchParameters<BookingEvent> search) { return bookingEventService.count(search); } @Override @Transactional(readOnly = true) public long countBookings(SearchParameters<Booking> search) { return bookingService.count(search); } @Override @Transactional(readOnly = true) public Booking getBookingById(Integer bookingId) { Booking booking = bookingService.getById(bookingId); updateBooking(booking); return booking; } @Override @Transactional(readOnly = true) public BookingEvent getBookingEventById(Integer bookingEventId) { return bookingEventService.getById(bookingEventId); } @Override @Transactional(readOnly = true) public List<BookingEvent> getBookingEvents(SearchParameters<BookingEvent> search) { return bookingEventService.find(search); } @Override @Transactional(readOnly = true) public List<Booking> getBookings(SearchParameters<Booking> search) { List<Booking> bookings = bookingService.find(search); for (Booking booking : bookings) { updateBooking(booking); } return bookings; } @Override @Transactional(readOnly = true) public List<Booking> getBookingsByBookingBottleId(Integer bookingBottleId) { List<Booking> bookings = bookingService.getAllByBookingBottleId(bookingBottleId); for (Booking booking : bookings) { updateBooking(booking); } return bookings; } @Override @Transactional(readOnly = true) public List<Booking> getBookingsByBookingEventId(Integer bookingEventId) { List<Booking> bookings = bookingService.getAllByBookingEventId(bookingEventId); for (Booking booking : bookings) { updateBooking(booking); } return bookings; } @Override @Transactional public Booking saveBooking(Booking booking) throws BusinessException { return bookingService.saveOrDelete(booking); } @Override @Transactional public BookingEvent saveBookingEvent(BookingEvent bookingEvent) throws BusinessException { return bookingEventService.cleanSaveForBottles(bookingEvent); } @Override @Transactional public void deleteBooking(Booking booking) throws BusinessException { bookingService.delete(booking); } @Override @Transactional public void deleteBookingEvent(BookingEvent bookingEvent) throws BusinessException { bookingEventService.delete(bookingEvent); } @Override @Transactional(readOnly = true) public void validateBookingEvent(BookingEvent bookingEvent) throws BusinessException { bookingEventService.validate(bookingEvent); } @Override @Transactional(readOnly = false) public List<BookingEvent> getBookingEventsLike(String term, SearchParameters<BookingEvent> search) { return bookingEventService.getAllLike(term, search); } @Override @Transactional(readOnly = false) public long countBookingEventsLike(String term, SearchParameters<BookingEvent> search) { return bookingEventService.countAllLike(term, search); } private void updateBooking(Booking booking) { if (booking != null) { // LAZY-INIT booking.getQuantities().hashCode(); // UPDATE BOTTLES if (booking.getBookingEvent() != null) { for (BookingBottle bookingBottle : booking.getBookingEvent().getBottles()) { if (!booking.getQuantities().containsKey(bookingBottle)) { booking.getQuantities().put(bookingBottle, 0); } } } } } @Override @Transactional(readOnly = false) public BookingEvent nextBookingEvent(Integer id) throws BusinessException { return bookingEventService.nextBookingEvent(id); } @Inject public void setBookingEventService(BookingEventService bookingEventService) { this.bookingEventService = bookingEventService; } @Inject public void setBookingService(BookingService bookingService) { this.bookingService = bookingService; } }