/*
* 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.security.AccessControlException;
import javax.jcr.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.container.xml.PortalContainerInfo;
import org.exoplatform.services.jcr.access.PermissionType;
import org.exoplatform.services.jcr.core.ExtendedNode;
import org.exoplatform.services.jcr.core.ManageableRepository;
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 FCKUtils {
/** The Constant LAST_MODIFIED_PROPERTY. */
public static final String LAST_MODIFIED_PROPERTY = "Last-Modified";
/** The Constant IF_MODIFIED_SINCE_DATE_FORMAT. */
public static final String IF_MODIFIED_SINCE_DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss z";
public static String GET_FOLDERS_AND_FILES="getFoldersAndFiles";
public static String CREATE_FOLDER = "createFolder";
public static String UPLOAD_FILE = "upload";
public static final String EXO_HIDDENABLE = "exo:hiddenable";
public static final String NT_FILE = "nt:file";
public static final String NT_FOLDER = "nt:folder";
public static final String NT_UNSTRUCTURED = "nt:unstructured";
public final static String DOCUMENT_TYPE = "file";
/** The Constant IMAGE_TYPE. */
public final static String IMAGE_TYPE = "image";
public final static String FLASH_TYPE = "flash";
public final static String LINK_TYPE = "link";
/**
* Creates the root element for connector response. The full connector response looks like:
* {@code
* <Connector command="GetFolders" resourceType="">
* <CurrentFolder folderType="" name="" path="" url=""/>
* </CurrentFolder>
* </Connector>
* }
*
* @param command the command
* @param node the node
* @param folderType the folder type
* @return the org.w3c.dom.Element element
* @throws Exception the exception
*/
public static Element createRootElement(String command, Node node, String folderType) throws Exception {
Document doc = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.newDocument();
StringBuffer currentPath = new StringBuffer(node.getPath());
if (!currentPath.toString().endsWith("/")) {
currentPath.append("/");
}
Element rootElement = doc.createElement("Connector");
doc.appendChild(rootElement);
rootElement.setAttribute("command", command);
rootElement.setAttribute("resourceType", "Node");
Element currentFolderElement = doc.createElement("CurrentFolder");
currentFolderElement.setAttribute("name", node.getName());
currentFolderElement.setAttribute("folderType", folderType);
currentFolderElement.setAttribute("path", currentPath.toString());
currentFolderElement.setAttribute("url", createWebdavURL(node));
rootElement.appendChild(currentFolderElement);
return rootElement;
}
public static boolean hasAddNodePermission(Node node) throws Exception {
try {
((ExtendedNode)node).checkPermission(PermissionType.ADD_NODE) ;
return true ;
} catch (AccessControlException e) {
return false ;
}
}
public static String getPortalName() {
PortalContainerInfo containerInfo = WCMCoreUtils.getService(PortalContainerInfo.class) ;
return containerInfo.getContainerName() ;
}
public static String createWebdavURL(final Node node) throws Exception {
String repository = ((ManageableRepository) node.getSession().getRepository()).getConfiguration().getName();
String workspace = node.getSession().getWorkspace().getName();
String currentPath = node.getPath();
String url = "/" + getPortalName() + "/" + PortalContainer.getCurrentRestContextName()
+ "/jcr/" + repository + "/" + workspace + currentPath;
return url;
}
}