View Javadoc
1   /*
2    * Copyright (C) 2003-2009 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.wcm.webui.selector.page;
18  
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import org.exoplatform.commons.utils.LazyPageList;
23  import org.exoplatform.commons.utils.ListAccess;
24  import org.exoplatform.commons.utils.ListAccessImpl;
25  import org.exoplatform.ecm.webui.selector.UISelectable;
26  import org.exoplatform.portal.mop.user.UserNode;
27  import org.exoplatform.webui.config.annotation.ComponentConfig;
28  import org.exoplatform.webui.config.annotation.EventConfig;
29  import org.exoplatform.webui.core.UIContainer;
30  import org.exoplatform.webui.core.UIPageIterator;
31  import org.exoplatform.webui.event.Event;
32  import org.exoplatform.webui.event.EventListener;
33  
34  /**
35   * Created by The eXo Platform SAS
36   * Author : eXoPlatform
37   * chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com
38   * Jun 30, 2009
39   */
40  @ComponentConfig(
41      template = "classpath:groovy/wcm/webui/selector/page/UIPageSelectorPanel.gtmpl",
42      events = {
43          @EventConfig(listeners = UIPageSelectorPanel.SelectActionListener.class)
44      }
45  )
46  public class UIPageSelectorPanel extends UIContainer {
47  
48    /** The Constant PAGE_SELECTOR_ITERATOR. */
49    private static final String PAGE_SELECTOR_ITERATOR = "UIPageSelectorIterator";
50  
51    /** The page iterator. */
52    private UIPageIterator pageIterator;
53  
54    /** The selected page. */
55    private UserNode selectedNode;
56  
57    /**
58     * Instantiates a new uI page selector panel.
59     *
60     * @throws Exception the exception
61     */
62    public UIPageSelectorPanel() throws Exception {
63      pageIterator = addChild(UIPageIterator.class, null, PAGE_SELECTOR_ITERATOR);
64    }
65  
66    /**
67     * Update grid.
68     */
69    public void updateGrid() {
70      List<UserNode> children = null;
71      if (selectedNode == null) {
72        UIPageSelector pageSelector = getAncestorOfType(UIPageSelector.class);
73        UIPageNodeSelector pageNodeSelector = pageSelector.getChild(UIPageNodeSelector.class);
74        UserNode rootNode = pageNodeSelector.getRootNodeOfSelectedNav();
75        children = new ArrayList<UserNode>(rootNode.getChildren());
76      } else {
77        children = new ArrayList<UserNode>(selectedNode.getChildren());
78      }
79      ListAccess<UserNode> pageNodeList = new ListAccessImpl<UserNode>(UserNode.class, children);
80      LazyPageList<UserNode> pageList = new LazyPageList<UserNode>(pageNodeList, 10);
81      pageIterator.setPageList(pageList);
82    }
83  
84    /**
85     * Gets the selectable pages.
86     *
87     * @return the selectable pages
88     *
89     * @throws Exception the exception
90     */
91    @SuppressWarnings("unchecked")
92    public List getSelectablePages() throws Exception {
93      return pageIterator.getCurrentPageData();
94    }
95  
96    /**
97     * Gets the selected node.
98     *
99     * @return the selected node
100    */
101   public UserNode getSelectedNode() {
102     return selectedNode;
103   }
104 
105   /**
106    * Sets the selected node.
107    *
108    * @param selectedNode the new selected node
109    */
110   public void setSelectedNode(UserNode selectedNode) {
111     this.selectedNode = selectedNode;
112   }
113 
114   /**
115    * Gets the page iterator.
116    *
117    * @return the page iterator
118    */
119   public UIPageIterator getPageIterator() {
120     return pageIterator;
121   }
122 
123   /**
124    * Sets the page iterator.
125    *
126    * @param pageIterator the new page iterator
127    */
128   public void setPageIterator(UIPageIterator pageIterator) {
129     this.pageIterator = pageIterator;
130   }
131 
132   /**
133    * The listener interface for receiving selectAction events.
134    * The class that is interested in processing a selectAction
135    * event implements this interface, and the object created
136    * with that class is registered with a component using the
137    * component's <code>addSelectActionListener</code> method. When
138    * the selectAction event occurs, that object's appropriate
139    * method is invoked.
140    */
141   public static class SelectActionListener extends EventListener<UIPageSelectorPanel> {
142 
143     /* (non-Javadoc)
144      * @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
145      */
146     public void execute(Event<UIPageSelectorPanel> event) throws Exception {
147       UIPageSelectorPanel pageSelectorPanel = event.getSource();
148       String uri = event.getRequestContext().getRequestParameter(OBJECTID) ;
149       UIPageSelector pageSelector = pageSelectorPanel.getAncestorOfType(UIPageSelector.class);
150       ((UISelectable)pageSelector.getSourceComponent()).doSelect(pageSelector.getReturnFieldName(), uri);
151     }
152   }
153 }