libreccm-legacy/ccm-forum/src/com/arsdigita/forum/DailySubscription.java

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;
}
}