View Javadoc
1   /*
2    * Copyright (C) 2003-2007 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.component.explorer;
18  
19  import java.util.Collections;
20  import java.util.Comparator;
21  import java.util.List;
22  
23  import org.exoplatform.commons.utils.LazyPageList;
24  import org.exoplatform.commons.utils.ListAccess;
25  import org.exoplatform.commons.utils.ListAccessImpl;
26  import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction;
27  import org.exoplatform.ecm.webui.utils.Utils;
28  import org.exoplatform.portal.webui.util.Util;
29  import org.exoplatform.services.cms.drives.DriveData;
30  import org.exoplatform.services.cms.drives.ManageDriveService;
31  import org.exoplatform.webui.config.annotation.ComponentConfig;
32  import org.exoplatform.webui.config.annotation.EventConfig;
33  import org.exoplatform.webui.core.UIComponent;
34  import org.exoplatform.webui.core.UIContainer;
35  import org.exoplatform.webui.core.UIPageIterator;
36  import org.exoplatform.webui.core.UIPopupWindow;
37  import org.exoplatform.webui.event.Event;
38  import org.exoplatform.webui.event.EventListener;
39  import org.exoplatform.webui.form.UIFormSelectBox;
40  
41  /**
42   * Created by The eXo Platform SARL
43   * Author : Ly Dinh Quang
44   *          quang.ly@exoplatform.com
45   *          xxx5669@gmail.com
46   * 10 févr. 09
47   */
48  @ComponentConfig(
49      template = "app:/groovy/webui/component/explorer/UIDriveSelector.gtmpl",
50      events = {
51        @EventConfig(listeners = UIDriveSelector.AddDriveActionListener.class),
52        @EventConfig(listeners = UIDriveSelector.CancelActionListener.class)
53      }
54  )
55  public class UIDriveSelector extends UIContainer {
56    private UIPageIterator uiPageIterator_;
57  
58    public UIDriveSelector() throws Exception {
59      uiPageIterator_ = addChild(UIPageIterator.class, null, "DriveSelectorList");
60    }
61  
62    public UIPageIterator getUIPageIterator() { return uiPageIterator_; }
63  
64    public List getListDrive() throws Exception { return uiPageIterator_.getCurrentPageData(); }
65  
66    public void updateGrid() throws Exception {
67      ListAccess<DriveData> driveList = new ListAccessImpl<DriveData>(DriveData.class, getDrives());
68      LazyPageList<DriveData> dataPageList = new LazyPageList<DriveData>(driveList, 10);
69      uiPageIterator_.setPageList(dataPageList);
70    }
71    
72    public List<DriveData> getDrives() throws Exception {
73      ManageDriveService driveService = getApplicationComponent(ManageDriveService.class) ;
74      List<DriveData> driveList =
75        driveService.getDriveByUserRoles(Util.getPortalRequestContext().getRemoteUser(), Utils.getMemberships());
76      Collections.sort(driveList, new DriveComparator()) ;
77      return driveList ;
78    }
79  
80    static public class DriveComparator implements Comparator<DriveData> {
81      public int compare(DriveData d1, DriveData d2) throws ClassCastException {
82        String name1 = d1.getName();
83        String name2 = d2.getName();
84        return name1.compareToIgnoreCase(name2);
85      }
86    }
87  
88    static public class CancelActionListener extends EventListener<UIDriveSelector> {
89      public void execute(Event<UIDriveSelector> event) throws Exception {
90        UIDriveSelector driveSelector = event.getSource();
91        UIComponent uiComponent = driveSelector.getParent();
92        if (uiComponent != null) {
93          if (uiComponent instanceof UIPopupWindow) {
94            ((UIPopupWindow)uiComponent).setShow(false);
95            ((UIPopupWindow)uiComponent).setRendered(false);
96            event.getRequestContext().addUIComponentToUpdateByAjax(((UIPopupWindow)uiComponent).getParent());
97            return;
98          }
99        }
100     }
101   }
102 
103   static public class AddDriveActionListener extends EventListener<UIDriveSelector> {
104     public void execute(Event<UIDriveSelector> event) throws Exception {
105       String driveName = event.getRequestContext().getRequestParameter(OBJECTID);
106       UIDriveSelector driveSelector = event.getSource();
107       UIJcrExplorerEditContainer editContainer = driveSelector.getAncestorOfType(UIJcrExplorerEditContainer.class);
108       UIJcrExplorerEditForm form = editContainer.getChild(UIJcrExplorerEditForm.class);
109       UIFormInputSetWithAction driveNameInput = form.getChildById("DriveNameInput");
110       driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME).setValue(driveName);
111       UIComponent uiComponent = driveSelector.getParent();
112       UIFormSelectBox typeSelectBox = form.getChildById(UIJCRExplorerPortlet.USECASE);
113       if (UIJCRExplorerPortlet.PARAMETERIZE.equals(typeSelectBox.getValue())) {
114         UIFormInputSetWithAction uiParamPathInput = form.getChildById(UIJcrExplorerEditForm.PARAM_PATH_ACTION);
115         uiParamPathInput.setRendered(true);
116       }
117       if (uiComponent != null) {
118         if (uiComponent instanceof UIPopupWindow) {
119           ((UIPopupWindow)uiComponent).setShow(false);
120           ((UIPopupWindow)uiComponent).setRendered(false);
121           event.getRequestContext().addUIComponentToUpdateByAjax(((UIPopupWindow)uiComponent).getParent());
122           return;
123         }
124       }
125     }
126   }
127 }