/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.frameworks.jcr.command.web.fckeditor;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
import org.exoplatform.frameworks.jcr.command.web.GenericWebAppContext;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by The eXo Platform SAS .
*
* @author <a href="mailto:gennady.azarenkov@exoplatform.com">Gennady Azarenkov</a>
* @version $Id: GetFoldersOrFilesCommand.java 34445 2009-07-24 07:51:18Z dkatayev $
*/
public class GetFoldersOrFilesCommand extends FCKConnectorXMLOutput implements Command
{
public boolean execute(Context context) throws Exception
{
GenericWebAppContext webCtx = (GenericWebAppContext)context;
HttpServletResponse response = webCtx.getResponse();
HttpServletRequest request = webCtx.getRequest();
String filter = (String)context.get("Command");
String type = (String)context.get("Type");
if (type == null)
type = "";
// To limit browsing set Servlet init param "digitalAssetsPath" with desired JCR path
// String rootFolderStr =
// (String)context.get("org.exoplatform.frameworks.jcr.command.web.fckeditor.digitalAssetsPath"
// );
//
// if(rootFolderStr == null)
// rootFolderStr = "/";
//
// // set current folder
// String currentFolderStr = get;
// if(currentFolderStr == null)
// currentFolderStr = "";
// else if(currentFolderStr.length() < rootFolderStr.length())
// currentFolderStr = rootFolderStr;
//
// String jcrMapping = (String)context.get(GenericWebAppContext.JCR_CONTENT_MAPPING);
// if(jcrMapping == null)
// jcrMapping = DisplayResourceCommand.DEFAULT_MAPPING;
//
// String workspace = (String)webCtx.get(AppConstants.DIGITAL_ASSETS_PROP);
// if(workspace == null)
// workspace = AppConstants.DEFAULT_DIGITAL_ASSETS_WS;
//
// webCtx.setCurrentWorkspace(workspace);
//
// Node currentFolder = (Node) webCtx.getSession().getItem(currentFolderStr);
//
// initRootElement(filter, type, currentPath, request.getContextPath()+currentPath);
// String url = request.getContextPath()+jcrMapping+"?"+
// "workspace="+digitalWS+
// "&path="+currentFolderStr;
// /portal/jcr?workspace=collaboration&path=/Digital Assets/Pictures/my
// images/39515971.u1D8dTVD.wilersee_5924.jpg
String workspace = (String)webCtx.get(AppConstants.DIGITAL_ASSETS_PROP);
if (workspace == null)
workspace = AppConstants.DEFAULT_DIGITAL_ASSETS_WS;
String currentFolderStr = getCurrentFolderPath(webCtx);
webCtx.setCurrentWorkspace(workspace);
Node currentFolder = (Node)webCtx.getSession().getItem(currentFolderStr);
String repoName = ((ManageableRepository)webCtx.getSession().getRepository()).getConfiguration().getName();
String url = request.getContextPath() + makeRESTPath(repoName, workspace, currentFolderStr);
initRootElement(filter, type, currentFolderStr, url);
Document doc = rootElement.getOwnerDocument();
if (!filter.equals("GetFiles"))
{
Element nodesElement = rootElement.getOwnerDocument().createElement("Folders");
rootElement.appendChild(nodesElement);
NodeIterator nodeList = currentFolder.getNodes();
while (nodeList.hasNext())
{
Node n = nodeList.nextNode();
// System.out.println(" >>> "+n.getPath());
if (n.isNodeType("nt:folder") || n.isNodeType("nt:unstructured"))
{
Element folderElement = doc.createElement("Folder");
folderElement.setAttribute("name", n.getName());
nodesElement.appendChild(folderElement);
}
}
}
if (!filter.equals("GetFolders"))
{
Element nodesElement = rootElement.getOwnerDocument().createElement("Files");
rootElement.appendChild(nodesElement);
NodeIterator nodeList = currentFolder.getNodes();
while (nodeList.hasNext())
{
Node n = nodeList.nextNode();
// System.out.println(" >>> " + n.getPath() + " "
// + n.isNodeType("nt:file") + " " + n.getPrimaryNodeType().getName());
if (n.isNodeType("nt:file"))
{
Element fileElement = doc.createElement("File");
long size = n.getNode("jcr:content").getProperty("jcr:data").getLength();
fileElement.setAttribute("name", n.getName());
fileElement.setAttribute("size", "" + size);
nodesElement.appendChild(fileElement);
}
}
}
outRootElement(response);
return false;
}
}