package de.anycook.api;
import de.anycook.api.util.MediaType;
import de.anycook.db.mysql.DBLive;
import de.anycook.news.Case;
import de.anycook.news.Cases;
import de.anycook.session.Session;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.List;
/**
* @author Jan Graßegger<jan@anycook.de>
*/
@Path("/case")
public class CaseApi {
private final Logger logger = LogManager.getLogger(getClass());
@Context
private Session session;
@GET
public List<Case> getCases() {
try {
return Cases.getCases();
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addCase(Case cAse) {
session.checkAdminLogin();
try {
String id = Cases.newCase(cAse);
return Response.created(new URI("/case/"+id)).build();
} catch (SQLException | URISyntaxException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
@GET
@Path("{name}")
public Case getCase(@PathParam("name") String name) {
try {
return Cases.getCase(name);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
} catch (DBLive.CaseNotFoundException e) {
logger.warn(e, e);
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
@PUT
@Path("{name}")
public void updateCase(@PathParam("name") String name, Case caze) {
session.checkAdminLogin();
try {
Cases.updateCase(name, caze.getSyntax());
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
@DELETE
@Path("{name}")
public void deleteCase(@PathParam("name") String name) {
session.checkAdminLogin();
try {
Cases.deleteCase(name);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
}