/* * Copyright (C) 2003-2013 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.forum.webui; import org.exoplatform.commons.utils.CommonsUtils; import org.exoplatform.forum.ForumUtils; import org.exoplatform.forum.common.CommonUtils; import org.exoplatform.forum.common.webui.BaseEventListener; import org.exoplatform.forum.common.webui.BaseUIForm; import org.exoplatform.forum.service.ForumService; import org.exoplatform.forum.service.Utils; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.event.Event; public abstract class BaseForumEventListener<T extends BaseUIForm> extends BaseEventListener<T> { protected ForumService forumService; protected UIForumPortlet forumPortlet; protected WebuiRequestContext context; public BaseForumEventListener() { } protected boolean isExisting(String objectId) { Object object = null; try { if (objectId.indexOf(CommonUtils.SLASH) >= 0) { object = forumService.getObjectNameByPath(objectId); } else { String type = Utils.getObjectType(objectId); object = forumService.getObjectNameById(objectId, type); } } catch (Exception e) { return false; } return (object != null) ? true : false; } protected void topicNotExist() throws Exception { warning("UIForumPortlet.msg.topicEmpty", false); context.addUIComponentToUpdateByAjax(component); } protected void forumNotExist(String categoryId) throws Exception { warning("UITopicContainer.msg.forum-deleted", false); openCategory(categoryId); } protected void openCategory(String categoryId) throws Exception { UICategoryContainer categoryContainer = forumPortlet.getChild(UICategoryContainer.class); forumPortlet.updateIsRendered(ForumUtils.CATEGORIES); categoryContainer.updateIsRender(false); categoryContainer.getChild(UICategory.class).updateByBreadcumbs(categoryId); forumPortlet.getChild(UIBreadcumbs.class).setUpdataPath(categoryId); context.addUIComponentToUpdateByAjax(forumPortlet); } protected void forumNotExist() throws Exception { notExist("UITopicContainer.msg.forum-deleted"); } protected void categoryNotExist() throws Exception { notExist("UIForumPortlet.msg.catagory-deleted"); } protected void notExist(String msg) throws Exception { warning(msg, false); forumPortlet.renderForumHome(); context.addUIComponentToUpdateByAjax(forumPortlet); } protected void onError(Throwable e) throws Exception { notExist("UIForumPortlet.msg.do-not-permission"); ExoLogger.getLogger(component.getClass()).error("Failed to run action " + getClass().getName(), e); } public final void execute(Event<T> event) throws Exception { if (forumService == null) { forumService = CommonsUtils.getService(ForumService.class); } this.component = event.getSource(); this.forumPortlet = this.component.getAncestorOfType(UIForumPortlet.class); this.context = event.getRequestContext(); // String objectId = this.context.getRequestParameter(UIComponent.OBJECTID); if (isValid(component, objectId)) { try { onEvent(event, component, objectId); } catch (Exception e) { onError(e); } } else { errorEvent(); } } public abstract boolean isValid(T component, String objectId) throws Exception ; public abstract void errorEvent() throws Exception ; }