149 lines
4.5 KiB
Java
Executable File
149 lines
4.5 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; either version 2.1 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
package com.arsdigita.forum;
|
|
|
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
|
import com.arsdigita.kernel.Party;
|
|
import com.arsdigita.persistence.OID;
|
|
import com.arsdigita.persistence.DataCollection;
|
|
import com.arsdigita.persistence.DataObject;
|
|
import com.arsdigita.persistence.SessionManager;
|
|
import com.arsdigita.notification.Digest;
|
|
import com.arsdigita.notification.Notification;
|
|
import com.arsdigita.util.Assert;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
/**
|
|
* Extends Subscription to implement digest (periodic) notifications
|
|
* on a forum.
|
|
*
|
|
* @author Kevin Scaldeferri (kevin@arsdigita.com)
|
|
*
|
|
* @version $Revision: 1.1 $ $Author: chrisg23 $ $DateTime: 2004/08/17 23:26:27 $
|
|
*/
|
|
|
|
public class DailySubscription extends ForumSubscription {
|
|
|
|
public static final String BASE_DATA_OBJECT_TYPE =
|
|
"com.arsdigita.forum.ForumSubscription";
|
|
|
|
private Digest m_digest;
|
|
|
|
private static final String DIGEST = "digest";
|
|
|
|
/**
|
|
* @param forum the Forum that is subscribed to
|
|
* @param sender the Party which will appear in the From: header
|
|
*/
|
|
public DailySubscription(Forum forum, Party sender) {
|
|
this(BASE_DATA_OBJECT_TYPE, forum, sender);
|
|
}
|
|
|
|
/**
|
|
* @param forum the Forum that is subscribed to
|
|
* @param sender the Party which will appear in the From: header
|
|
*/
|
|
public DailySubscription(String typeName, Forum forum, Party sender) {
|
|
super(typeName, forum);
|
|
|
|
Assert.exists(sender, Party.class);
|
|
|
|
Digest digest = null;
|
|
|
|
String subject = "Daily digest from " + forum.getDisplayName()
|
|
+ " forum";
|
|
digest = new Digest(sender, subject, subject, "-- End digest --");
|
|
digest.setFrequency(Digest.DAILY);
|
|
|
|
setDigest(digest);
|
|
setIsModerationAlert(false);
|
|
}
|
|
|
|
protected DailySubscription(OID oid) throws DataObjectNotFoundException {
|
|
super(oid);
|
|
}
|
|
|
|
protected DailySubscription(BigDecimal id)
|
|
throws DataObjectNotFoundException {
|
|
|
|
super(new OID(BASE_DATA_OBJECT_TYPE, id));
|
|
}
|
|
|
|
protected DailySubscription(DataObject data) {
|
|
super(data);
|
|
}
|
|
|
|
protected String getBaseDataObjectType() {
|
|
return BASE_DATA_OBJECT_TYPE;
|
|
}
|
|
|
|
|
|
public String getSubscriptionGroupName() {
|
|
return "Daily Digest Subscription Group";
|
|
}
|
|
|
|
private Digest getDigest() {
|
|
if (m_digest == null) {
|
|
DataObject digestData = (DataObject) get(DIGEST);
|
|
if (digestData != null) {
|
|
m_digest = new Digest(digestData);
|
|
}
|
|
}
|
|
return m_digest;
|
|
}
|
|
|
|
private void setDigest(Digest digest) {
|
|
m_digest = digest;
|
|
setAssociation(DIGEST, m_digest);
|
|
}
|
|
|
|
/**
|
|
* Queues the post for once-daily notification of new posts.
|
|
*/
|
|
public void sendNotification(Post post) {
|
|
Notification notification = new Notification(getGroup(), post);
|
|
notification.setDigest(getDigest());
|
|
if (Forum.getConfig().deleteNotifications()) {
|
|
// make sure we don't delete the post itself!!!
|
|
notification.setMessageDelete(Boolean.FALSE);
|
|
notification.setIsPermanent(Boolean.FALSE);
|
|
}
|
|
notification.save();
|
|
}
|
|
|
|
/**
|
|
* @return the DailySubscription associated with the provided Forum
|
|
*/
|
|
public static ForumSubscription getFromForum(Forum forum) {
|
|
DataCollection subs = SessionManager.getSession()
|
|
.retrieve(DailySubscription.BASE_DATA_OBJECT_TYPE);
|
|
subs.addEqualsFilter("forum.id", forum.getID());
|
|
subs.addNotEqualsFilter("digest.id", null);
|
|
|
|
if (subs.next()) {
|
|
DailySubscription sub =
|
|
new DailySubscription(subs.getDataObject());
|
|
subs.close();
|
|
return sub;
|
|
}
|
|
return null;
|
|
}
|
|
}
|