package scrum.server.collaboration;
import ilarkesto.base.Str;
import ilarkesto.core.logging.Log;
import ilarkesto.io.IO;
import ilarkesto.persistence.AEntity;
import ilarkesto.persistence.DaoService;
import ilarkesto.persistence.TransactionService;
import ilarkesto.webapp.Servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import scrum.client.common.LabelSupport;
import scrum.client.common.ReferenceSupport;
import scrum.server.ScrumWebApplication;
import scrum.server.WebSession;
import scrum.server.common.AHttpServlet;
import scrum.server.journal.ProjectEventDao;
import scrum.server.project.Project;
import scrum.server.project.ProjectDao;
public class CommentServlet extends AHttpServlet {
private static final long serialVersionUID = 1;
private static Log log = Log.get(CommentServlet.class);
private transient DaoService daoService;
private transient CommentDao commentDao;
private transient ProjectDao projectDao;
private transient ProjectEventDao projectEventDao;
private transient TransactionService transactionService;
@Override
protected void onRequest(HttpServletRequest req, HttpServletResponse resp, WebSession session) throws IOException {
req.setCharacterEncoding(IO.UTF_8);
String projectId = req.getParameter("projectId");
String entityId = req.getParameter("entityId");
String text = req.getParameter("text");
String name = Str.cutRight(req.getParameter("name"), 33);
if (Str.isBlank(name)) name = null;
String email = Str.cutRight(req.getParameter("email"), 33);
if (Str.isBlank(email)) email = null;
log.info("Comment from the internets");
log.info(" projectId: " + projectId);
log.info(" entityId: " + entityId);
log.info(" name: " + name);
log.info(" email: " + email);
log.info(" text: " + text);
log.info(" Request-Data:");
log.info(Servlet.toString(req, " "));
String message;
try {
message = postComment(projectId, entityId, text, name, email);
} catch (Throwable ex) {
log.error("Posting comment failed.", "\n" + Servlet.toString(req, " "), ex);
message = "<h2>Failure</h2><p>Posting your comment failed: <strong>" + Str.getRootCauseMessage(ex)
+ "</strong></p><p>We are sorry, please try again later.</p>";
}
String returnUrl = req.getParameter("returnUrl");
if (returnUrl == null) returnUrl = "http://kunagi.org/message.html?#{message}";
returnUrl = returnUrl.replace("{message}", Str.encodeUrlParameter(message));
resp.sendRedirect(returnUrl);
}
private String postComment(String projectId, String entityId, String text, String name, String email) {
if (projectId == null) throw new RuntimeException("projectId == null");
Project project = projectDao.getById(projectId);
AEntity entity = daoService.getById(entityId);
Comment comment = commentDao.postComment(entity, text, name, email, true);
project.updateHomepage(entity, true);
String reference = ((ReferenceSupport) entity).getReference();
String label = ((LabelSupport) entity).getLabel();
projectEventDao
.postEvent(project, comment.getAuthorName() + " commented on " + reference + " " + label, entity);
transactionService.commit();
return "<h2>Comment posted</h2><p>Thank you for your comment!</p><p>Back to <a href=\"" + reference
+ ".html\">" + label + ".</p>";
}
@Override
protected void onInit(ServletConfig config) {
ScrumWebApplication app = ScrumWebApplication.get(config);
daoService = app.getDaoService();
commentDao = app.getCommentDao();
projectDao = app.getProjectDao();
transactionService = app.getTransactionService();
projectEventDao = app.getProjectEventDao();
}
}