/*
* 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.Collections;
import java.util.Comparator;
import java.util.List;
import javax.jcr.AccessDeniedException;
import javax.jcr.Node;
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.BasePath;
import org.exoplatform.services.cms.drives.ManageDriveService;
import org.exoplatform.services.cms.impl.Utils;
import org.exoplatform.services.cms.views.ManageViewService;
import org.exoplatform.services.cms.views.impl.ManageViewPlugin;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
/**
* Created by The eXo Platform SARL
* Author : Tran The Trong
* trongtt@exoplatform.com
* Sep 19, 2006
* 11:45:11 AM
*/
@ComponentConfig(
template = "system:/groovy/ecm/webui/UIGridWithButton.gtmpl",
events = {
@EventConfig(listeners = UIECMTemplateList.DeleteActionListener.class, confirm = "UIECMTemplateList.msg.confirm-delete"),
@EventConfig(listeners = UIECMTemplateList.EditInfoActionListener.class),
@EventConfig(listeners = UIECMTemplateList.AddActionListener.class)
}
)
public class UIECMTemplateList extends UIPagingGrid {
private static String[] VIEW_BEAN_FIELD = {"name"} ;
private static String[] VIEW_ACTION = {"EditInfo","Delete"} ;
public static String ST_ecmTempForm = "ecmTempForm" ;
public static String ST_ECMTemp = "ECMTemplate" ;
public UIECMTemplateList() throws Exception {
getUIPageIterator().setId("UIECMTemplateGrid") ;
configure("path", VIEW_BEAN_FIELD, VIEW_ACTION) ;
}
public String[] getActions() { return new String[] {"Add"} ; }
public void refresh(int currentPage) throws Exception {
List<Node> nodes = getApplicationComponent(ManageViewService.class)
.getAllTemplates(
BasePath.ECM_EXPLORER_TEMPLATES,
WCMCoreUtils.getUserSessionProvider());
List<TemplateBean> tempBeans = new ArrayList<TemplateBean>();
for (Node node : nodes) {
tempBeans.add(new TemplateBean(node.getName(), node.getPath()));
}
Collections.sort(tempBeans, new ECMViewComparator());
ListAccess<TemplateBean> tmplBeanList = new ListAccessImpl<TemplateBean>(TemplateBean.class,
tempBeans);
getUIPageIterator().setPageList(new LazyPageList<TemplateBean>(tmplBeanList,
getUIPageIterator().getItemsPerPage()));
getUIPageIterator().setTotalItems(tempBeans.size());
if (currentPage > getUIPageIterator().getAvailablePage())
getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
else
getUIPageIterator().setCurrentPage(currentPage);
}
static public class ECMViewComparator implements Comparator<TemplateBean> {
public int compare(TemplateBean o1, TemplateBean o2) throws ClassCastException {
String name1 = o1.getName();
String name2 = o2.getName();
return name1.compareToIgnoreCase(name2);
}
}
static public class AddActionListener extends EventListener<UIECMTemplateList> {
public void execute(Event<UIECMTemplateList> event) throws Exception {
UIECMTemplateList uiECMTempList = event.getSource() ;
SessionProvider provider = WCMCoreUtils.getUserSessionProvider();
Node ecmTemplateHome = uiECMTempList.getApplicationComponent(ManageViewService.class)
.getTemplateHome(BasePath.ECM_EXPLORER_TEMPLATES,
provider);
if (ecmTemplateHome == null) {
UIApplication uiApp = event.getSource().getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIECMTemplateList.msg.access-denied",
null,
ApplicationMessage.WARNING));
return;
}
UIViewManager uiViewManager = uiECMTempList.getAncestorOfType(UIViewManager.class) ;
UITemplateContainer uiECMTempContainer = uiViewManager.getChildById(UIECMTemplateList.ST_ECMTemp) ;
uiECMTempContainer.removeChildById(UIECMTemplateList.ST_ecmTempForm + "Edit") ;
uiECMTempContainer.initPopup(UIECMTemplateList.ST_ecmTempForm, "Add") ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiECMTempContainer) ;
}
}
static public class DeleteActionListener extends EventListener<UIECMTemplateList> {
public void execute(Event<UIECMTemplateList> event) throws Exception {
UIECMTemplateList uiECMTemp = event.getSource() ;
ManageViewService vservice = uiECMTemp.getApplicationComponent(ManageViewService.class) ;
uiECMTemp.setRenderSibling(UIECMTemplateList.class);
String templatePath = event.getRequestContext().getRequestParameter(OBJECTID) ;
String templateName = templatePath.substring(templatePath.lastIndexOf("/") + 1) ;
if (uiECMTemp.getApplicationComponent(ManageDriveService.class).isUsedView(templateName)) {
UIApplication app = uiECMTemp.getAncestorOfType(UIApplication.class);
Object[] args = { templateName };
app.addMessage(new ApplicationMessage("UIECMTemplateList.msg.template-in-use", args));
return;
}
try {
vservice.removeTemplate(templatePath, WCMCoreUtils.getUserSessionProvider());
Utils.addEditedConfiguredData(templateName, ManageViewPlugin.class.getSimpleName(), ManageViewPlugin.EDITED_CONFIGURED_VIEWS_TEMPLATES, true);
} catch (AccessDeniedException ex) {
UIApplication app = uiECMTemp.getAncestorOfType(UIApplication.class);
Object[] args = { "UIViewFormTabPane.label.option." + templateName };
app.addMessage(new ApplicationMessage("UIECMTemplateList.msg.delete-permission-denied",
args,
ApplicationMessage.WARNING));
return;
}
uiECMTemp.refresh(uiECMTemp.getUIPageIterator().getCurrentPage()) ;
UITemplateContainer uiTempContainer = uiECMTemp.getParent() ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiTempContainer) ;
}
}
static public class EditInfoActionListener extends EventListener<UIECMTemplateList> {
public void execute(Event<UIECMTemplateList> event) throws Exception {
UIECMTemplateList uiECMTemp = event.getSource() ;
String tempPath = event.getRequestContext().getRequestParameter(OBJECTID) ;
UITemplateContainer uiTempContainer = uiECMTemp.getParent() ;
uiTempContainer.removeChildById(UIECMTemplateList.ST_ecmTempForm + "Add") ;
uiTempContainer.initPopup(UIECMTemplateList.ST_ecmTempForm, "Edit") ;
UITemplateForm uiTempForm = uiTempContainer.findComponentById(UIECMTemplateList.ST_ecmTempForm) ;
uiTempForm.update(tempPath, null) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiTempContainer) ;
}
}
}