/* * Copyright (C) 2003-2007 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.webui.component.explorer.popup.admin; import java.util.ArrayList; import java.util.List; import javax.jcr.AccessDeniedException; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import org.exoplatform.commons.utils.LazyPageList; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.commons.utils.ListAccessImpl; import org.exoplatform.ecm.webui.component.explorer.UIDocumentContainer; import org.exoplatform.ecm.webui.component.explorer.UIDocumentInfo; import org.exoplatform.ecm.webui.component.explorer.UIJCRExplorer; import org.exoplatform.ecm.webui.component.explorer.sidebar.UITreeExplorer; import org.exoplatform.ecm.webui.utils.JCRExceptionManager; import org.exoplatform.services.cms.actions.ActionServiceContainer; import org.exoplatform.services.cms.templates.TemplateService; import org.exoplatform.services.wcm.core.NodeLocation; import org.exoplatform.web.application.ApplicationMessage; 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.UIContainer; import org.exoplatform.webui.core.UIPageIterator; import org.exoplatform.webui.core.UIPopupWindow; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SARL * Author : Dang Van Minh * minh.dang@exoplatform.com * Nov 8, 2006 * 9:41:56 AM */ @ComponentConfig( template = "app:/groovy/webui/component/explorer/popup/admin/UIActionList.gtmpl", events = { @EventConfig(listeners = UIActionList.ViewActionListener.class), @EventConfig(listeners = UIActionList.DeleteActionListener.class, confirm = "UIActionList.msg.confirm-delete-action"), @EventConfig(listeners = UIActionList.CloseActionListener.class), @EventConfig(listeners = UIActionList.EditActionListener.class) } ) public class UIActionList extends UIContainer { final static public String[] ACTIONS = {"View", "Edit", "Delete"} ; public UIActionList() throws Exception { addChild(UIPageIterator.class, null, "ActionListIterator"); } @SuppressWarnings("unchecked") public void updateGrid(Node node, int currentPage) throws Exception { UIPageIterator uiIterator = getChild(UIPageIterator.class) ; ListAccess<Object> actionList = new ListAccessImpl<Object>(Object.class, NodeLocation.getLocationsByNodeList(getAllActions(node))); LazyPageList<Object> objPageList = new LazyPageList<Object>(actionList, 10); uiIterator.setPageList(objPageList); if(currentPage > uiIterator.getAvailablePage()) uiIterator.setCurrentPage(uiIterator.getAvailablePage()); else uiIterator.setCurrentPage(currentPage); } public String[] getActions() { return ACTIONS ; } public boolean hasActions() throws Exception{ UIJCRExplorer uiExplorer = getAncestorOfType(UIJCRExplorer.class) ; ActionServiceContainer actionService = getApplicationComponent(ActionServiceContainer.class) ; return actionService.hasActions(uiExplorer.getCurrentNode()); } public List<Node> getAllActions(Node node) { ActionServiceContainer actionService = getApplicationComponent(ActionServiceContainer.class) ; try { return actionService.getActions(node); } catch(Exception e){ return new ArrayList<Node>() ; } } public List getListActions() throws Exception { UIPageIterator uiIterator = getChild(UIPageIterator.class) ; return NodeLocation.getNodeListByLocationList(uiIterator.getCurrentPageData()); } static public class ViewActionListener extends EventListener<UIActionList> { public void execute(Event<UIActionList> event) throws Exception { UIActionList uiActionList = event.getSource() ; String actionName = event.getRequestContext().getRequestParameter(OBJECTID) ; UIJCRExplorer uiExplorer = event.getSource().getAncestorOfType(UIJCRExplorer.class) ; UIActionManager uiActionManager = uiExplorer.findFirstComponentOfType(UIActionManager.class) ; ActionServiceContainer actionService = uiActionList.getApplicationComponent(ActionServiceContainer.class); Node node = actionService.getAction(uiExplorer.getCurrentNode(),actionName); String nodeTypeName = node.getPrimaryNodeType().getName() ; String userName = event.getRequestContext().getRemoteUser() ; TemplateService templateService = uiActionList.getApplicationComponent(TemplateService.class) ; UIApplication uiApp = uiActionList.getAncestorOfType(UIApplication.class) ; try { String path = templateService.getTemplatePathByUser(false, nodeTypeName, userName); if(path == null) { Object[] args = {actionName} ; uiApp.addMessage(new ApplicationMessage("UIActionList.msg.template-null", args, ApplicationMessage.WARNING)) ; return ; } } catch(PathNotFoundException path) { Object[] args = {actionName} ; uiApp.addMessage(new ApplicationMessage("UIActionList.msg.template-empty", args, ApplicationMessage.WARNING)) ; return ; } catch(AccessDeniedException ace) { uiApp.addMessage(new ApplicationMessage("UIActionList.msg.access-denied", null, ApplicationMessage.WARNING)) ; return ; } catch(Exception e) { JCRExceptionManager.process(uiApp, e) ; return ; } if(uiActionManager.getChild(UIActionViewContainer.class) != null) { uiActionManager.removeChild(UIActionViewContainer.class) ; } UIActionViewContainer uiActionViewContainer = uiActionManager.createUIComponent(UIActionViewContainer.class, null, null) ; UIActionViewTemplate uiViewTemplate = uiActionViewContainer.createUIComponent(UIActionViewTemplate.class, null, null) ; uiViewTemplate.setTemplateNode(node) ; uiActionViewContainer.addChild(uiViewTemplate) ; uiActionManager.addChild(uiActionViewContainer) ; uiActionManager.setRenderedChild(UIActionViewContainer.class) ; } } static public class EditActionListener extends EventListener<UIActionList> { public void execute(Event<UIActionList> event) throws Exception { UIActionList uiActionList = event.getSource() ; UIJCRExplorer uiExplorer = uiActionList.getAncestorOfType(UIJCRExplorer.class) ; UIActionListContainer uiActionListContainer = uiActionList.getParent() ; String actionName = event.getRequestContext().getRequestParameter(OBJECTID) ; TemplateService templateService = uiActionList.getApplicationComponent(TemplateService.class) ; String userName = event.getRequestContext().getRemoteUser() ; String repository = uiActionList.getAncestorOfType(UIJCRExplorer.class).getRepositoryName() ; Node currentNode = uiExplorer.getCurrentNode() ; ActionServiceContainer actionService = uiActionList.getApplicationComponent(ActionServiceContainer.class); Node selectedAction = null ; try { selectedAction = actionService.getAction(currentNode,actionName); } catch(PathNotFoundException path) { currentNode.refresh(false) ; UIDocumentContainer uiDocumentContainer = uiExplorer.findFirstComponentOfType(UIDocumentContainer.class) ; UIDocumentInfo uiDocumentInfo = uiDocumentContainer.getChild(UIDocumentInfo.class) ; if(uiExplorer.isShowViewFile()) uiDocumentInfo.setRendered(false) ; else uiDocumentInfo.setRendered(true) ; if(uiExplorer.getPreference().isShowSideBar()) { UITreeExplorer treeExplorer = uiExplorer.findFirstComponentOfType(UITreeExplorer.class); treeExplorer.buildTree(); } selectedAction = actionService.getAction(currentNode,actionName); } String nodeTypeName = selectedAction.getPrimaryNodeType().getName() ; UIApplication uiApp = uiActionList.getAncestorOfType(UIApplication.class) ; try { templateService.getTemplatePathByUser(true, nodeTypeName, userName); } catch(PathNotFoundException path) { Object[] args = {actionName} ; uiApp.addMessage(new ApplicationMessage("UIActionList.msg.template-empty", args, ApplicationMessage.WARNING)) ; return ; } catch(Exception e) { JCRExceptionManager.process(uiApp, e) ; return ; } uiActionListContainer.initEditPopup(selectedAction) ; event.getRequestContext().addUIComponentToUpdateByAjax(uiActionListContainer) ; } } static public class CloseActionListener extends EventListener<UIActionList> { public void execute(Event<UIActionList> event) throws Exception { UIJCRExplorer uiExplorer = event.getSource().getAncestorOfType(UIJCRExplorer.class) ; uiExplorer.setIsHidePopup(false) ; uiExplorer.cancelAction() ; } } static public class DeleteActionListener extends EventListener<UIActionList> { public void execute(Event<UIActionList> event) throws Exception { UIActionList uiActionList = event.getSource() ; UIJCRExplorer uiExplorer = uiActionList.getAncestorOfType(UIJCRExplorer.class) ; ActionServiceContainer actionService = uiActionList.getApplicationComponent(ActionServiceContainer.class) ; String actionName = event.getRequestContext().getRequestParameter(OBJECTID) ; UIActionListContainer uiActionListContainer = uiActionList.getParent() ; UIPopupWindow uiPopup = uiActionListContainer.getChildById("editActionPopup") ; UIApplication uiApp = uiActionList.getAncestorOfType(UIApplication.class) ; if(uiPopup != null && uiPopup.isShow()) { uiPopup.setShowMask(true); uiApp.addMessage(new ApplicationMessage("UIActionList.msg.remove-popup-first", null, ApplicationMessage.WARNING)) ; return ; } if(uiPopup != null && uiPopup.isRendered()) uiActionListContainer.removeChildById("editActionPopup") ; try { actionService.removeAction(uiExplorer.getCurrentNode(), actionName, uiExplorer.getRepositoryName()) ; } catch(AccessDeniedException ace) { uiApp.addMessage(new ApplicationMessage("UIActionList.msg.access-denied", null, ApplicationMessage.WARNING)) ; return ; } UIActionManager uiActionManager = uiExplorer.findFirstComponentOfType(UIActionManager.class) ; uiActionManager.removeChild(UIActionViewContainer.class) ; uiActionList.updateGrid(uiExplorer.getCurrentNode(), uiActionList.getChild(UIPageIterator.class).getCurrentPage()); uiActionManager.setRenderedChild(UIActionListContainer.class); event.getRequestContext().addUIComponentToUpdateByAjax(uiActionManager) ; } } }