/* * Copyright (C) 2003-2008 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.ecm.connector.fckeditor; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.jcr.Node; import javax.jcr.nodetype.NodeType; import javax.ws.rs.core.CacheControl; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.exoplatform.container.ExoContainer; import org.exoplatform.services.cms.templates.TemplateService; import org.exoplatform.services.wcm.utils.WCMCoreUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Created by The eXo Platform SAS * * @author : Hoa.Pham hoa.pham@exoplatform.com Jun 23, 2008 */ public class FCKFolderHandler { private TemplateService templateService; private FCKMessage fckMessage; public FCKFolderHandler(ExoContainer container) { templateService = WCMCoreUtils.getService(TemplateService.class); fckMessage = new FCKMessage(); } public String getFolderType(final Node node) throws Exception { // need use a service to get extended folder type for the node NodeType nodeType = node.getPrimaryNodeType(); String primaryType = nodeType.getName(); if (templateService.getDocumentTemplates().contains(primaryType)) return null; if (FCKUtils.NT_UNSTRUCTURED.equals(primaryType) || FCKUtils.NT_FOLDER.equals(primaryType)) return primaryType; if (nodeType.isNodeType(FCKUtils.NT_UNSTRUCTURED) || nodeType.isNodeType(FCKUtils.NT_FOLDER)) { // check if the nodetype is exo:videoFolder... return primaryType; } return primaryType; } public String getFolderURL(final Node folder) throws Exception { return FCKUtils.createWebdavURL(folder); } /** * Creates the folder element for connector response look like {@code <folder name="" * url="" folderType="" />} * * @param document the document * @param child the child * @param folderType the folder type * @return the org.w3c.dom.Element element * @throws Exception the exception */ public Element createFolderElement(Document document, Node child, String folderType) throws Exception { Element folder = document.createElement("Folder"); folder.setAttribute("name", child.getName()); folder.setAttribute("url", getFolderURL(child)); folder.setAttribute("folderType", folderType); return folder; } public Response createNewFolder(Node currentNode, String newFolderName, String language) throws Exception { CacheControl cacheControl = new CacheControl(); cacheControl.setNoCache(true); Document document = null; DateFormat dateFormat = new SimpleDateFormat(FCKUtils.IF_MODIFIED_SINCE_DATE_FORMAT); if (currentNode != null) { if (!FCKUtils.hasAddNodePermission(currentNode)) { Object[] args = { currentNode.getPath() }; document = fckMessage.createMessage(FCKMessage.FOLDER_PERMISSION_CREATING, FCKMessage.ERROR, language, args); return Response.ok(document, new MediaType("text", "xml")) .cacheControl(cacheControl) .header(FCKUtils.LAST_MODIFIED_PROPERTY, dateFormat.format(new Date())) .build(); } if (currentNode.hasNode(newFolderName)) { Object[] args = { currentNode.getPath(), newFolderName }; document = fckMessage.createMessage(FCKMessage.FOLDER_EXISTED, FCKMessage.ERROR, language, args); return Response.ok(document, new MediaType("text", "xml")) .cacheControl(cacheControl) .header(FCKUtils.LAST_MODIFIED_PROPERTY, dateFormat.format(new Date())) .build(); } currentNode.addNode(newFolderName, FCKUtils.NT_FOLDER); currentNode.getSession().save(); Element rootElement = FCKUtils.createRootElement("createFolder", currentNode, getFolderType(currentNode)); document = rootElement.getOwnerDocument(); Element errorElement = document.createElement("Message"); errorElement.setAttribute("number", Integer.toString(FCKMessage.FOLDER_CREATED)); errorElement.setAttribute("text", fckMessage.getMessage(FCKMessage.FOLDER_CREATED, null, language)); errorElement.setAttribute("type", FCKMessage.ERROR); rootElement.appendChild(errorElement); return Response.ok(document, new MediaType("text", "xml")) .cacheControl(cacheControl) .header(FCKUtils.LAST_MODIFIED_PROPERTY, dateFormat.format(new Date())) .build(); } document = fckMessage.createMessage(FCKMessage.FOLDER_NOT_CREATED, FCKMessage.ERROR, language, null); return Response.ok(document, new MediaType("text", "xml")) .cacheControl(cacheControl) .header(FCKUtils.LAST_MODIFIED_PROPERTY, dateFormat.format(new Date())) .build(); } }