package controllers.crud; import static play.libs.Json.toJson; import static models.ContentStatus.*; import java.util.Date; import java.util.List; import javax.inject.Inject; import com.google.common.collect.ImmutableMap; import controllers.HttpUtils; import models.ContentReport; import models.ContentReport.ContentType; import models.ContentStatus; import models.Post; import models.User; import models.dao.ContentReportDAO; import models.dao.PostDAO; import play.Logger; import play.Logger.ALogger; import play.mvc.Result; import play.utils.crud.APIController; public class PostAPIController extends APIController<Long, Post> { private static ALogger log = Logger.of(PostAPIController.class); private ContentReportDAO contentReportDAO; private PostDAO postDAO; @Inject public PostAPIController(PostDAO postDAO, ContentReportDAO contentReportDAO) { super(postDAO, Long.class, Post.class); this.postDAO = postDAO; this.contentReportDAO = contentReportDAO; } @Override public Result create() { /* TODO: Result check = checkRequired("url"); if (check != null) { return check; } String url = jsonText("url"); try { new URL(url ); } catch (MalformedURLException e) { return badRequest(toJson(ImmutableMap.of( "status", "error", "message", e.getMessage()))); } Post m = new Post(); m.setStatus(Post.Status.NEW); m.setUrl(url); Long key = postDAO.create(m); */ return TODO; } public Result approve(Long key) { if (log.isDebugEnabled()) log.debug("approve <- " + key); Post post = postDAO.get(key); if (log.isDebugEnabled()) log.debug("post : " + post); if (post == null) return notFound(); ContentStatus status = post.getStatus(); if (status == NEW || status == UPDATED) { User user = HttpUtils.loginUser(ctx()); post.setStatus(APPROVED); post.setApprovedBy(user); post.setApprovedOn(new Date()); postDAO.update(post); List<ContentReport> reports = contentReportDAO.findForContent(ContentType.POST, key); for (ContentReport report : reports) { if (report.getStatus() == ContentReport.Status.NEW) { report.setStatus(ContentReport.Status.IGNORED); report.setUpdatedBy(user); contentReportDAO.update(report); } } return ok(toJson(ImmutableMap.of("status", "ok", "key", key))); } else { return badRequest(toJson(ImmutableMap.of("status", "error", "message", "wrong status", "status", status.name()))); } } public Result remove(Long key) { if (log.isDebugEnabled()) log.debug("remove <- " + key); Post post = postDAO.get(key); if (log.isDebugEnabled()) log.debug("post : " + post); if (post == null) return notFound(); User user = HttpUtils.loginUser(ctx()); post.setStatus(REMOVED); post.setUpdatedBy(user); postDAO.update( post); List<ContentReport> reports = contentReportDAO.findForContent(ContentType.POST, key); for (ContentReport report : reports) { if (report.getStatus() == ContentReport.Status.NEW) { report.setStatus(ContentReport.Status.PROCESSED); report.setUpdatedBy(user); contentReportDAO.update(report); } } return ok(toJson(ImmutableMap.of("status", "ok", "key", key))); } public Result expire(Long key) { if (log.isDebugEnabled()) log.debug("expire <- " + key); Post post = postDAO.get(key); if (log.isDebugEnabled()) log.debug("post : " + post); if (post == null) return notFound(); ContentStatus status = post.getStatus(); if (status == NEW || status == UPDATED || status == APPROVED) { User user = HttpUtils.loginUser(ctx()); post.setStatus(EXPIRED); post.setUpdatedBy(user); postDAO.update(post); List<ContentReport> reports = contentReportDAO.findForContent(ContentType.POST, key); for (ContentReport report : reports) { if (report.getStatus() == ContentReport.Status.NEW) { report.setStatus(ContentReport.Status.PROCESSED); report.setUpdatedBy(user); contentReportDAO.update(report); } } return ok(toJson(ImmutableMap.of("status", "ok", "key", key))); } else { return badRequest(toJson(ImmutableMap.of("status", "error", "message", "wrong status", "status", status.name()))); } } }