UIViewPost.java
/***************************************************************************
* 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.forum.webui.popup;
import java.util.ArrayList;
import java.util.List;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.common.CommonUtils;
import org.exoplatform.forum.common.webui.UIPopupAction;
import org.exoplatform.forum.common.webui.UIPopupContainer;
import org.exoplatform.forum.rendering.RenderHelper;
import org.exoplatform.forum.rendering.RenderingException;
import org.exoplatform.forum.service.ForumAttachment;
import org.exoplatform.forum.service.Post;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.forum.webui.BaseForumForm;
import org.exoplatform.forum.webui.UIForumPortlet;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UIPopupComponent;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.cssfile.CssClassUtils;
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/UIViewPost.gtmpl",
events = {
@EventConfig(listeners = UIViewPost.CloseActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIViewPost.ApproveActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIViewPost.DeletePostActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIViewPost.OpenTopicLinkActionListener.class),
@EventConfig(listeners = UIViewPost.DownloadAttachActionListener.class, phase = Phase.DECODE)
}
)
public class UIViewPost extends BaseForumForm implements UIPopupComponent {
private static Log log = ExoLogger.getLogger(UIViewPost.class);
private Post post;
private boolean isViewUserInfo = true;
RenderHelper renderHelper = new RenderHelper();
public UIViewPost() {
}
public void setActionForm(String[] actions) {
this.setActions(actions);
}
public String renderPost(Post post) throws RenderingException {
return renderHelper.renderPost(post);
}
public String getImageUrl(String imagePath) throws Exception {
String url = ForumUtils.EMPTY_STR;
try {
url = CommonUtils.getImageUrl(imagePath);
} catch (Exception e) {
log.warn(imagePath + " is not exist: " + e.getMessage());
}
return url;
}
protected String getFileSource(ForumAttachment attachment) throws Exception {
return ForumUtils.getFileSource(attachment);
}
protected String getCSSByFileType(String fileName, String fileType) {
return CssClassUtils.getCSSClassByFileNameAndFileType(fileName, fileType, null);
}
public void setPostView(Post post) throws Exception {
this.post = post;
}
protected Post getPostView() throws Exception {
return post;
}
public void activate() {
}
public void deActivate() {
}
public void setViewUserInfo(boolean isView) {
this.isViewUserInfo = isView;
}
public boolean getIsViewUserInfo() {
return this.isViewUserInfo;
}
static public class DownloadAttachActionListener extends EventListener<UIViewPost> {
public void execute(Event<UIViewPost> event) throws Exception {
UIViewPost viewPost = event.getSource();
event.getRequestContext().addUIComponentToUpdateByAjax(viewPost);
}
}
static public class ApproveActionListener extends EventListener<UIViewPost> {
public void execute(Event<UIViewPost> event) throws Exception {
UIViewPost uiForm = event.getSource();
Post post = uiForm.post;
List<Integer> types = new ArrayList<Integer>();
if (! post.getIsApproved()) {
post.setIsApproved(true);
types.add(Utils.APPROVE);
}
if (post.getIsHidden()) {
post.setIsHidden(false);
types.add(Utils.HIDDEN);
}
if (post.getIsWaiting()) {
post.setIsWaiting(false);
types.add(Utils.WAITING);
}
post.setLink(ForumUtils.createdForumLink(ForumUtils.TOPIC, post.getTopicId(), false));
List<Post> posts = new ArrayList<Post>();
posts.add(post);
try {
for (int type : types) {
uiForm.getForumService().modifyPost(posts, type);
}
} catch (Exception e) {
log.debug("\nModify post fail: ", e);
}
UIViewTopic.closePopup(event.getRequestContext(), uiForm);
}
}
static public class DeletePostActionListener extends EventListener<UIViewPost> {
public void execute(Event<UIViewPost> event) throws Exception {
UIViewPost uiForm = event.getSource();
Post post = uiForm.post;
try {
String[] path = post.getPath().split(ForumUtils.SLASH);
int l = path.length;
uiForm.getForumService().removePost(path[l - 4], path[l - 3], path[l - 2], post.getId());
} catch (Exception e) {
log.debug("Removing " + post.getId() + " post fail: ", e);
}
UIViewTopic.closePopup(event.getRequestContext(), uiForm);
}
}
static public class OpenTopicLinkActionListener extends EventListener<UIViewPost> {
public void execute(Event<UIViewPost> event) throws Exception {
UIViewPost uiForm = event.getSource();
Post post = uiForm.post;
if (post == null) {
event.getRequestContext().getUIApplication().addMessage(new ApplicationMessage("UIShowBookMarkForm.msg.link-not-found",
null,
ApplicationMessage.WARNING));
return;
}
String path = post.getPath();
path = path.substring(path.lastIndexOf(Utils.TOPIC));
UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class);
forumPortlet.calculateRenderComponent(path, event.getRequestContext());
// close popup
uiForm.closeAction(event.getRequestContext());
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
private void closeAction(WebuiRequestContext context) throws Exception {
UIPopupContainer popupContainer = getAncestorOfType(UIPopupContainer.class);
if (popupContainer != null) {
UIPopupAction popupAction;
if (((UIComponent) getParent()).getId().equals(popupContainer.getId())) {
popupAction = popupContainer.getAncestorOfType(UIPopupAction.class);
} else {
popupAction = popupContainer.getChild(UIPopupAction.class);
}
popupAction.deActivate();
context.addUIComponentToUpdateByAjax(popupAction);
} else {
UIForumPortlet forumPortlet = getAncestorOfType(UIForumPortlet.class);
forumPortlet.cancelAction();
}
}
static public class CloseActionListener extends EventListener<UIViewPost> {
public void execute(Event<UIViewPost> event) throws Exception {
UIViewPost uiForm = event.getSource();
uiForm.closeAction(event.getRequestContext());
}
}
}