package service.rest; import gamification.ExecuteAction; import java.io.IOException; import java.io.StringWriter; import java.util.List; import javax.persistence.EntityTransaction; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.xml.bind.annotation.XmlRootElement; import org.apache.commons.io.IOUtils; import persistency.entities.Comment; import persistency.entities.LoggedUser; import persistency.entities.Session; import persistency.exposed.CommentsExposedBasic; import persistency.exposed.LoggedUserExposed; import persistency.exposed.SessionExposedBasic; import service.rest.wrappers.CommentBasic; import utils.Status.STATE; import admin.AppControl; import com.google.gson.Gson; @Path("comments") @Produces({ MediaType.APPLICATION_JSON }) public class CommentsResource { private Gson g; public CommentsResource() { g = new Gson(); } @GET @Path("{id}") public Response getCommentsForSession(@Context HttpServletRequest request, @PathParam("id") String sessionId){ CommentsExposedBasic commetnsExposed = new CommentsExposedBasic(); LoggedUserExposed lue = new LoggedUserExposed(); List<CommentBasic> allEntities = commetnsExposed.allEntities(sessionId, lue.getCurrentUser(request)); return Response.status(Response.Status.OK) .entity(g.toJson(allEntities)).build(); } @POST @Path("{id}") @Consumes(MediaType.APPLICATION_JSON) public Response placeComment(@Context HttpServletRequest request, @PathParam("id") String sessionId) throws IOException{ Gson g = new Gson(); if (!AppControl.writeMode(request)) { return Response.status(405).entity(g.toJson(new utils.Status(STATE.ERROR, "Comments will be enabled in a few days. "))).build(); } String inReplyOf = request.getParameter("inReplyOf");; StringWriter writer = new StringWriter(); IOUtils.copy(request.getInputStream(), writer, "UTF-8"); String theString = writer.toString(); Data fromJson = g.fromJson(theString, Data.class); SessionExposedBasic ee = new SessionExposedBasic(); Session session = ee.findSessionById(sessionId); LoggedUserExposed pe = new LoggedUserExposed(); LoggedUser person = pe.getCurrentUser(request); // if(request.getUserPrincipal() == null){ // return Response.status(Status.BAD_REQUEST).build(); // } if(session == null || person == null || fromJson.data.trim().length() == 0){ return Response.status(Status.BAD_REQUEST).build(); } CommentsExposedBasic ce = new CommentsExposedBasic(); Comment c = new Comment(); c.setSession(session); c.setCowner(person); // c.setInReplyTo(Integer.parseInt(inReplyOf)); c.setText(fromJson.getData()); ce.createEntity(c); person.addComment(c); pe.updateEntity(person); ExecuteAction.getInstance().execute("comment", person, null); return Response.ok().build(); } @POST @Path("{id}/like") public Response likeUnlike(@Context HttpServletRequest request, @PathParam("id") Integer commentId){ if(!AppControl.writeMode(request)){ return Response.status(Status.BAD_REQUEST).build(); } if(commentId == null){ return Response.status(Status.BAD_REQUEST).build(); } LoggedUserExposed pe = new LoggedUserExposed(); LoggedUser p = pe.getCurrentUser(request); if(p != null){ CommentsExposedBasic ce = new CommentsExposedBasic(); Comment comment = ce.getComment(commentId); if(comment != null){ if(comment.getCowner().getId() == p.getId()){ return Response.status(Status.NOT_ACCEPTABLE).entity(g.toJson(new utils.Status(STATE.ERROR, "This is your comment remember?"))).build(); } if(p.getLikedComments().contains(comment)){ return Response.status(400).build(); // p.getLikedComments().remove(comment); // if(comment.getLikedBy().contains(p)){ // comment.getLikedBy().remove(p); // } } else { p.getLikedComments().add(comment); if(!comment.getLikedBy().contains(p)){ comment.getLikedBy().add(p); p.updateLikes(comment); } } pe.updateEntity(p); ce.updateEntity(comment); LoggedUser cowner = pe.findPersonById(comment.getCowner().getId()); cowner.updateLiked(comment); if(comment.getLikes() >= 10){ cowner.updateLiked5Points(comment); } pe.updateEntity(cowner); } } return Response.ok().build(); } @XmlRootElement public class Data { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } } }