package se.sics.gvod.ls.ws.rest;
import com.sun.jersey.api.client.ClientResponse;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import se.sics.gvod.ls.video.snapshot.Experiment;
import se.sics.gvod.ls.ws.persistent.ExperimentEntity;
import se.sics.gvod.ls.video.snapshot.Stats;
import se.sics.gvod.ls.ws.WS;
import se.sics.gvod.ls.ws.persistent.StatsEntity;
/**
*
* @author Niklas Wahlén <nwahlen@kth.se>
*/
@Path("video")
@Stateless
public class StatsRestResource {
@PersistenceContext(unitName = "se.sics.gvod.ls_ls-ws_war_1.0-SNAPSHOTPU")
private EntityManager em;
public StatsRestResource() {
}
@POST
@Path("stats")
@Consumes({"application/json"})
public void createStats(Stats s) {
em.persist(WS.getStatsEntity(s));
}
@PUT
@Path("stats")
@Consumes({"application/json"})
public void editStats(Stats s) {
em.merge(WS.getStatsEntity(s));
}
@DELETE
@Path("stats/{id}")
public void removeStats(@PathParam("id") int id) {
em.remove(findStats(id));
}
@GET
@Path("stats/{id}")
@Produces({"application/json"})
public Stats findStats(@PathParam("id") int id) {
return WS.getStats(em.find(StatsEntity.class, id));
}
@GET
@Path("stats/count")
@Produces("text/plain")
public String countStats() {
javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<StatsEntity> rt = cq.from(StatsEntity.class);
cq.select(em.getCriteriaBuilder().count(rt));
javax.persistence.Query q = em.createQuery(cq);
return String.valueOf(((Long) q.getSingleResult()).intValue());
}
@GET
@Path("experiment/{id}/{iteration}")
@Produces("application/json")
public Response findExperimentIteration(@PathParam("id") Integer id, @PathParam("iteration") Integer iteration) {
Query q = em.createNamedQuery("StatsEntity.findByExperimentIteration");
q.setParameter("id", id);
q.setParameter("iteration", iteration);
q.setMaxResults(1);
List l = q.getResultList();
if(l.isEmpty()) {
return Response.status(Response.Status.NOT_FOUND).build();
} else {
StatsEntity se = (StatsEntity) l.get(0);
String[] strs = new String[] {"" + se.getExperimentId(), "" + se.getExperimentIteration()};
return Response.status(Response.Status.OK).entity(strs).build();
}
}
@POST
@Path("experiment")
@Consumes("application/json")
public void createExperiment(Experiment e) {
em.persist(WS.getExperimentEntity(e));
}
@PUT
@Path("experiment")
@Consumes({"application/json"})
public void editExperiment(Experiment e) {
em.merge(WS.getExperimentEntity(e));
}
@DELETE
@Path("experiment/{id}")
public void removeExperiment(@PathParam("id") int id) {
em.remove(findExperiment(id));
}
@GET
@Path("experiment/{id}")
@Produces("application/json")
public Experiment findExperiment(@PathParam("id") Integer id) {
return WS.getExperiment(em.find(ExperimentEntity.class, id));
}
@GET
@Path("experiment/count")
@Produces("text/plain")
public String countExperiment() {
javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<ExperimentEntity> rt = cq.from(ExperimentEntity.class);
cq.select(em.getCriteriaBuilder().count(rt));
javax.persistence.Query q = em.createQuery(cq);
return String.valueOf(((Long) q.getSingleResult()).intValue());
}
@GET
@Path("experiment/max")
@Produces("text/plain")
public String maxExperimentId() {
Query maxExperimentIdQuery = em.createNamedQuery("ExperimentEntity.findMaxId");
return String.valueOf((Integer) maxExperimentIdQuery.getSingleResult());
}
}