View Javadoc
1   /*
2    * Copyright (C) 2003-2008 eXo Platform SAS.
3    *
4    * This program is free software; you can redistribute it and/or
5    * modify it under the terms of the GNU Affero General Public License
6    * as published by the Free Software Foundation; either version 3
7    * of the License, or (at your option) any later version.
8    *
9    * This program is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   * GNU General Public License for more details.
13   *
14   * You should have received a copy of the GNU General Public License
15   * along with this program; if not, see<http://www.gnu.org/licenses/>.
16   */
17  package org.exoplatform.ecm.webui.tree.selectone;
18  
19  import javax.jcr.Node;
20  import javax.jcr.RepositoryException;
21  
22  import org.exoplatform.ecm.webui.selector.UISelectable;
23  import org.exoplatform.ecm.webui.tree.UIBaseNodeTreeSelector;
24  import org.exoplatform.services.cms.BasePath;
25  import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
26  import org.exoplatform.webui.config.annotation.ComponentConfig;
27  import org.exoplatform.webui.config.annotation.EventConfig;
28  import org.exoplatform.webui.core.UIComponent;
29  import org.exoplatform.webui.core.UIContainer;
30  import org.exoplatform.webui.core.UIPageIterator;
31  import org.exoplatform.webui.core.UIPopupWindow;
32  import org.exoplatform.webui.event.Event;
33  import org.exoplatform.webui.event.EventListener;
34  
35  /**
36   * Created by The eXo Platform SAS
37   * @author : Hoa.Pham
38   *          hoa.pham@exoplatform.com
39   * Jun 23, 2008
40   */
41  
42  @ComponentConfig(
43      template =  "classpath:groovy/ecm/webui/tree/selectone/UISelectPathPanel.gtmpl",
44      events = {
45          @EventConfig(listeners = UISelectTaxonomyPanel.SelectActionListener.class)
46      }
47  )
48  public class UISelectTaxonomyPanel extends UISelectPathPanel {
49    private UIPageIterator uiPageIterator_ = null;
50    private static String TAXONOMY_TREE = "taxonomyTree";
51    private String taxonomyTreePath = "";
52  
53    public String getTaxonomyTreePath() {
54      return taxonomyTreePath;
55    }
56  
57    public void setTaxonomyTreePath(String taxonomyTreePath) {
58      this.taxonomyTreePath = taxonomyTreePath;
59    }
60  
61    public UISelectTaxonomyPanel() throws Exception {
62      this.uiPageIterator_ = addChild(UIPageIterator.class, null, "UISelectPathIterate");
63    }
64  
65    public String getPathTaxonomy() throws Exception {
66      NodeHierarchyCreator nodeHierarchyCreator = getApplicationComponent(NodeHierarchyCreator.class);
67      return nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_STORAGE_PATH);
68    }
69  
70    public String getDisplayName(Node node) throws RepositoryException {
71      return getAncestorOfType(UIOneTaxonomySelector.class).getTaxonomyLabel(node);
72    }
73  
74    static public class SelectActionListener extends EventListener<UISelectTaxonomyPanel> {
75      public void execute(Event<UISelectTaxonomyPanel> event) throws Exception {
76        UISelectTaxonomyPanel uiSelectPathPanel = event.getSource();
77        UIOneTaxonomySelector uiTaxonomySelector = uiSelectPathPanel.getParent();
78        UITreeTaxonomyList uiTreeList = uiTaxonomySelector.getChild(UITreeTaxonomyList.class);
79        UIContainer uiTreeSelector = uiSelectPathPanel.getParent();
80        String value = event.getRequestContext().getRequestParameter(OBJECTID);
81        String taxoTreeName = uiTreeList.getUIFormSelectBox(TAXONOMY_TREE).getValue();
82        Node taxoTreeNode = uiTaxonomySelector.getTaxoTreeNode(taxoTreeName);
83        String taxoTreePath = taxoTreeNode.getPath();
84        value = value.replace(taxoTreePath, taxoTreeName);
85  
86        if (uiTreeSelector instanceof UIOneNodePathSelector) {
87          if (!((UIOneNodePathSelector) uiTreeSelector).isDisable()) {
88            StringBuffer sb = new StringBuffer();
89            sb.append(((UIOneNodePathSelector) uiTreeSelector).getWorkspaceName())
90              .append(":")
91              .append(value);
92            value = sb.toString();
93          }
94        }
95  
96        String returnField = ((UIBaseNodeTreeSelector)uiTreeSelector).getReturnFieldName();
97        ((UISelectable)((UIBaseNodeTreeSelector)uiTreeSelector).getSourceComponent()).doSelect(returnField, value) ;
98  
99        if (uiTreeSelector instanceof UIOneNodePathSelector) {
100         UIPopupWindow uiPopupWindow = uiTreeSelector.getAncestorOfType(UIPopupWindow.class);
101         if (uiPopupWindow != null) {
102           uiPopupWindow.setShow(false);
103           uiPopupWindow.setRendered(false);
104           event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupWindow);
105         }
106         UIComponent component = ((UIOneNodePathSelector) uiTreeSelector).getSourceComponent().getParent();
107         if (component != null) {
108           event.getRequestContext().addUIComponentToUpdateByAjax(component);
109           return;
110         }
111       }
112       if (uiTreeSelector instanceof UIOneTaxonomySelector) {
113         UIPopupWindow uiPopupWindow = uiTreeSelector.getAncestorOfType(UIPopupWindow.class);
114         UIComponent parentOfUITreeSelector = uiTreeSelector.getParent();
115         if ((parentOfUITreeSelector instanceof UIPopupWindow)
116           || (uiPopupWindow != null && ((UIContainer)parentOfUITreeSelector).getChildren().size() == 1)) {
117           uiPopupWindow.setShow(false);
118           uiPopupWindow.setRendered(false);
119           event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupWindow);
120         }
121         UIComponent component = ((UIOneTaxonomySelector) uiTreeSelector).getSourceComponent().getParent();
122         if (component != null) {
123           event.getRequestContext().addUIComponentToUpdateByAjax(component);
124         }
125       }
126     }
127   }
128 }