DownloadManageComponent.java
package org.exoplatform.ecm.webui.component.explorer.rightclick.manager;
import org.exoplatform.ecm.webui.component.explorer.UIWorkingArea;
import org.exoplatform.ecm.webui.component.explorer.control.filter.IsNtFileFilter;
import org.exoplatform.ecm.webui.component.explorer.control.listener.UIWorkingAreaActionListener;
import org.exoplatform.services.cms.link.NodeFinder;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.wcm.webui.Utils;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.ext.filter.UIExtensionFilter;
import org.exoplatform.webui.ext.filter.UIExtensionFilters;
import org.exoplatform.webui.ext.manager.UIAbstractManager;
import org.exoplatform.webui.ext.manager.UIAbstractManagerComponent;
import javax.jcr.Node;
import javax.jcr.Session;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
@ComponentConfig(
events = {
@EventConfig(listeners = DownloadManageComponent.DownloadActionListener.class)
}
)
public class DownloadManageComponent extends UIAbstractManagerComponent {
private static final Log LOG = ExoLogger.getLogger(DownloadManageComponent.class.getName());
private static final List<UIExtensionFilter> FILTERS
= Arrays.asList(new UIExtensionFilter[]{new IsNtFileFilter(),
});
@UIExtensionFilters
public List<UIExtensionFilter> getFilters() {
return FILTERS;
}
@Override
public Class<? extends UIAbstractManager> getUIAbstractManagerClass() {
return null;
}
/**
* Parse node path with syntax [workspace:node path] to workspace name and path separately
*
* @param nodePath node path with syntax [workspace:node path]
* @return array of String. element with index 0 is workspace name, remaining one is node path
*/
private String[] parseWorkSpaceNameAndNodePath(String nodePath) {
Matcher matcher = UIWorkingArea.FILE_EXPLORER_URL_SYNTAX.matcher(nodePath);
if (!matcher.find())
return null;
String[] workSpaceNameAndNodePath = new String[2];
workSpaceNameAndNodePath[0] = matcher.group(1);
workSpaceNameAndNodePath[1] = matcher.group(2);
return workSpaceNameAndNodePath;
}
/**
* Gets user session from a specific workspace.
*
* @param workspaceName
* @return session
* @throws Exception
*/
private Session getSession(String workspaceName) throws Exception {
SessionProvider sessionProvider = WCMCoreUtils.getUserSessionProvider();
return sessionProvider.getSession(workspaceName, WCMCoreUtils.getRepository());
}
public static class DownloadActionListener extends UIWorkingAreaActionListener<DownloadManageComponent> {
public void processEvent(Event<DownloadManageComponent> event) throws Exception {
DownloadManageComponent downloadManageComponent = event.getSource();
String nodePath = event.getRequestContext().getRequestParameter(OBJECTID);
String[] workspaceAndPath = downloadManageComponent.parseWorkSpaceNameAndNodePath(nodePath);
Node downloadedNode = (Node) WCMCoreUtils.getService(NodeFinder.class)
.getItem(downloadManageComponent.getSession(workspaceAndPath[0]), workspaceAndPath[1], true);
String downloadLink = Utils.getDownloadLink(downloadedNode);
event.getRequestContext().getJavascriptManager().require("SHARED/jquery", "gj")
.addScripts("setTimeout(\"window.location.assign('" + downloadLink + "');\", 1000);");
}
}
}