/** * This file Copyright (c) 2010-2015 Magnolia International * Ltd. (http://www.magnolia-cms.com). All rights reserved. * * * This file is dual-licensed under both the Magnolia * Network Agreement and the GNU General Public License. * You may elect to use one or the other of these licenses. * * This file is distributed in the hope that it will be * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT. * Redistribution, except as permitted by whichever of the GPL * or MNA you select, is prohibited. * * 1. For the GPL license (GPL), you can redistribute and/or * modify this file under the terms of the GNU General * Public License, Version 3, as published by the Free Software * Foundation. You should have received a copy of the GNU * General Public License, Version 3 along with this program; * if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * 2. For the Magnolia Network Agreement (MNA), this file * and the accompanying materials are made available under the * terms of the MNA which accompanies this distribution, and * is available at http://www.magnolia-cms.com/mna.html * * Any modifications to this file must keep this entire header * intact. * */ package com.puglieseweb.app.web.templates.components; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.List; import javax.jcr.RepositoryException; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import info.magnolia.cms.beans.config.ContentRepository; import info.magnolia.cms.core.Content; import info.magnolia.cms.core.HierarchyManager; import info.magnolia.cms.core.Path; import info.magnolia.context.MgnlContext; import info.magnolia.module.blossom.annotation.Template; /** * A comment component for letting visitors leave feedback. * <p/> * Please note that this style of persistence is not recommended. If you have multiple public instances the submitted * comments will only be stored on one instance. The instances will become inconsistent. The recommended strategy * is to persist comments either in a database or in a clustered JCR repository. */ @Controller @Template(title = "Comments", id = "blossomPugliesewebModule:components/comments") public class CommentsComponent { @RequestMapping("/comments") public String render(ModelMap model, HttpServletRequest request, @RequestParam(value = "action", required = false) String action, Content content) throws RepositoryException { if ("add".equals(action)) { writeComment(request, content); return "redirect:" + request.getRequestURL(); } if ("delete".equals(action)) { deleteComment(request, content); return "redirect:" + request.getRequestURL(); } model.addAttribute("comments", readComments(content)); return "components/comments.jsp"; } private List<Comment> readComments(Content websiteNode) throws RepositoryException { List<Comment> list = new ArrayList<Comment>(); if (websiteNode.hasContent("comments")) { Content commentsNode = websiteNode.getContent("comments"); Collection<Content> children = commentsNode.getChildren(); for (Content commentNode : children) { Comment comment = new Comment(); comment.setName(commentNode.getNodeData("name").getString()); comment.setEmail(commentNode.getNodeData("email").getString()); comment.setText(commentNode.getNodeData("text").getString()); comment.setCreated(commentNode.getNodeData("created").getDate().getTime()); comment.setId(commentNode.getName()); list.add(comment); } } return list; } private void writeComment(HttpServletRequest request, Content websiteNode) throws RepositoryException { Content commentsNode; if (websiteNode.hasContent("comments")) { commentsNode = websiteNode.getContent("comments"); } else { commentsNode = websiteNode.createContent("comments"); } HierarchyManager hierarchyManager = MgnlContext.getHierarchyManager(ContentRepository.WEBSITE); String label = Path.getUniqueLabel(hierarchyManager, commentsNode.getHandle(), "comment"); Content commentNode = commentsNode.createContent(label); commentNode.setNodeData("name", request.getParameter("name")); commentNode.setNodeData("email", request.getParameter("email")); commentNode.setNodeData("text", request.getParameter("text")); commentNode.setNodeData("created", Calendar.getInstance()); websiteNode.save(); } private void deleteComment(HttpServletRequest request, Content websiteNode) throws RepositoryException { if (websiteNode.hasContent("comments")) { Content commentsNode = websiteNode.getContent("comments"); commentsNode.delete(request.getParameter("id")); websiteNode.save(); } } }