/* * 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.wcm.connector.fckeditor; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import org.exoplatform.ecm.connector.fckeditor.FCKUtils; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.rest.resource.ResourceContainer; import org.exoplatform.services.wcm.portal.PortalFolderSchemaHandler; import org.exoplatform.services.wcm.utils.WCMCoreUtils; import org.exoplatform.wcm.connector.BaseConnector; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * * @LevelAPI Experimental * * @anchor LinkConnector */ @Path("/wcmLink/") public class LinkConnector extends BaseConnector implements ResourceContainer { /** The link file handler. */ private LinkFileHandler linkFileHandler; /** The log. */ private static final Log LOG = ExoLogger.getLogger(LinkConnector.class.getName()); /** Instantiates a new link connector. */ public LinkConnector() { linkFileHandler = new LinkFileHandler(); } /** * Gets the folders and files. * * @param repositoryName The repository name. * @param workspaceName The workspace name. * @param jcrPath The JCR path. * @param currentFolder The current folder. * @param command The command. * @param type The type of folder/file. * @param currentPortal The current portal. * @return The folders and files. * @throws Exception The exception * * @anchor LinkConnector.getFoldersAndFiles */ @GET @Path("/getFoldersAndFiles/") // @OutputTransformer(XMLOutputTransformer.class) public Response getFoldersAndFiles(@QueryParam("repositoryName") String repositoryName, @QueryParam("workspaceName") String workspaceName, @QueryParam("jcrPath") String jcrPath, @QueryParam("currentFolder") String currentFolder, @QueryParam("currentPortal") String currentPortal, @QueryParam("command") String command, @QueryParam("type") String type) throws Exception { try { Response response = buildXMLResponseOnExpand(currentFolder, currentPortal, workspaceName, jcrPath, command); if (response != null) return response; } catch (Exception e) { if (LOG.isErrorEnabled()) { LOG.error("Error when perform getFoldersAndFiles: ", e); } } DateFormat dateFormat = new SimpleDateFormat(IF_MODIFIED_SINCE_DATE_FORMAT); return Response.ok().header(LAST_MODIFIED_PROPERTY, dateFormat.format(new Date())).build(); } /* * (non-Javadoc) * @see * org.exoplatform.wcm.connector.fckeditor.BaseConnector#buildXMLResponseOnExpand * (java.lang.String, java.lang.String, java.lang.String, java.lang.String, * java.lang.String) */ protected Response buildXMLResponseOnExpand(String currentFolder, String runningPortal, String workspaceName, String jcrPath, String command) throws Exception { SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider(); Node sharedPortal = livePortalManagerService.getLiveSharedPortal(sessionProvider); Node currentPortalNode = getCurrentPortalNode(jcrPath, runningPortal, sharedPortal); if (currentFolder.length() == 0 || "/".equals(currentFolder)) return buildXMLResponseForRoot(currentPortalNode, sharedPortal, command); String currentPortalRelPath = "/" + currentPortalNode.getName() + "/"; String sharePortalRelPath = "/" + sharedPortal.getName() + "/"; if (!currentPortalNode.getPath().equals(sharedPortal.getPath()) && currentFolder.startsWith(sharePortalRelPath)) { if (currentFolder.equals(sharePortalRelPath)) { return buildXMLResponseForPortal(sharedPortal, null, command); } Node currentContentStorageNode = getCorrectContentStorage(sharedPortal, null, currentFolder); return buildXMLResponseForContentStorage(currentContentStorageNode, command); } else if (!currentPortalNode.getPath().equals(sharedPortal.getPath()) && currentFolder.startsWith(currentPortalRelPath)) { return buildXMLResponseCommon(currentPortalNode, null, currentFolder, command); } else { return buildXMLResponseCommon(sharedPortal, null, currentFolder, command); } } /* * (non-Javadoc) * @seeorg.exoplatform.wcm.connector.fckeditor.BaseConnector# * buildXMLResponseForContentStorage(javax.jcr.Node, java.lang.String) */ protected Response buildXMLResponseForContentStorage(Node node, String command) throws Exception { Element rootElement = FCKUtils.createRootElement(command, node, folderHandler.getFolderType(node)); Document document = rootElement.getOwnerDocument(); Element folders = document.createElement("Foders"); Element files = document.createElement("Files"); for (NodeIterator iterator = node.getNodes(); iterator.hasNext();) { Node child = iterator.nextNode(); if (child.isNodeType(FCKUtils.EXO_HIDDENABLE)) continue; String folderType = folderHandler.getFolderType(child); if (folderType != null) { Element folder = folderHandler.createFolderElement(document, child, folderType); folders.appendChild(folder); } String sourceType = getContentStorageType(); String fileType = linkFileHandler.getFileType(child, sourceType); if (fileType != null) { Element file = linkFileHandler.createFileElement(document, child, fileType); files.appendChild(file); } } rootElement.appendChild(folders); rootElement.appendChild(files); return getResponse(document); } /* * (non-Javadoc) * @see * org.exoplatform.wcm.connector.fckeditor.BaseConnector#getRootContentStorage * (javax.jcr.Node) */ @Override protected Node getRootContentStorage(Node parentNode) throws Exception { try { PortalFolderSchemaHandler folderSchemaHandler = webSchemaConfigService. getWebSchemaHandlerByType(PortalFolderSchemaHandler.class); return folderSchemaHandler.getLinkFolder(parentNode); } catch (Exception e) { if (LOG.isDebugEnabled()) { LOG.debug(e); } return null; } } /* * (non-Javadoc) * @see * org.exoplatform.wcm.connector.fckeditor.BaseConnector#getContentStorageType * () */ @Override protected String getContentStorageType() throws Exception { return FCKUtils.LINK_TYPE; } }