1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
43
44
45
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 }