package cz.coffei.foodo.data.rest;
import cz.coffei.foodo.data.dao.MenuDao;
import cz.coffei.foodo.data.entities.MenuItem;
import cz.coffei.foodo.data.exceptions.EntityInvalidException;
import cz.coffei.foodo.data.rest.utils.ErrorHelper;
import sun.security.provider.certpath.OCSPResponse;
import javax.ejb.EJBException;
import javax.ejb.EJBTransactionRolledbackException;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Variant;
import java.sql.Date;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.logging.Logger;
/**
* Created by jtrantin on 25.7.15.
*/
@Path("/menus")
@Produces("application/json;charset=UTF-8")
@Consumes("application/json;charset=UTF-8")
@RequestScoped
public class MenuRESTService {
@Inject
private MenuDao dao;
@Inject
private Logger log;
@GET
@Path("/range/{from}/{to}")
public Response getMenusForRange(@PathParam("from") Date from, @PathParam("to") Date to) {
try {
List<MenuItem> menus = dao.getMenusItemsInRange(from, to);
return Response.ok().entity(menus).build();
} catch (EJBException e) {
IllegalArgumentException illegalArgumentException = ErrorHelper.findExceptionByClass(e, IllegalArgumentException.class);
if(illegalArgumentException!=null) {
return Response.status(Response.Status.BAD_REQUEST).entity("invalid range").build();
}
return Response.status(Response.Status.BAD_REQUEST).build();
}
}
@POST
public Response createMenu(MenuItem menu) {
log.info("Creating new menu:");
log.info(menu.toString());
try {
dao.create(menu);
log.info("Created!");
return Response.created(null).build();
} catch (EntityInvalidException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
} catch (EJBTransactionRolledbackException e) {
return ErrorHelper.processEJBTransactionFailure(e);
}
}
@PUT
@Path("/{id}")
public Response updateMenu(MenuItem menu, @PathParam("id") Long id) {
menu.setId(id);
log.info("Updating menu:");
log.info(menu.toString());
try {
dao.update(menu);
log.info("Updated!");
return Response.ok().build();
} catch (EntityInvalidException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
} catch (EJBTransactionRolledbackException e) {
return ErrorHelper.processEJBTransactionFailure(e);
}
}
@DELETE
@Path("/{id}")
public Response deleteMenu(@PathParam("id") Long id) {
MenuItem menu = new MenuItem();
menu.setId(id);
log.info("Deleting menu:");
log.info(menu.toString());
try {
dao.delete(menu);
log.info("Deleted!");
return Response.ok().build();
} catch (EntityInvalidException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
}
}
}