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.admin.views;
18  
19  import java.util.List;
20  
21  import org.apache.commons.lang.StringUtils;
22  import org.exoplatform.ecm.webui.form.validator.ECMNameValidator;
23  import org.exoplatform.services.cms.views.ManageViewService;
24  import org.exoplatform.services.cms.views.ViewConfig.Tab;
25  import org.exoplatform.services.jcr.util.Text;
26  import org.exoplatform.webui.form.validator.MandatoryValidator;
27  import org.exoplatform.web.application.ApplicationMessage;
28  import org.exoplatform.webui.application.WebuiRequestContext;
29  import org.exoplatform.webui.config.annotation.ComponentConfig;
30  import org.exoplatform.webui.config.annotation.EventConfig;
31  import org.exoplatform.webui.core.UIApplication;
32  import org.exoplatform.webui.core.UIPopupWindow;
33  import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
34  import org.exoplatform.webui.event.Event;
35  import org.exoplatform.webui.event.Event.Phase;
36  import org.exoplatform.webui.event.EventListener;
37  import org.exoplatform.webui.form.UIForm;
38  import org.exoplatform.webui.form.UIFormStringInput;
39  import org.exoplatform.webui.form.input.UICheckBoxInput;
40  
41  /**
42   * Created by The eXo Platform SARL
43   * Author : Tran The Trong
44   *          trongtt@gmail.com
45   * Jun 28, 2006
46   */
47  
48  @ComponentConfig(
49          template = "app:/groovy/webui/component/admin/view/UITabForm.gtmpl",
50          lifecycle = UIFormLifecycle.class,
51          events = {    
52            @EventConfig(listeners = UITabForm.SaveActionListener.class),
53            @EventConfig(listeners = UITabForm.CancelActionListener.class, phase = Phase.DECODE)
54        }
55  )
56  public class UITabForm extends UIForm {
57  
58    final static public String FIELD_NAME = "tabName" ;
59    private List<?> buttons_ ;
60    
61    public UITabForm() throws Exception {
62      setComponentConfig(getClass(), null) ;
63      addUIFormInput(new UIFormStringInput(FIELD_NAME, FIELD_NAME, null).addValidator(MandatoryValidator.class)
64                     .addValidator(ECMNameValidator.class)) ;
65      ManageViewService vservice_ = getApplicationComponent(ManageViewService.class) ;
66      buttons_ = vservice_.getButtons();
67      for(Object bt : buttons_) {
68        addUIFormInput(new UICheckBoxInput(getButtonName(bt), "", null)) ;
69      }
70    }
71  
72    private String getButtonName(Object bt) {
73      String button = (String) bt;
74      return button.substring(0, 1).toLowerCase() + button.substring(1);
75    }
76  
77    public void processRender(WebuiRequestContext context) throws Exception {
78      super.processRender(context) ;
79    }
80  
81    public void refresh(boolean isEditable) throws Exception {
82      getUIStringInput(FIELD_NAME).setDisabled(!isEditable).setValue(null) ;
83      for(Object bt : buttons_){
84        getUICheckBoxInput(getButtonName(bt)).setChecked(false).setDisabled(!isEditable) ;
85      }
86    }
87  
88    public void update(Tab tab, boolean isView) throws Exception{
89      refresh(!isView) ;
90      if(tab == null) return ;
91      getUIStringInput(FIELD_NAME).setDisabled(true).setValue(Text.unescapeIllegalJcrChars(tab.getTabName()));
92      String buttonsProperty = tab.getButtons() ;
93      String[] buttonArray = StringUtils.split(buttonsProperty, ";") ;
94      for(String bt : buttonArray){
95        UICheckBoxInput cbInput = getUICheckBoxInput(bt.trim()) ;
96        if(cbInput != null) cbInput.setChecked(true) ;
97      }
98    }
99    
100   static public class SaveActionListener extends EventListener<UITabForm> {
101     public void execute(Event<UITabForm> event) throws Exception {
102       UITabForm uiTabForm = event.getSource();
103       UITabContainer uiContainer = uiTabForm.getAncestorOfType(UITabContainer.class);
104       UIViewFormTabPane viewFormTabPane = uiContainer.getParent();
105       String tabName = uiTabForm.getUIStringInput(FIELD_NAME).getValue() ;
106       UIApplication uiApp = event.getSource().getAncestorOfType(UIApplication.class) ;
107       if(tabName == null || tabName.trim().length() == 0) {
108         viewFormTabPane.setSelectedTab(uiTabForm.getId()) ;
109         uiApp.addMessage(new ApplicationMessage("UITabForm.msg.tab-name-error", null, ApplicationMessage.WARNING)) ;
110         event.getRequestContext().addUIComponentToUpdateByAjax(uiTabForm);
111         return ;
112       }
113      
114       StringBuilder selectedButton = new StringBuilder() ;
115       boolean isSelected = false ;
116       for(Object bt : uiTabForm.buttons_ ) {
117         String button = uiTabForm.getButtonName(bt) ;
118         if(uiTabForm.getUICheckBoxInput(button).isChecked()) {
119           isSelected = true ;
120           if(selectedButton.length() > 0) selectedButton.append(";").append(button) ;
121           else selectedButton.append(button) ;
122         }
123       }
124       if(!isSelected) {
125         viewFormTabPane.setSelectedTab(uiTabForm.getId());
126         uiApp.addMessage(new ApplicationMessage("UITabForm.msg.button-select-error", null, ApplicationMessage.WARNING));
127         event.getRequestContext().addUIComponentToUpdateByAjax(uiTabForm);
128         return;
129       }
130       UIViewForm uiViewForm = viewFormTabPane.getChild(UIViewForm.class);
131       uiViewForm.addTab(tabName, selectedButton.toString());
132       UIPopupWindow uiPopup = uiContainer.getChildById(UITabList.TAPFORM_POPUP);
133       uiPopup.setShow(false);
134       uiPopup.setRendered(false);
135       viewFormTabPane.setSelectedTab(viewFormTabPane.getSelectedTabId()) ;
136       UITabList uiTabList = uiContainer.getChild(UITabList.class);
137       uiTabList.refresh(uiTabList.getUIPageIterator().getCurrentPage());
138       event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
139     }
140   }
141   
142   static public class CancelActionListener extends EventListener<UITabForm> {
143     public void execute(Event<UITabForm> event) throws Exception {
144       UITabForm uiTabForm = event.getSource();
145       UITabContainer uiContainer = uiTabForm.getAncestorOfType(UITabContainer.class);
146       UIViewFormTabPane uiTabPane = uiContainer.getParent();
147       UIPopupWindow uiPopup = uiContainer.getChildById(UITabList.TAPFORM_POPUP);
148       uiPopup.setShow(false);
149       uiPopup.setRendered(false);
150       uiTabPane.setSelectedTab(uiContainer.getId());
151       event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
152     }
153   }
154 
155 }