/***************************************************************************
* Copyright (C) 2003-2008 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.popup;
import java.util.ArrayList;
import java.util.List;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.common.webui.BaseEventListener;
import org.exoplatform.forum.common.webui.UIPopupAction;
import org.exoplatform.forum.common.webui.UIPopupContainer;
import org.exoplatform.forum.service.ForumPageList;
import org.exoplatform.forum.service.ForumSearchResult;
import org.exoplatform.forum.service.JCRPageList;
import org.exoplatform.forum.service.Post;
import org.exoplatform.forum.service.Topic;
import org.exoplatform.forum.service.UserProfile;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.forum.webui.BaseForumForm;
import org.exoplatform.forum.webui.UIForumPageIterator;
import org.exoplatform.forum.webui.UIForumPortlet;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIPopupComponent;
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;
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/forum/webui/popup/UIModerationForum.gtmpl",
events = {
@EventConfig(listeners = UIModerationForum.OpenActionListener.class),
@EventConfig(listeners = UIModerationForum.CloseActionListener.class, phase=Phase.DECODE)
}
)
public class UIModerationForum extends BaseForumForm implements UIPopupComponent {
private String[] path = new String[] {};
List<ForumSearchResult> list_;
private boolean isShowIter = true;
private boolean isReloadPortlet = false;
public final String SEARCH_ITERATOR = "moderationIterator";
private JCRPageList pageList;
private UIForumPageIterator pageIterator;
public UIModerationForum() throws Exception {
pageIterator = addChild(UIForumPageIterator.class, null, SEARCH_ITERATOR);
setActions(new String[] { "Close" });
}
public void activate() {
}
public void deActivate() {
}
public void setReloadPortlet(boolean isReloadPortlet) {
this.isReloadPortlet = isReloadPortlet;
}
public void setUserProfile(UserProfile userProfile) throws Exception {
this.userProfile = userProfile;
if (this.userProfile == null) {
this.userProfile = getAncestorOfType(UIForumPortlet.class).getUserProfile();
}
}
public String[] getPath() {
if (userProfile.getUserRole() <= 1) {
if (userProfile.getUserRole() == 1) {
path = this.userProfile.getModerateForums();
} else
path = new String[] {};
}
return path;
}
public void setPath(String[] path) {
this.path = path;
}
public boolean getIsShowIter() {
return isShowIter;
}
@SuppressWarnings("unchecked")
protected List<ForumSearchResult> getListObject() throws Exception {
try {
list_ = getForumService().getJobWattingForModerator(getPath());
} catch (Exception e) {
list_ = new ArrayList<ForumSearchResult>();
log.error("list of forum search must not null: ", e);
}
pageList = new ForumPageList(10, list_.size());
pageList.setPageSize(10);
pageIterator.initPage(pageList.getPageSize(), pageList.getCurrentPage(),
pageList.getAvailable(), pageList.getAvailablePage());
isShowIter = true;
if (pageList.getAvailablePage() <= 1)
isShowIter = false;
int pageSelect = pageIterator.getPageSelected();
List<ForumSearchResult> list = new ArrayList<ForumSearchResult>();
list.addAll(pageList.getPageSearch(pageSelect, list_));
return list;
}
private ForumSearchResult getObject(String id) throws Exception {
for (ForumSearchResult obj : list_) {
if (obj.getId().equals(id))
return obj;
}
return null;
}
static public class OpenActionListener extends BaseEventListener<UIModerationForum> {
public void onEvent(Event<UIModerationForum> event, UIModerationForum moderationForum, final String objectId) throws Exception {
ForumSearchResult forumSearch = moderationForum.getObject(objectId);
UIPopupContainer popupContainer = moderationForum.getAncestorOfType(UIPopupContainer.class);
UIPopupAction popupAction = popupContainer.getChild(UIPopupAction.class);
if (forumSearch.getType().equals(Utils.TOPIC)) {
try {
Topic topic = moderationForum.getForumService().getTopicByPath(forumSearch.getPath(), false);
UIViewTopic viewTopic = popupAction.activate(UIViewTopic.class, 700);
viewTopic.setTopic(topic);
viewTopic.setActionForm(new String[] { "Approve", "DeleteTopic", "Close" });
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
} catch (Exception e) {
moderationForum.log.warn("Failed to view topic: ", e);
}
} else {
try {
Post post = moderationForum.getForumService().getPost(ForumUtils.EMPTY_STR, ForumUtils.EMPTY_STR, ForumUtils.EMPTY_STR, forumSearch.getPath());
UIViewPost viewPost = popupAction.activate(UIViewPost.class, 700);
viewPost.setPostView(post);
viewPost.setViewUserInfo(false);
viewPost.setActionForm(new String[] { "Approve", "DeletePost", "Close", "OpenTopicLink" });
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
} catch (Exception e) {
moderationForum.log.warn("Failed to view post: ", e);
}
}
}
}
static public class CloseActionListener extends EventListener<UIModerationForum> {
public void execute(Event<UIModerationForum> event) throws Exception {
UIModerationForum uiform = event.getSource();
UIForumPortlet forumPortlet = uiform.getAncestorOfType(UIForumPortlet.class);
forumPortlet.cancelAction();
if (uiform.isReloadPortlet) {
uiform.isReloadPortlet = false;
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
}
}