java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml | 6 ++++
java/code/src/com/redhat/rhn/domain/errata/AbstractErrata.java | 8 +++++
java/code/src/com/redhat/rhn/domain/errata/Errata.java | 8 +++++
java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java | 1
java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java | 3 ++
java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java | 15
++++++++++
6 files changed, 41 insertions(+)
New commits:
commit d9cff23cbc3f2ec1c7a91897b3cbfe9bc45426c9
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue May 24 16:05:41 2011 +0200
443126 - introduce notifications for custom errata
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
index 308cacf..fc8b537 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
@@ -1166,6 +1166,12 @@ SELECT 1
</query>
</write-mode>
+<write-mode name="clear_errata_channel_notification">
+ <query params="eid, cid">
+ delete from rhnErrataQueue where errata_id = :eid and channel_id = :cid
+ </query>
+</write-mode>
+
<mode name="list_errata_notification">
<query params="eid">
SELECT errata_id, channel_id, next_action
diff --git a/java/code/src/com/redhat/rhn/domain/errata/AbstractErrata.java
b/java/code/src/com/redhat/rhn/domain/errata/AbstractErrata.java
index c828584..51b0186 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/AbstractErrata.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/AbstractErrata.java
@@ -610,6 +610,14 @@ public abstract class AbstractErrata extends BaseDomainHelper
implements
/**
* {@inheritDoc}
*/
+ public void addChannelNotification(Channel channelIn, Date dateIn) {
+ ErrataManager.clearErrataChannelNotifications(this, channelIn);
+ ErrataManager.addErrataNotification(this, channelIn, dateIn);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public List getNotificationQueue() {
return ErrataManager.listErrataNotifications(this);
}
diff --git a/java/code/src/com/redhat/rhn/domain/errata/Errata.java
b/java/code/src/com/redhat/rhn/domain/errata/Errata.java
index 39ffd38..dd610c0 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/Errata.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/Errata.java
@@ -384,6 +384,14 @@ public interface Errata {
void addNotification(Date dateIn);
/**
+ * Add a new notification for this errata
+ * in specified channel
+ * @param channelIn affected channel
+ * @param dateIn The notify date
+ */
+ void addChannelNotification(Channel channelIn, Date dateIn);
+
+ /**
* List errata notifications that are queued
* @return list of maps with channel_id and time
*/
diff --git a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
index f055d18..942c59a 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
@@ -274,6 +274,7 @@ public class ErrataFactory extends HibernateFactory {
errata = publish(errata);
}
errata.addChannel(chan);
+ errata.addChannelNotification(chan, new Date());
Set<Package> packagesToPush = new HashSet<Package>();
DataResult<PackageOverview> packs;
diff --git a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
index 8bfbee5..c9fdaa2 100644
--- a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
@@ -28,6 +28,7 @@ import org.apache.log4j.Logger;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -59,6 +60,7 @@ public class CloneErrataAction
if (errata instanceof PublishedClonedErrata) {
errata.addChannel(currChan);
ErrataCacheManager.insertCacheForChannelErrata(cids, errata);
+ errata.addChannelNotification(currChan, new Date());
}
else {
Set<Channel> channelSet = new HashSet<Channel>();
@@ -72,6 +74,7 @@ public class CloneErrataAction
msg.getUser().getOrg());
published.setChannels(channelSet);
ErrataCacheManager.insertCacheForChannelErrata(cids, published);
+ published.addChannelNotification(currChan, new Date());
}
else {
log.debug("Re-publishing clone");
diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
index bff6a2a..57597b2 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -192,6 +192,7 @@ public class ErrataManager extends BaseManager {
Channel channel = ChannelManager.lookupByIdAndUser(channelId, user);
if (channel != null) {
errata.addChannel(channel);
+ errata.addChannelNotification(channel, new Date());
}
}
@@ -1303,6 +1304,20 @@ public class ErrataManager extends BaseManager {
}
/**
+ * Delete all errata notifications for an errata in specified channel
+ * @param e the errata to clear notifications for
+ * @param c affected channel
+ */
+ public static void clearErrataChannelNotifications(Errata e, Channel c) {
+ Map params = new HashMap();
+ params.put("eid", e.getId());
+ params.put("cid", c.getId());
+ WriteMode m = ModeFactory.getWriteMode(
+ "Errata_queries",
"clear_errata_channel_notification");
+ m.executeUpdate(params);
+ }
+
+ /**
* List queued errata notifications
* @param e the errata
* @return list of maps
Show replies by date