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   **************************************************************************/
18  package org.exoplatform.ecm.webui.component.admin.views;
19  
20  import javax.jcr.Node;
21  
22  import org.exoplatform.ecm.permission.info.UIPermissionInputSet;
23  import org.exoplatform.ecm.webui.core.UIPermissionFormBase;
24  import org.exoplatform.ecm.webui.core.UIPermissionManagerBase;
25  import org.exoplatform.ecm.webui.selector.UIGroupMemberSelector;
26  import org.exoplatform.ecm.webui.selector.UISelectable;
27  import org.exoplatform.ecm.webui.utils.Utils;
28  import org.exoplatform.services.security.IdentityConstants;
29  import org.exoplatform.web.application.ApplicationMessage;
30  import org.exoplatform.webui.config.annotation.ComponentConfig;
31  import org.exoplatform.webui.config.annotation.EventConfig;
32  import org.exoplatform.webui.core.UIApplication;
33  import org.exoplatform.webui.core.UIPopupContainer;
34  import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
35  import org.exoplatform.webui.event.Event;
36  import org.exoplatform.webui.event.Event.Phase;
37  import org.exoplatform.webui.event.EventListener;
38  
39  /**
40   * Created by The eXo Platform SARL
41   * Author : Dang Van Minh
42   *          minh.dang@exoplatform.com
43   * Feb 18, 2013
44   * 1:39:45 PM  
45   */
46  
47  @ComponentConfig(
48          lifecycle = UIFormLifecycle.class,
49          template = "app:/groovy/webui/component/admin/view/UIViewPermissionForm.gtmpl",
50          events = {
51            @EventConfig(listeners = UIViewPermissionForm.AddActionListener.class),
52            @EventConfig(phase = Phase.DECODE, listeners = UIViewPermissionForm.SelectUserActionListener.class),
53            @EventConfig(phase = Phase.DECODE, listeners = UIViewPermissionForm.SelectMemberActionListener.class),
54            @EventConfig(phase = Phase.DECODE, listeners = UIViewPermissionForm.AddAnyActionListener.class)
55          }
56        )
57  public class UIViewPermissionForm extends UIPermissionFormBase implements UISelectable{
58    
59    public static final String TAB_PERMISSION   = "permission";
60  
61    public UIViewPermissionForm() throws Exception {
62      removeChildById(UIPermissionFormBase.PERMISSION);
63      addChild(new UIPermissionInputSet(TAB_PERMISSION));
64      UIPermissionInputSet uiPerInputset = getChildById(TAB_PERMISSION);
65      uiPerInputset.setButtonActions(new String[] {"Add"});
66      uiPerInputset.setPrimaryButtonAction("Add");
67      uiPerInputset.setActionInfo(UIPermissionInputSet.FIELD_USERORGROUP, new String[] {"SelectUser", "SelectMember"});
68    }
69    
70    static public class SelectUserActionListener extends EventListener<UIViewPermissionForm> {
71      public void execute(Event<UIViewPermissionForm> event) throws Exception {
72        UIViewPermissionForm uiForm = event.getSource();
73        ((UIPermissionManagerBase)uiForm.getParent()).initUserSelector();
74        UIPopupContainer popupContainer = uiForm.getAncestorOfType(UIPopupContainer.class);
75        if (popupContainer != null) {
76          event.getRequestContext().addUIComponentToUpdateByAjax(popupContainer);
77        } else {
78          event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
79        }
80      }
81    }
82  
83    static public class AddAnyActionListener extends EventListener<UIViewPermissionForm> {
84      public void execute(Event<UIViewPermissionForm> event) throws Exception {
85        UIViewPermissionForm uiForm = event.getSource();
86        UIPermissionInputSet uiInputSet = uiForm.getChildById(TAB_PERMISSION);
87        uiInputSet.getUIStringInput(UIPermissionInputSet.FIELD_USERORGROUP).setValue(IdentityConstants.ANY);
88        UIPopupContainer popupContainer = uiForm.getAncestorOfType(UIPopupContainer.class);
89        if (popupContainer != null) {
90          event.getRequestContext().addUIComponentToUpdateByAjax(popupContainer);
91        } else {
92          event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
93        }
94      }
95    }
96  
97    static public class SelectMemberActionListener extends EventListener<UIViewPermissionForm> {
98      public void execute(Event<UIViewPermissionForm> event) throws Exception {
99        UIViewPermissionForm uiForm = event.getSource();
100       UIGroupMemberSelector uiGroupMemberSelector = uiForm.createUIComponent(UIGroupMemberSelector.class, null, null);
101       uiGroupMemberSelector.setShowAnyPermission(false);
102       uiGroupMemberSelector.setSourceComponent(uiForm, new String[] { UIPermissionInputSet.FIELD_USERORGROUP });
103       uiForm.getAncestorOfType(UIPermissionManagerBase.class).initPopupPermission(uiGroupMemberSelector);
104       UIPopupContainer popupContainer = uiForm.getAncestorOfType(UIPopupContainer.class);
105       if (popupContainer != null) {
106         event.getRequestContext().addUIComponentToUpdateByAjax(popupContainer);
107       } else {
108         event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
109       }
110     }
111   }
112   
113   static public class AddActionListener extends EventListener<UIViewPermissionForm> {
114     public void execute(Event<UIViewPermissionForm> event) throws Exception {
115       UIViewPermissionForm uiForm = event.getSource();
116       UIViewPermissionContainer uiContainer = uiForm.getParent();
117       UIViewFormTabPane uiTabPane = uiContainer.getParent();
118       UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class);
119       UIViewPermissionList uiList = uiContainer.getChild(UIViewPermissionList.class);
120       String permission = uiForm.getUIStringInput(UIPermissionInputSet.FIELD_USERORGROUP).getValue();
121       String strPermission = uiViewForm.getPermission();
122       if (Utils.isNameEmpty(permission)) {
123         UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
124         uiApp.addMessage(new ApplicationMessage("UIPermissionForm.msg.userOrGroup-required", null,
125             ApplicationMessage.WARNING));
126         event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
127         uiTabPane.setSelectedTab(uiContainer.getId());
128         return;
129       }
130       if(strPermission.contains(permission)) {
131         UIApplication app = uiForm.getAncestorOfType(UIApplication.class);
132         Object[] args = { permission };
133         app.addMessage(new ApplicationMessage("UIViewPermissionForm.msg.permission-exist",
134                                               args,
135                                               ApplicationMessage.WARNING));
136         event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
137         uiTabPane.setSelectedTab(uiContainer.getId());
138         return;
139       }
140       StringBuilder strBuilder = new StringBuilder(strPermission); 
141       if(strPermission.length() > 0) {
142         strBuilder = strBuilder.append(",");
143       } 
144       strBuilder.append(permission);
145       uiViewForm.setPermission(strBuilder.toString());
146       uiList.refresh(uiList.getUIPageIterator().getCurrentPage());
147       uiForm.getUIStringInput(UIPermissionInputSet.FIELD_USERORGROUP).setValue(null);
148       event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
149     }
150   }
151 
152   @Override
153   public void doSelect(String selectField, Object value) {
154     getUIStringInput(selectField).setValue(value.toString());    
155   }
156 
157   @Override
158   public Node getCurrentNode() throws Exception {
159     return null;
160   }
161 
162 }