//
// Copyright 2009 Robin Komiwes, Bruno Verachten, Christophe Cordenier
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package com.wooki.domain.biz;
import java.util.List;
import org.springframework.context.ApplicationContext;
import com.ibm.icu.util.Calendar;
import com.wooki.domain.dao.ActivityDAO;
import com.wooki.domain.dao.CommentDAO;
import com.wooki.domain.exception.AuthorizationException;
import com.wooki.domain.model.Comment;
import com.wooki.domain.model.activity.Activity;
import com.wooki.domain.model.activity.CommentActivity;
import com.wooki.domain.model.activity.CommentEventType;
import com.wooki.services.security.WookiSecurityContext;
public class CommentManagerImpl implements CommentManager
{
private final CommentDAO commentDao;
private final ActivityDAO activityDao;
private WookiSecurityContext securityCtx;
public CommentManagerImpl(CommentDAO commentDao, ActivityDAO activityDAO,
ApplicationContext context)
{
this.commentDao = commentDao;
this.activityDao = activityDAO;
this.securityCtx = context.getBean(WookiSecurityContext.class);
}
public Comment findById(Long commId)
{
return commentDao.findById(commId);
}
public List<Comment> listForChapter(Long chapterId)
{
assert chapterId != null;
return this.commentDao.listForChapter(chapterId);
}
public List<Comment> listOpenForPublication(Long chapterId)
{
return commentDao.listForPublication(chapterId);
}
public List<Object[]> listCommentInfos(Long publicationId)
{
return commentDao.listCommentsInfoForPublication(publicationId);
}
public List<Comment> listForPublicationAndDomId(Long publicationId, String domId)
{
return commentDao.listForPublicationAndDomId(publicationId, domId);
}
public void removeComment(Long commId)
{
Comment c = this.commentDao.findById(commId);
assert c != null;
if (!securityCtx.isOwner(c)) { throw new AuthorizationException(
"User is not authorized to remove this comment : " + commId); }
this.commentDao.delete(c);
CommentActivity ca = new CommentActivity();
ca.setBook(c.getPublication().getChapter().getBook());
ca.setCreationDate(Calendar.getInstance().getTime());
ca.setUser(this.securityCtx.getUser());
ca.setType(CommentEventType.DELETE);
ca.setComment(c);
this.activityDao.create(ca);
// Flag comment activity as unavailable
List<Activity> activities = this.activityDao.listAllActivitiesOnComment(c.getId());
if (activities != null)
{
for (Activity ac : activities)
{
ac.setResourceUnavailable(true);
this.activityDao.update(ac);
}
}
}
public Comment update(Comment comment)
{
assert comment != null;
return commentDao.update(comment);
}
}