/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ecm.webui.component.admin.views;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.ecm.webui.form.validator.ECMNameValidator;
import org.exoplatform.services.cms.views.ManageViewService;
import org.exoplatform.services.cms.views.ViewConfig.Tab;
import org.exoplatform.services.jcr.util.Text;
import org.exoplatform.webui.form.validator.MandatoryValidator;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIPopupWindow;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.input.UICheckBoxInput;
/**
* Created by The eXo Platform SARL
* Author : Tran The Trong
* trongtt@gmail.com
* Jun 28, 2006
*/
@ComponentConfig(
template = "app:/groovy/webui/component/admin/view/UITabForm.gtmpl",
lifecycle = UIFormLifecycle.class,
events = {
@EventConfig(listeners = UITabForm.SaveActionListener.class),
@EventConfig(listeners = UITabForm.CancelActionListener.class, phase = Phase.DECODE)
}
)
public class UITabForm extends UIForm {
final static public String FIELD_NAME = "tabName" ;
private List<?> buttons_ ;
public UITabForm() throws Exception {
setComponentConfig(getClass(), null) ;
addUIFormInput(new UIFormStringInput(FIELD_NAME, FIELD_NAME, null).addValidator(MandatoryValidator.class)
.addValidator(ECMNameValidator.class)) ;
ManageViewService vservice_ = getApplicationComponent(ManageViewService.class) ;
buttons_ = vservice_.getButtons();
for(Object bt : buttons_) {
addUIFormInput(new UICheckBoxInput(getButtonName(bt), "", null)) ;
}
}
private String getButtonName(Object bt) {
String button = (String) bt;
return button.substring(0, 1).toLowerCase() + button.substring(1);
}
public void processRender(WebuiRequestContext context) throws Exception {
super.processRender(context) ;
}
public void refresh(boolean isEditable) throws Exception {
getUIStringInput(FIELD_NAME).setDisabled(!isEditable).setValue(null) ;
for(Object bt : buttons_){
getUICheckBoxInput(getButtonName(bt)).setChecked(false).setDisabled(!isEditable) ;
}
}
public void update(Tab tab, boolean isView) throws Exception{
refresh(!isView) ;
if(tab == null) return ;
getUIStringInput(FIELD_NAME).setDisabled(true).setValue(Text.unescapeIllegalJcrChars(tab.getTabName()));
String buttonsProperty = tab.getButtons() ;
String[] buttonArray = StringUtils.split(buttonsProperty, ";") ;
for(String bt : buttonArray){
UICheckBoxInput cbInput = getUICheckBoxInput(bt.trim()) ;
if(cbInput != null) cbInput.setChecked(true) ;
}
}
static public class SaveActionListener extends EventListener<UITabForm> {
public void execute(Event<UITabForm> event) throws Exception {
UITabForm uiTabForm = event.getSource();
UITabContainer uiContainer = uiTabForm.getAncestorOfType(UITabContainer.class);
UIViewFormTabPane viewFormTabPane = uiContainer.getParent();
String tabName = uiTabForm.getUIStringInput(FIELD_NAME).getValue() ;
UIApplication uiApp = event.getSource().getAncestorOfType(UIApplication.class) ;
if(tabName == null || tabName.trim().length() == 0) {
viewFormTabPane.setSelectedTab(uiTabForm.getId()) ;
uiApp.addMessage(new ApplicationMessage("UITabForm.msg.tab-name-error", null, ApplicationMessage.WARNING)) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiTabForm);
return ;
}
StringBuilder selectedButton = new StringBuilder() ;
boolean isSelected = false ;
for(Object bt : uiTabForm.buttons_ ) {
String button = uiTabForm.getButtonName(bt) ;
if(uiTabForm.getUICheckBoxInput(button).isChecked()) {
isSelected = true ;
if(selectedButton.length() > 0) selectedButton.append(";").append(button) ;
else selectedButton.append(button) ;
}
}
if(!isSelected) {
viewFormTabPane.setSelectedTab(uiTabForm.getId());
uiApp.addMessage(new ApplicationMessage("UITabForm.msg.button-select-error", null, ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiTabForm);
return;
}
UIViewForm uiViewForm = viewFormTabPane.getChild(UIViewForm.class);
uiViewForm.addTab(tabName, selectedButton.toString());
UIPopupWindow uiPopup = uiContainer.getChildById(UITabList.TAPFORM_POPUP);
uiPopup.setShow(false);
uiPopup.setRendered(false);
viewFormTabPane.setSelectedTab(viewFormTabPane.getSelectedTabId()) ;
UITabList uiTabList = uiContainer.getChild(UITabList.class);
uiTabList.refresh(uiTabList.getUIPageIterator().getCurrentPage());
event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
}
}
static public class CancelActionListener extends EventListener<UITabForm> {
public void execute(Event<UITabForm> event) throws Exception {
UITabForm uiTabForm = event.getSource();
UITabContainer uiContainer = uiTabForm.getAncestorOfType(UITabContainer.class);
UIViewFormTabPane uiTabPane = uiContainer.getParent();
UIPopupWindow uiPopup = uiContainer.getChildById(UITabList.TAPFORM_POPUP);
uiPopup.setShow(false);
uiPopup.setRendered(false);
uiTabPane.setSelectedTab(uiContainer.getId());
event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
}
}
}