r1659 - in trunk/src/main/java/cc/kune: core/server core/server/notifier core/server/scheduler wave/server/kspecific
Author: vjrj_ Date: 2012-01-12 05:14:28 +0100 (Thu, 12 Jan 2012) New Revision: 1659 Added: trunk/src/main/java/cc/kune/core/server/notifier/ClearUpdatedWavesHourlyJob.java Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationHourlyJob.java trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java trunk/src/main/java/cc/kune/wave/server/kspecific/WaveEmailNotifier.java Log: NEW - # 185: Implement notification levels (hourly and daily) similar to Google Wave http://kune.ourproject.org/issues/ticket/185 Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -133,8 +133,6 @@ builder.add(KuneContainerListener.class); builder.add(WaveEmailNotifier.class); - - // Cron tasks builder.add(CronServerTasksManager.class); builder.exclude("/http-bind.*"); Modified: trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -89,6 +89,7 @@ import cc.kune.core.server.mapper.Mapper; import cc.kune.core.server.notifier.NotificationSender; import cc.kune.core.server.notifier.NotificationSenderDefault; +import cc.kune.core.server.notifier.PendingNotificationSender; import cc.kune.core.server.notifier.UsersOnline; import cc.kune.core.server.rpc.ContentRPC; import cc.kune.core.server.rpc.GroupRPC; @@ -114,6 +115,7 @@ import cc.kune.wave.server.ParticipantUtils; import cc.kune.wave.server.kspecific.KuneWaveService; import cc.kune.wave.server.kspecific.KuneWaveServiceDefault; +import cc.kune.wave.server.kspecific.WaveEmailNotifier; import com.google.inject.Singleton; import com.google.inject.matcher.Matchers; @@ -195,8 +197,10 @@ bind(ParticipantUtils.class); bind(UsersOnline.class).to(UserSessionManager.class).in(Singleton.class); requestStaticInjection(AccessRightsUtils.class); + bind(WaveEmailNotifier.class).in(Singleton.class); + bind(PendingNotificationSender.class).in(Singleton.class); + bind(NotificationSender.class).to(NotificationSenderDefault.class).in(Singleton.class); bind(CronServerTasksManager.class).in(Singleton.class); - bind(NotificationSender.class).to(NotificationSenderDefault.class).in(Singleton.class); bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authenticated.class), outermostCall(new AuthenticatedMethodInterceptor())); bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authorizated.class), Added: trunk/src/main/java/cc/kune/core/server/notifier/ClearUpdatedWavesHourlyJob.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/notifier/ClearUpdatedWavesHourlyJob.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/notifier/ClearUpdatedWavesHourlyJob.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -0,0 +1,33 @@ +package cc.kune.core.server.notifier; + +import java.text.ParseException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.quartz.SchedulerException; + +import cc.kune.wave.server.kspecific.WaveEmailNotifier; + +import com.google.inject.Inject; + +public class ClearUpdatedWavesHourlyJob implements Job { + + public static final Log LOG = LogFactory.getLog(ClearUpdatedWavesHourlyJob.class); + + private final WaveEmailNotifier waveNotifier; + + @Inject + public ClearUpdatedWavesHourlyJob(final WaveEmailNotifier waveNotifier) throws ParseException, + SchedulerException { + this.waveNotifier = waveNotifier; + } + + @Override + public void execute(final JobExecutionContext context) throws JobExecutionException { + waveNotifier.clearUpdatedWaves(); + } + +} Modified: trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -49,34 +49,42 @@ "] ").toString(); } + private boolean noOnline(final String username) { + final boolean logged = usersOnline.isLogged(username); + LOG.debug(String.format("User '' is online for notifications? %s", username, logged)); + return !logged; + } + @Override public void send(final PendingNotification notification, final EmailNotificationFrequency withFrequency) { + final FormatedString subject = notification.getSubject(); + final FormatedString body = notification.getBody(); + final NotificationType notifyType = notification.getNotifyType(); + final boolean forceSend = notification.isForceSend(); + final boolean isHtml = notification.isHtml(); + + subject.setTemplate(subjectPrefix + subject.getTemplate()); + if (subject.shouldBeTranslated()) { + // Translate per recipient language + // final String subjectTranslation = i18n.tWithNT(user.getLanguage(), + // subject.getTemplate(), ""); + // if (subjectTranslation != null) { + // Right now commented because we are only testing + // subject.setTemplate(subjectTranslation); + // } + } + if (body.shouldBeTranslated()) { + // final String bodyTranslation = i18n.tWithNT(user.getLanguage(), + // body.getTemplate(), ""); + // if (bodyTranslation != null) { + // Right now commented because we are only testing + // body.setTemplate(bodyTranslation); + // } + } + for (final User user : notification.getDestProvider().getDest()) { final String username = user.getShortName(); - final FormatedString subject = notification.getSubject(); - final FormatedString body = notification.getBody(); - final NotificationType notifyType = notification.getNotifyType(); - final boolean forceSend = notification.isForceSend(); - final boolean isHtml = notification.isHtml(); - subject.setTemplate(subjectPrefix + subject.getTemplate()); - if (subject.shouldBeTranslated()) { - // Translate per recipient language - // final String subjectTranslation = i18n.tWithNT(user.getLanguage(), - // subject.getTemplate(), ""); - // if (subjectTranslation != null) { - // Right now commented because we are only testing - // subject.setTemplate(subjectTranslation); - // } - } - if (body.shouldBeTranslated()) { - // final String bodyTranslation = i18n.tWithNT(user.getLanguage(), - // body.getTemplate(), ""); - // if (bodyTranslation != null) { - // Right now commented because we are only testing - // body.setTemplate(bodyTranslation); - // } - } switch (notifyType) { case chat: // FIXME seems that html is not sending correctly... check server specs @@ -84,7 +92,7 @@ String.format("<b>%s</b>%s", subject.getString(), body.getString())); break; case email: - if (forceSend || (!usersOnline.isLogged(username) && withFrequency == user.getEmailNotifFreq())) { + if (forceSend || (noOnline(username) && withFrequency == user.getEmailNotifFreq())) { // we'll send this notification if is mandatory or this user is not // only and has this freq configured mailService.send(subject, FormatedString.build(emailTemplate.replace("%s", body.getString())), Modified: trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationHourlyJob.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationHourlyJob.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationHourlyJob.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -18,20 +18,16 @@ public static final Log LOG = LogFactory.getLog(PendingNotificationHourlyJob.class); private final PendingNotificationSender pendingManager; - private final WaveEmailNotifier waveNotifier; - @Inject public PendingNotificationHourlyJob(final PendingNotificationSender pendingManager, final WaveEmailNotifier waveNotifier) throws ParseException, SchedulerException { this.pendingManager = pendingManager; - this.waveNotifier = waveNotifier; } @Override public void execute(final JobExecutionContext context) throws JobExecutionException { LOG.info(String.format("Hourly notifications cron job start, %s", pendingManager)); pendingManager.sendHourlyNotifications(); - waveNotifier.clearUpdatedWaves(); LOG.info(String.format("Hourly notifications cron job end, %s", pendingManager)); } Modified: trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -123,7 +123,7 @@ * Send daily notifications. */ public void sendDailyNotifications() { - send(dailyPendNotif, NO_NEXT, EmailNotificationFrequency.immediately); + send(dailyPendNotif, NO_NEXT, EmailNotificationFrequency.daily); } /** @@ -137,7 +137,7 @@ * Send immediate notifications. */ public void sendImmediateNotifications() { - send(immediatePendNotif, hourlyPendNotif, EmailNotificationFrequency.daily); + send(immediatePendNotif, hourlyPendNotif, EmailNotificationFrequency.immediately); } @Override Modified: trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/core/server/scheduler/CronServerTasksManager.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -16,6 +16,7 @@ import org.quartz.SchedulerException; import org.quartz.impl.StdSchedulerFactory; +import cc.kune.core.server.notifier.ClearUpdatedWavesHourlyJob; import cc.kune.core.server.notifier.PendingNotificationDailyJob; import cc.kune.core.server.notifier.PendingNotificationHourlyJob; import cc.kune.core.server.notifier.PendingNotificationImmediateJob; @@ -53,16 +54,17 @@ public void start() { LOG.info("Starting cron manager"); try { - sched.start(); scheduleJob(PendingNotificationImmediateJob.class, "0 */2 * * * ?", "pendinnotifimmediate"); scheduleJob(PendingNotificationHourlyJob.class, "0 0 * * * ?", "pendingnotifhourly"); + scheduleJob(ClearUpdatedWavesHourlyJob.class, "0 0 * * * ?", "clearupdatedwaveshourly"); scheduleJob(PendingNotificationDailyJob.class, "0 5 0 * * ?", "pendingnotifdaily"); } catch (final SchedulerException e) { logError(e); } catch (final ParseException e) { logError(e); } + LOG.info("Cron manager started"); } @Override Modified: trunk/src/main/java/cc/kune/wave/server/kspecific/WaveEmailNotifier.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/kspecific/WaveEmailNotifier.java 2012-01-12 01:40:41 UTC (rev 1658) +++ trunk/src/main/java/cc/kune/wave/server/kspecific/WaveEmailNotifier.java 2012-01-12 04:14:28 UTC (rev 1659) @@ -24,7 +24,6 @@ import org.waveprotocol.wave.model.waveref.WaveRef; import cc.kune.core.client.state.SiteTokens; -import cc.kune.core.server.LogThis; import cc.kune.core.server.mail.FormatedString; import cc.kune.core.server.notifier.NotificationType; import cc.kune.core.server.notifier.PendingNotification; @@ -41,20 +40,40 @@ import com.google.inject.Inject; import com.google.inject.Singleton; -@LogThis @Singleton public class WaveEmailNotifier implements ContainerListener { public static final Log LOG = LogFactory.getLog(WaveEmailNotifier.class); - private HashSet<WaveId> updatedWavesInLastHour; + private final KuneBasicProperties basicProperties; + private final PendingNotificationSender notificator; + private final ParticipantUtils partUtils; + private final HashSet<WaveId> updatedWavesInLastHour; + private final UserFinder userFinder; + private final WaveBus waveBus; + private final KuneWaveService waveService; + @Inject public WaveEmailNotifier(final WaveBus waveBus, final PendingNotificationSender notificator, final KuneBasicProperties basicProperties, final ParticipantUtils partUtils, final KuneWaveService waveService, final UserFinder userFinder) { + this.waveBus = waveBus; + this.notificator = notificator; + this.basicProperties = basicProperties; + this.partUtils = partUtils; + this.waveService = waveService; + this.userFinder = userFinder; + updatedWavesInLastHour = new HashSet<WaveId>(); + LOG.info("WaveEmailNotifier created"); + } + public void clearUpdatedWaves() { + updatedWavesInLastHour.clear(); + } + + @Override + public void start() { final String siteCommonName = basicProperties.getSiteCommonName(); final String siteUrl = basicProperties.getSiteUrl(); - updatedWavesInLastHour = new HashSet<WaveId>(); waveBus.subscribe(new Subscriber() { private void addPendingNotif(final ParticipantId participant, final FormatedString subject, @@ -136,17 +155,10 @@ } } }); + LOG.info("WaveEmailNotifier started"); } - public void clearUpdatedWaves() { - updatedWavesInLastHour.clear(); - } - @Override - public void start() { - } - - @Override public void stop() { }
participants (1)
-
Vicente J. Ruiz Jurado