/* * Copyright (C) 2003-2009 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.services.wcm.publication.lifecycle.stageversion.ui; import javax.jcr.Node; import javax.jcr.RepositoryException; import org.exoplatform.ecm.resolver.JCRResourceResolver; import org.exoplatform.ecm.webui.presentation.UIBaseNodePresentation; import org.exoplatform.ecm.webui.utils.JCRExceptionManager; import org.exoplatform.ecm.webui.utils.Utils; import org.exoplatform.portal.webui.util.Util; import org.exoplatform.resolver.ResourceResolver; import org.exoplatform.services.cms.impl.DMSConfiguration; import org.exoplatform.services.cms.templates.TemplateService; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.wcm.core.NodeLocation; import org.exoplatform.web.application.RequireJS; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.core.lifecycle.Lifecycle; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SAS * Author : eXoPlatform * chuong_phan@exoplatform.com * Mar 5, 2009 */ @ComponentConfig( lifecycle = Lifecycle.class, events = { @EventConfig(listeners = UIVersionViewer.DownloadActionListener.class) } ) public class UIVersionViewer extends UIBaseNodePresentation { /** The original node. */ private NodeLocation originalNodeLocation; /** The node. */ private NodeLocation nodeLocation; /** The resource resolver. */ private JCRResourceResolver resourceResolver ; /** The Constant log. */ private static final Log LOG = ExoLogger.getLogger(UIVersionViewer.class.getName()); /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.UIBaseNodePresentation#getNode() */ public Node getNode() throws Exception { return NodeLocation.getNodeByLocation(nodeLocation); } /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.NodePresentation#setNode(javax.jcr.Node) */ public void setNode(Node node) { nodeLocation = NodeLocation.getNodeLocationByNode(node); } /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.UIBaseNodePresentation#getOriginalNode() */ public Node getOriginalNode() { return NodeLocation.getNodeByLocation(originalNodeLocation); } /** * Sets the original node. * * @param originalNode the new original node */ public void setOriginalNode(Node originalNode) { originalNodeLocation = NodeLocation.getNodeLocationByNode(originalNode); } /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.UIBaseNodePresentation#getRepositoryName() */ public String getRepositoryName() throws Exception { return getRepository(); } /* (non-Javadoc) * @see org.exoplatform.portal.webui.portal.UIPortalComponent#getTemplate() */ public String getTemplate() { TemplateService templateService = getApplicationComponent(TemplateService.class); String userName = Util.getPortalRequestContext().getRemoteUser() ; String templatePath = null; try { String nodeType = getOriginalNode().getPrimaryNodeType().getName(); if(templateService.isManagedNodeType(nodeType)) templatePath = templateService.getTemplatePathByUser(false, nodeType, userName) ; } catch (RepositoryException e) { templatePath = null; } return templatePath ; } /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.UIBaseNodePresentation#getTemplatePath() */ public String getTemplatePath() throws Exception { return getRepository(); } /* * (non-Javadoc) * @see * org.exoplatform.webui.core.UIComponent#getTemplateResourceResolver(org. * exoplatform.webui.application.WebuiRequestContext, java.lang.String) */ public ResourceResolver getTemplateResourceResolver(WebuiRequestContext context, String template) { try{ DMSConfiguration dmsConfiguration = getApplicationComponent(DMSConfiguration.class); String workspace = dmsConfiguration.getConfig().getSystemWorkspace(); resourceResolver = new JCRResourceResolver(workspace); } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn(e.getMessage()); } } return resourceResolver ; } /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.NodePresentation#getNodeType() */ public String getNodeType() throws Exception { return null; } /* (non-Javadoc) * @see org.exoplatform.ecm.webui.presentation.NodePresentation#isNodeTypeSupported() */ public boolean isNodeTypeSupported() { return false; } public UIComponent getCommentComponent() { return null; } public UIComponent getRemoveAttach() throws Exception { return null; } public UIComponent getRemoveComment() throws Exception { return null; } public UIComponent getUIComponent(String mimeType) throws Exception { return Utils.getUIComponent(mimeType, this); } public static class DownloadActionListener extends EventListener<UIVersionViewer> { public void execute(Event<UIVersionViewer> event) throws Exception { UIVersionViewer uiComp = event.getSource(); UIApplication uiApp = uiComp.getAncestorOfType(UIApplication.class); try { String downloadLink = uiComp.getDownloadLink(org.exoplatform.wcm.webui.Utils.getFileLangNode(uiComp.getNode())); RequireJS requireJS = event.getRequestContext().getJavascriptManager().getRequireJS(); requireJS.require("SHARED/ecm-utils", "ecmutil").addScripts("ecmutil.ECMUtils.ajaxRedirect('" + downloadLink + "');"); } catch(RepositoryException e) { if (LOG.isErrorEnabled()) { LOG.error("Repository cannot be found", e); } return ; } catch (Exception e) { JCRExceptionManager.process(uiApp, e); return; } } } }