/* * 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.ArrayList; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.apache.commons.lang.StringUtils; import org.exoplatform.services.cms.views.ManageViewService; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.wcm.core.NodetypeConstant; import org.exoplatform.services.wcm.utils.WCMCoreUtils; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.ComponentConfigs; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.core.UIPopupWindow; import org.exoplatform.webui.core.UITabPane; 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.UIFormInputBase; import javax.jcr.Node; /** * Created by The eXo Platform SARL * Author : Tran The Trong * trongtt@exoplatform.com * Sep 19, 2006 * 5:31:04 PM */ @ComponentConfigs({ @ComponentConfig( type = UIViewForm.class, lifecycle = UIFormLifecycle.class, template = "app:/groovy/webui/component/admin/view/UIForm.gtmpl", events = { @EventConfig(listeners = UIViewFormTabPane.SaveActionListener.class), @EventConfig(listeners = UIViewFormTabPane.RestoreActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UIViewFormTabPane.CancelActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UIViewFormTabPane.CloseActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UIViewFormTabPane.SelectTabActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UIViewForm.ChangeVersionActionListener.class, phase = Phase.DECODE) }), @ComponentConfig( template = "app:/groovy/webui/component/admin/view/UIViewFormTabPane.gtmpl" ) }) public class UIViewFormTabPane extends UITabPane { private static final Log logger = ExoLogger.getLogger(UIViewFormTabPane.class.getName()); final static public String POPUP_PERMISSION = "PopupViewPermission" ; private String selectedTabId = "UITemplateContainer"; public static final String SAVE_BUTTON = "Save"; public static final String CANCEL_BUTTON = "Cancel"; public static final String RESTORE_BUTTON = "Restore"; private String[] actions_ = new String[] {SAVE_BUTTON, CANCEL_BUTTON}; private String primaryBtn_ = "Save"; private boolean isUpdate_ = false; public String getSelectedTabId() { return selectedTabId; } public void setSelectedTab(String renderTabId) { selectedTabId = renderTabId; } public void setSelectedTab(int index) { selectedTabId = getChild(index - 1).getId(); } public String[] getActions() { UITabList uiTabList = this.findFirstComponentOfType(UITabList.class); String viewName = uiTabList.getViewName(); if(StringUtils.isNotEmpty(viewName) && isUpdate() ) { try{ ManageViewService viewService = WCMCoreUtils.getService(ManageViewService.class); Node viewNode = viewService.getViewByName(viewName, WCMCoreUtils.getUserSessionProvider()); if (viewNode.isNodeType(NodetypeConstant.MIX_VERSIONABLE)) actions_ = new String[]{SAVE_BUTTON, CANCEL_BUTTON, RESTORE_BUTTON}; }catch (Exception ex){ logger.error("View {0} does not exits", viewName); } } if(actions_.length == 1) primaryBtn_ = actions_[0]; return actions_; } public void setActions(String[] actions) { actions_ = actions; } public String getPrimaryButtonAction() { return primaryBtn_; } public void setPrimaryButtonAction(String primaryBtn) { primaryBtn_ = primaryBtn; } public UIViewFormTabPane() throws Exception { UIViewForm uiViewForm = addChild(UIViewForm.class, null, null) ; addChild(UITabContainer.class, null, null); addChild(UIViewPermissionContainer.class, null, null); setSelectedTab(uiViewForm.getId()) ; } public String getLabel(ResourceBundle res, String id) { try { return res.getString("UIViewForm.label." + id) ; } catch (MissingResourceException ex) { return id ; } } public void update(boolean isUpdate) { isUpdate_ = isUpdate; getChild(UIViewPermissionContainer.class).update(isUpdate); } public void view(boolean isView) { UITabContainer uiContainer = getChild(UITabContainer.class); uiContainer.getChild(UITabList.class).view(isView); getChild(UIViewPermissionContainer.class).view(isView); } public boolean isUpdate() { return isUpdate_; } static public class SaveActionListener extends EventListener<UIViewForm> { public void execute(Event<UIViewForm> event) throws Exception { UIViewFormTabPane uiViewTabPane = event.getSource().getParent(); UIViewContainer uiViewContainer = uiViewTabPane.getAncestorOfType(UIViewContainer.class) ; uiViewTabPane.getChild(UIViewForm.class).save() ; UIPopupWindow uiPopup = null; if(uiViewTabPane.isUpdate()) { uiPopup = uiViewContainer.getChildById(UIViewList.ST_EDIT); } else { uiPopup = uiViewContainer.getChildById(UIViewList.ST_ADD); } uiPopup.setShow(false); uiPopup.setRendered(false); event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ; } } static public class CancelActionListener extends EventListener<UIViewForm> { public void execute(Event<UIViewForm> event) throws Exception { UIViewFormTabPane uiViewTabPane = event.getSource().getParent(); UIViewContainer uiViewContainer = uiViewTabPane.getAncestorOfType(UIViewContainer.class) ; UIPopupWindow uiPopup = null; if(uiViewTabPane.isUpdate()) { uiPopup = uiViewContainer.getChildById(UIViewList.ST_EDIT); } else { uiPopup = uiViewContainer.getChildById(UIViewList.ST_ADD); } uiPopup.setShow(false); uiPopup.setRendered(false); event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ; } } static public class CloseActionListener extends EventListener<UIViewForm> { public void execute(Event<UIViewForm> event) throws Exception { UIViewFormTabPane uiViewTabPane = event.getSource().getParent(); UIViewContainer uiViewContainer = uiViewTabPane.getAncestorOfType(UIViewContainer.class) ; UIPopupWindow uiPopup = uiViewContainer.getChildById(UIViewList.ST_VIEW);; uiPopup.setShow(false); uiPopup.setRendered(false); event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ; } } static public class RestoreActionListener extends EventListener<UIViewForm> { public void execute(Event<UIViewForm> event) throws Exception { UIViewFormTabPane uiViewTabPane = event.getSource().getParent(); UIViewForm uiViewForm = uiViewTabPane.getChild(UIViewForm.class) ; uiViewForm.changeVersion() ; UIViewContainer uiContainer = uiViewTabPane.getAncestorOfType(UIViewContainer.class) ; UIViewList uiViewList = uiContainer.findFirstComponentOfType(UIViewList.class) ; uiViewList.refresh(uiViewList.getUIPageIterator().getCurrentPage()); uiViewForm.refresh(true) ; uiViewTabPane.removeChildById(POPUP_PERMISSION) ; UIViewContainer uiViewContainer = uiViewTabPane.getAncestorOfType(UIViewContainer.class) ; uiViewContainer.removeChild(UIPopupWindow.class) ; event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ; } } static public class SelectTabActionListener extends EventListener<UIViewFormTabPane> { public void execute(Event<UIViewFormTabPane> event) throws Exception { WebuiRequestContext context = event.getRequestContext(); String renderTab = context.getRequestParameter(UIComponent.OBJECTID); if (renderTab == null) return; event.getSource().setSelectedTab(renderTab); WebuiRequestContext parentContext = (WebuiRequestContext)context.getParentAppRequestContext(); if (parentContext != null) { parentContext.setResponseComplete(true); } else { context.setResponseComplete(true); } } } public void processDecode(WebuiRequestContext context) throws Exception { List<UIFormInputBase> inputs = new ArrayList<UIFormInputBase>(); this.findComponentOfType(inputs, UIFormInputBase.class); String action = context.getRequestParameter(UIForm.ACTION); for (UIFormInputBase input : inputs) { if (!input.isValid()) { continue; } String inputValue = context.getRequestParameter(input.getId()); if (inputValue == null || inputValue.trim().length() == 0) { inputValue = context.getRequestParameter(input.getName()); } input.decode(inputValue, context); } Event<UIComponent> event = this.createEvent(action, Event.Phase.DECODE, context); if (event != null) { event.broadcast(); } } public String event(String name) throws Exception { StringBuilder b = new StringBuilder(); b.append("javascript:eXo.webui.UIForm.submitForm('").append("UIViewForm").append("','"); b.append(name).append("',true)"); return b.toString(); } }