/***************************************************************************
* Copyright (C) 2003-2009 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.Collections;
import java.util.Comparator;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import org.exoplatform.commons.utils.LazyPageList;
import org.exoplatform.commons.utils.ListAccess;
import org.exoplatform.commons.utils.ListAccessImpl;
import org.exoplatform.ecm.webui.core.UIPagingGrid;
import org.exoplatform.services.cms.views.ManageViewService;
import org.exoplatform.services.cms.views.ViewConfig.Tab;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Feb 18, 2013
* 12:15:50 PM
*/
@ComponentConfig(
template = "system:/groovy/ecm/webui/UIGridWithButton.gtmpl",
events = {
@EventConfig(listeners = UITabList.DeleteActionListener.class, confirm = "UITabList.msg.confirm-delete"),
@EventConfig(listeners = UITabList.EditActionListener.class),
@EventConfig(listeners = UITabList.AddTabActionListener.class)
}
)
public class UITabList extends UIPagingGrid {
final static public String TAPFORM_POPUP = "TabForm_Popup";
public static String[] TAB_BEAN_FIELD = {"tabName", "localizeButtons"} ;
public static String TAB_LIST = "ECMTabList" ;
private String[] actions_ = new String[] {"AddTab"};
private boolean isView_ = false;
private String viewName;
public UITabList() throws Exception {
getUIPageIterator().setId("TabListPageIterator") ;
configure("tabName", UITabList.TAB_BEAN_FIELD, new String[] {"Edit","Delete"}) ;
}
public String[] getActions() {
return actions_;
}
public void setActions(String[] actions) {
actions_ = actions;
}
public boolean isView() {
return isView_;
}
public void view(boolean isView) {
isView_ = isView;
}
@Override
public void refresh(int currentPage) throws Exception {
List<Tab> tabList = new ArrayList<Tab>();
UITabContainer uiTabContainer = getParent();
UIViewFormTabPane uiTabPane = uiTabContainer.getParent();
UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class);
if(isView_) {
ManageViewService viewService = WCMCoreUtils.getService(ManageViewService.class);
Node viewNode = viewService.getViewByName(viewName, WCMCoreUtils.getUserSessionProvider());
NodeIterator nodeIter = viewNode.getNodes();
while(nodeIter.hasNext()) {
Node tabNode = nodeIter.nextNode();
Tab tab = new Tab();
tab.setTabName(tabNode.getName());
tab.setButtons(tabNode.getProperty("exo:buttons").getValue().getString());
tab.setLocalizeButtons(uiViewForm.getLocalizationButtons(tabNode.getProperty("exo:buttons").getValue().getString()));
tabList.add(tab);
}
} else {
tabList = uiViewForm.getTabs();
}
Collections.sort(tabList, new TabComparator());
ListAccess<Tab> tabBeanList = new ListAccessImpl<Tab>(Tab.class, tabList);
getUIPageIterator().setPageList(new LazyPageList<Tab>(tabBeanList, getUIPageIterator().getItemsPerPage()));
getUIPageIterator().setTotalItems(tabList.size());
if (currentPage > getUIPageIterator().getAvailablePage()) {
getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
} else {
getUIPageIterator().setCurrentPage(currentPage);
}
}
public String getViewName() {
return viewName;
}
public void setViewName(String name) {
viewName = name;
}
static public class AddTabActionListener extends EventListener<UITabList> {
public void execute(Event<UITabList> event) throws Exception {
UITabList uiTabList = event.getSource();
UITabContainer uiContainer = uiTabList.getParent();
UITabForm uiTabForm = uiContainer.createUIComponent(UITabForm.class, null, null);
uiContainer.initPopup(UITabList.TAPFORM_POPUP, uiTabForm, 760, 0);
UIViewFormTabPane uiTabPane = uiContainer.getParent();
uiTabPane.setSelectedTab(uiContainer.getId());
event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
}
}
static public class DeleteActionListener extends EventListener<UITabList> {
public void execute(Event<UITabList> event) throws Exception {
UITabList uiTabList = event.getSource();
String tabName = event.getRequestContext().getRequestParameter(OBJECTID);
UITabContainer uiTabContainer = uiTabList.getParent();
UIViewFormTabPane uiTabPane = uiTabContainer.getParent();
UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class);
uiViewForm.getTabMap().remove(tabName);
uiTabList.refresh(uiTabList.getUIPageIterator().getCurrentPage());
uiTabPane.setSelectedTab(uiTabList.getId());
event.getRequestContext().addUIComponentToUpdateByAjax(uiTabList.getParent());
}
}
static public class EditActionListener extends EventListener<UITabList> {
public void execute(Event<UITabList> event) throws Exception {
UITabList uiTabList = event.getSource();
UITabContainer uiContainer = uiTabList.getParent();
String tabName = event.getRequestContext().getRequestParameter(OBJECTID);
UIViewFormTabPane uiTabPane = uiContainer.getParent();
UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class);
Tab tab = uiViewForm.getTabMap().get(tabName);
UITabForm uiTabForm = uiContainer.createUIComponent(UITabForm.class, null, null);
uiTabForm.update(tab, false);
uiContainer.initPopup(UITabList.TAPFORM_POPUP, uiTabForm, 760, 0);
uiTabPane.setSelectedTab(uiTabList.getId());
event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
}
}
static public class TabComparator implements Comparator<Tab> {
public int compare(Tab o1, Tab o2) throws ClassCastException {
String name1 = o1.getTabName();
String name2 = o2.getTabName();
return name1.compareToIgnoreCase(name2);
}
}
}