HotelMgmtImpl.java

package info.ejava.examples.ejb.ejbjpa.bl;

import java.util.List;

import info.ejava.examples.ejb.ejbjpa.bo.Floor;
import info.ejava.examples.ejb.ejbjpa.bo.Guest;
import info.ejava.examples.ejb.ejbjpa.bo.Room;
import info.ejava.examples.ejb.ejbjpa.dao.HotelDAO;

public class HotelMgmtImpl implements HotelMgmt {
    private HotelDAO dao;
    
    public void setHotelDao(HotelDAO dao) {
        this.dao = dao;
    }

    @Override
    public Room getRoom(int number) {
        return dao.getRoom(number);
    }

    @Override
    public Floor getFloor(int level) {
        return dao.getFloor(level);
    }

    @Override
    public List<Floor> getFloors(int offset, int limit) {
        return dao.getFloors(offset, limit);
    }
    
    @Override
    public List<Room> getAvailableRooms(Integer level, int offset, int limit) {
        return dao.getAvailableRooms(level, offset, limit);
    }
    
    @Override
    public Guest checkIn(Guest guest, Room room) throws RoomUnavailableExcepton {
        if (room==null) {
            throw new RoomUnavailableExcepton("no room supplied");
        }
        
        Room hotelRoom = dao.getRoom(room.getNumber());
        if (hotelRoom==null) {
            throw new RoomUnavailableExcepton(String.format("room [%d] does not exist", room.getNumber()));
        }
        
        if (hotelRoom.getOccupant()!=null) {
            throw new RoomUnavailableExcepton(String.format("room is occupied by %s", hotelRoom.getOccupant()));
        }
        
        dao.addGuest(guest);
        hotelRoom.setOccupant(guest);
        return guest;
    }
    
    @Override
    public int checkout(Guest guest) {
        Room room=dao.findRoomByGuest(guest);
        if (room!=null) {
            room.setOccupant(null);
            return 1;
        }
        return 0;
    }
}