/*
* Copyright (C) 2003-2014 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.service.task;
import org.exoplatform.commons.utils.CommonsUtils;
import org.exoplatform.forum.service.MessageBuilder;
import org.exoplatform.forum.service.Post;
import org.exoplatform.forum.service.Topic;
import org.exoplatform.forum.service.impl.JCRDataStorage;
import org.exoplatform.services.security.ConversationState;
public abstract class AbstractForumTask {
/*
* FORUM-1065 : Thread safety issue in multitenancy environment private static
* JCRDataStorage storage;
*/
private final ConversationState state;
public AbstractForumTask() {
state = ConversationState.getCurrent();
}
public ConversationState getState() {
return this.state;
}
protected static JCRDataStorage getJCRDataStorage() {
return CommonsUtils.getService(JCRDataStorage.class);
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
public abstract void process() throws Exception;
/**
* The class is task to call query last post of forum
*/
public static class QueryLastPostTask extends AbstractForumTask {
/** The JCR-Path of forum node. **/
private final String forumPath;
public QueryLastPostTask(String forumPath) {
super();
//
this.forumPath = forumPath;
}
@Override
public void process() throws Exception {
getJCRDataStorage().queryLastPostForum(forumPath);
}
@Override
public boolean equals(Object o) {
if (super.equals(o)) {
return true;
}
if (o instanceof QueryLastPostTask) {
QueryLastPostTask that = (QueryLastPostTask) o;
if (forumPath != null ? !forumPath.equals(that.forumPath) : that.forumPath != null) {
return false;
}
return true;
}
return false;
}
}
/**
* The class is task to call send notification e-mails watched of forum.
*
*/
public static class SendNotificationTask extends AbstractForumTask {
/** The Topic **/
private final Topic topic;
/** The Post **/
private final Post post;
/** The jcr path of node that watched e-mails notification **/
private final String nodePath;
/** The status is approve post or not **/
private final boolean isApprovePost;
/** The MessageBuilder **/
private final MessageBuilder messageBuilder;
public SendNotificationTask(String nodePath, Topic topic, Post post, MessageBuilder messageBuilder, boolean isApprovePost) {
super();
//
this.topic = topic;
this.post = post;
this.nodePath = nodePath;
this.messageBuilder = messageBuilder;
this.isApprovePost = isApprovePost;
}
@Override
public void process() throws Exception {
getJCRDataStorage().sendNotification(nodePath, topic, post, messageBuilder, isApprovePost);
}
@Override
public boolean equals(Object o) {
if (super.equals(o)) {
return true;
}
if (o instanceof SendNotificationTask) {
SendNotificationTask that = (SendNotificationTask) o;
if (isApprovePost != that.isApprovePost) {
return false;
}
if (nodePath != null ? !nodePath.equals(that.nodePath) : that.nodePath != null) {
return false;
}
if (post != null ? !post.getId().equals((that.post == null) ? "" : that.post.getId()) : that.post != null) {
return false;
}
if (topic != null ? !topic.getId().equals((that.topic == null) ? "" : that.topic.getId()) : that.topic != null) {
return false;
}
return true;
}
return false;
}
}
}