package com.packtpub.as7development.chapter8.ejb;
import javax.annotation.PostConstruct;
import static javax.ejb.LockType.*;
import javax.ejb.*;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import com.packtpub.as7development.chapter8.exception.SeatBookedException;
import com.packtpub.as7development.chapter8.model.Seat;
import java.util.*;
import java.util.logging.Logger;
@Singleton
@Startup
public class TheatreBox {
private ArrayList<Seat> seatList;
@PostConstruct
public void setupTheatre(){
seatList = new ArrayList<Seat>();
int seatId = 0;
for (int i=0;i<5;i++) {
Seat seat = new Seat(seatId, "Stalls",40);
seatList.add(seat);
seatId++;
}
for (int i=0;i<5;i++) {
Seat seat = new Seat(seatId,"Circle",20);
seatList.add(seat);
seatId++;
}
for (int i=0;i<5;i++) {
Seat seat = new Seat(seatId, "Balcony",10);
seatList.add(seat);
seatId++;
}
}
@Lock(READ)
public ArrayList<Seat> getSeatList() {
return seatList;
}
@Lock(READ)
public int getSeatPrice(int seatId) {
return getSeatList().get(seatId).getPrice();
}
@Lock(WRITE)
public void buyTicket(int seatId ) {
Seat seat = getSeatList().get(seatId);
if (seat.isBooked()) {
throw new SeatBookedException("Seat Already booked!");
}
seat.setBooked(true);
seatEvent.fire(seat);
}
@Inject Event<Seat> seatEvent;
}