/* * 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.ecm.webui.tree.selectone; import javax.jcr.Node; import javax.jcr.RepositoryException; import org.exoplatform.ecm.webui.selector.UISelectable; import org.exoplatform.ecm.webui.tree.UIBaseNodeTreeSelector; import org.exoplatform.services.cms.BasePath; import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIComponent; 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 SAS * @author : Hoa.Pham * hoa.pham@exoplatform.com * Jun 23, 2008 */ @ComponentConfig( template = "classpath:groovy/ecm/webui/tree/selectone/UISelectPathPanel.gtmpl", events = { @EventConfig(listeners = UISelectTaxonomyPanel.SelectActionListener.class) } ) public class UISelectTaxonomyPanel extends UISelectPathPanel { private UIPageIterator uiPageIterator_ = null; private static String TAXONOMY_TREE = "taxonomyTree"; private String taxonomyTreePath = ""; public String getTaxonomyTreePath() { return taxonomyTreePath; } public void setTaxonomyTreePath(String taxonomyTreePath) { this.taxonomyTreePath = taxonomyTreePath; } public UISelectTaxonomyPanel() throws Exception { this.uiPageIterator_ = addChild(UIPageIterator.class, null, "UISelectPathIterate"); } public String getPathTaxonomy() throws Exception { NodeHierarchyCreator nodeHierarchyCreator = getApplicationComponent(NodeHierarchyCreator.class); return nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_STORAGE_PATH); } public String getDisplayName(Node node) throws RepositoryException { return getAncestorOfType(UIOneTaxonomySelector.class).getTaxonomyLabel(node); } static public class SelectActionListener extends EventListener<UISelectTaxonomyPanel> { public void execute(Event<UISelectTaxonomyPanel> event) throws Exception { UISelectTaxonomyPanel uiSelectPathPanel = event.getSource(); UIOneTaxonomySelector uiTaxonomySelector = uiSelectPathPanel.getParent(); UITreeTaxonomyList uiTreeList = uiTaxonomySelector.getChild(UITreeTaxonomyList.class); UIContainer uiTreeSelector = uiSelectPathPanel.getParent(); String value = event.getRequestContext().getRequestParameter(OBJECTID); String taxoTreeName = uiTreeList.getUIFormSelectBox(TAXONOMY_TREE).getValue(); Node taxoTreeNode = uiTaxonomySelector.getTaxoTreeNode(taxoTreeName); String taxoTreePath = taxoTreeNode.getPath(); value = value.replace(taxoTreePath, taxoTreeName); if (uiTreeSelector instanceof UIOneNodePathSelector) { if (!((UIOneNodePathSelector) uiTreeSelector).isDisable()) { StringBuffer sb = new StringBuffer(); sb.append(((UIOneNodePathSelector) uiTreeSelector).getWorkspaceName()) .append(":") .append(value); value = sb.toString(); } } String returnField = ((UIBaseNodeTreeSelector)uiTreeSelector).getReturnFieldName(); ((UISelectable)((UIBaseNodeTreeSelector)uiTreeSelector).getSourceComponent()).doSelect(returnField, value) ; if (uiTreeSelector instanceof UIOneNodePathSelector) { UIPopupWindow uiPopupWindow = uiTreeSelector.getAncestorOfType(UIPopupWindow.class); if (uiPopupWindow != null) { uiPopupWindow.setShow(false); uiPopupWindow.setRendered(false); event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupWindow); } UIComponent component = ((UIOneNodePathSelector) uiTreeSelector).getSourceComponent().getParent(); if (component != null) { event.getRequestContext().addUIComponentToUpdateByAjax(component); return; } } if (uiTreeSelector instanceof UIOneTaxonomySelector) { UIPopupWindow uiPopupWindow = uiTreeSelector.getAncestorOfType(UIPopupWindow.class); UIComponent parentOfUITreeSelector = uiTreeSelector.getParent(); if ((parentOfUITreeSelector instanceof UIPopupWindow) || (uiPopupWindow != null && ((UIContainer)parentOfUITreeSelector).getChildren().size() == 1)) { uiPopupWindow.setShow(false); uiPopupWindow.setRendered(false); event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupWindow); } UIComponent component = ((UIOneTaxonomySelector) uiTreeSelector).getSourceComponent().getParent(); if (component != null) { event.getRequestContext().addUIComponentToUpdateByAjax(component); } } } } }