UISelectTaxonomyPanel.java
/*
* 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);
}
}
}
}
}