Repository: openmeetings
Updated Branches:
  refs/heads/master 9da05440f -> fbbd84f64


[OPENMEETINGS-1749] rss is loaded asynchronously, for all users


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/fbbd84f6
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/fbbd84f6
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/fbbd84f6

Branch: refs/heads/master
Commit: fbbd84f64b3832bd07c8211c83cc4ca5710be7d3
Parents: 9da0544
Author: Maxim Solodovnik <[email protected]>
Authored: Thu Nov 9 14:15:25 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Thu Nov 9 14:15:53 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/core/mail/MailHandler.java     | 18 ++--
 .../openmeetings/core/rss/LoadAtomRssFeed.java  | 11 +++
 .../installation/ImportInitvalues.java          |  2 +-
 .../service/quartz/scheduler/CleanupJob.java    | 22 ++---
 .../service/quartz/scheduler/ReminderJob.java   | 92 +++++++++++++++++++-
 .../web/user/dashboard/RssWidgetView.java       | 58 +-----------
 .../openmeetings/web/user/dashboard/rss.js      | 72 +++------------
 .../WEB-INF/classes/applicationContext.xml      |  5 ++
 .../openmeetings/service/quartz/TestJob.java    | 32 +++++++
 9 files changed, 177 insertions(+), 135 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
index 86f6a3b..e5106ea 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
@@ -269,25 +269,27 @@ public class MailHandler {
        }
 
        public void resetSendingStatus() {
-               log.debug("resetSendingStatus enter ...");
+               log.trace("resetSendingStatus enter ...");
                if (!isInitComplete()) {
                        return;
                }
                Calendar c = Calendar.getInstance();
                c.add(Calendar.MILLISECOND, -MAIL_SEND_TIMEOUT);
                mailMessageDao.resetSendingStatus(c);
-               log.debug("... resetSendingStatus done.");
+               log.trace("... resetSendingStatus done.");
        }
 
        public void sendMails() {
                init();
-               log.debug("sendMails enter ...");
+               log.trace("sendMails enter ...");
                List<MailMessage> list = mailMessageDao.get(0, 1, 
MailMessage.Status.NONE);
-               log.debug("Number of emails in init queue " + list.size());
-               while (!list.isEmpty()) {
-                       send(list.get(0), true);
-                       list = mailMessageDao.get(0, 1, 
MailMessage.Status.NONE);
+               if (!list.isEmpty()) {
+                       log.debug("Number of emails in init queue {}", 
list.size());
+                       while (!list.isEmpty()) {
+                               send(list.get(0), true);
+                               list = mailMessageDao.get(0, 1, 
MailMessage.Status.NONE);
+                       }
+                       log.debug("... sendMails done.");
                }
-               log.debug("... sendMails done.");
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java
index 5715812..9a05ccc 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java
@@ -27,8 +27,11 @@ import java.net.URL;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
+import com.github.openjson.JSONArray;
+
 public class LoadAtomRssFeed {
        private static final Logger log = 
Red5LoggerFactory.getLogger(LoadAtomRssFeed.class, getWebAppRootKey());
+       private static JSONArray rss = new JSONArray();
 
        private LoadAtomRssFeed() {}
 
@@ -47,4 +50,12 @@ public class LoadAtomRssFeed {
                conn.connect();
                return conn;
        }
+
+       public static JSONArray getRss() {
+               return rss;
+       }
+
+       public static void setRss(JSONArray rss) {
+               LoadAtomRssFeed.rss = rss;
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index ddaf8dc..606220a 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -432,7 +432,7 @@ public class ImportInitvalues {
                // Yandex
                OAuthServer yaServer = new OAuthServer();
                yaServer.setName("Yandex");
-               
yaServer.setIconUrl("http://yandex.st/morda-logo/i/favicon.ico";);
+               
yaServer.setIconUrl("https://yandex.st/morda-logo/i/favicon.ico";);
                yaServer.setClientId(CLIENT_PLACEHOLDER);
                yaServer.setClientSecret(SECRET_PLACEHOLDER);
                yaServer.setEnabled(false);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
index 919b112..bed9df3 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
@@ -72,7 +72,7 @@ public class CleanupJob extends AbstractJob {
        }
 
        public void cleanTestSetup() {
-               log.debug("CleanupJob.cleanTestSetup");
+               log.trace("CleanupJob.cleanTestSetup");
                final long now = System.currentTimeMillis();
                if (!isInitComplete()) {
                        return;
@@ -100,7 +100,7 @@ public class CleanupJob extends AbstractJob {
        }
 
        public void cleanRoomFiles() {
-               log.debug("CleanupJob.cleanRoomFiles");
+               log.trace("CleanupJob.cleanRoomFiles");
                final long now = System.currentTimeMillis();
                if (!isInitComplete()) {
                        return;
@@ -150,7 +150,7 @@ public class CleanupJob extends AbstractJob {
        }
 
        public void cleanExpiredRecordings() {
-               log.debug("CleanupJob.cleanExpiredRecordings");
+               log.trace("CleanupJob.cleanExpiredRecordings");
                processExpiringRecordings(true, (rec, days) -> {
                        if (days < 0) {
                                log.debug("cleanExpiredRecordings:: following 
recording will be deleted {}", rec);
@@ -164,17 +164,19 @@ public class CleanupJob extends AbstractJob {
        }
 
        public void cleanExpiredResetHash() {
-               log.debug("CleanupJob.cleanExpiredResetHash");
+               log.trace("CleanupJob.cleanExpiredResetHash");
                if (!isInitComplete()) {
                        return;
                }
                List<User> users = userDao.getByExpiredHash(resetHashTtl);
-               log.debug("... {} expired hashes were found", users.size());
-               for (User u : users) {
-                       u.setResetDate(null);
-                       u.setResethash(null);
-                       userDao.update(u, null);
+               if (!users.isEmpty()) {
+                       log.debug("... {} expired hashes were found", 
users.size());
+                       for (User u : users) {
+                               u.setResetDate(null);
+                               u.setResethash(null);
+                               userDao.update(u, null);
+                       }
+                       log.debug("... DONE CleanupJob.cleanExpiredResetHash");
                }
-               log.debug("... DONE CleanupJob.cleanExpiredResetHash");
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
index fb9516f..bb9f38c 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
@@ -18,32 +18,54 @@
  */
 package org.apache.openmeetings.service.quartz.scheduler;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static 
org.apache.openmeetings.core.rss.LoadAtomRssFeed.getFeedConnection;
+import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.setRss;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED1;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED2;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isInitComplete;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+
 import org.apache.openmeetings.core.mail.MailHandler;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.service.calendar.AppointmentLogic;
 import 
org.apache.openmeetings.service.mail.template.subject.RecordingExpiringTemplate;
 import 
org.apache.openmeetings.service.mail.template.subject.SubjectEmailTemplate;
+import org.apache.wicket.util.string.Strings;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import com.github.openjson.JSONArray;
+import com.github.openjson.JSONObject;
+
 @Component("reminderJob")
 public class ReminderJob extends AbstractJob {
        private static Logger log = 
Red5LoggerFactory.getLogger(ReminderJob.class, getWebAppRootKey());
+       private static final int MAX_ITEM_COUNT = 5;
        @Autowired
        private AppointmentLogic appointmentLogic;
        @Autowired
        private UserDao userDao;
        @Autowired
        private MailHandler mailHandler;
+       @Autowired
+       private ConfigurationDao cfgDao;;
 
        public void remindMeetings() {
-               log.debug("ReminderJob.remindMeetings");
+               log.trace("ReminderJob.remindMeetings");
                if (!isInitComplete()) {
                        return;
                }
@@ -55,7 +77,7 @@ public class ReminderJob extends AbstractJob {
        }
 
        public void remindExpiringRecordings() {
-               log.debug("ReminderJob.remindExpiringRecordings");
+               log.trace("ReminderJob.remindExpiringRecordings");
                processExpiringRecordings(false, (rec, days) -> {
                        if (days > 0) {
                                User u = userDao.get(rec.getInsertedBy());
@@ -72,4 +94,70 @@ public class ReminderJob extends AbstractJob {
                        recordingDao.update(rec);
                });
        }
+
+       public void loadRss() {
+               log.trace("ReminderJob.loadRss");
+               if (!isInitComplete()) {
+                       return;
+               }
+               if (!cfgDao.getBool(CONFIG_DASHBOARD_SHOW_RSS, false)) {
+                       log.debug("Rss disabled by Admin");
+                       return;
+               }
+               SAXReader reader = new SAXReader(false);
+               reader.setEncoding(UTF_8.name());
+               JSONArray feed = new JSONArray();
+               for (String url : new String[] 
{cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED1, ""), 
cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED2, "")}) {
+                       if (!Strings.isEmpty(url)) {
+                               HttpURLConnection con = null;
+                               try {
+                                       con = getFeedConnection(url);
+                                       try (InputStream is = 
con.getInputStream()) {
+                                               Document doc = reader.read(is);
+                                               int i = 0;
+                                               for (Element entry : 
doc.getRootElement().elements("item")) {
+                                                       i++;
+                                                       feed.put(new 
JSONObject()
+                                                                       
.put("title", entry.element("title").getStringValue())
+                                                                       
.put("link", entry.element("link").getStringValue())
+                                                                       
.put("content", entry.element("description").getStringValue())
+                                                                       
.put("published", entry.element("pubDate").getStringValue())
+                                                                       
.put("author", entry.element("author").getStringValue())
+                                                                       );
+                                                       if (i > MAX_ITEM_COUNT) 
{
+                                                               break;
+                                                       }
+                                               }
+                                               i = 0;
+                                               for (Element entry : 
doc.getRootElement().elements("entry")) {
+                                                       i++;
+                                                       Element date = 
entry.element("published");
+                                                       if (date == null) {
+                                                               date = 
entry.element("updated");
+                                                       }
+                                                       feed.put(new 
JSONObject()
+                                                                       
.put("title", entry.element("title").getStringValue())
+                                                                       
.put("link", entry.element("link").getStringValue())
+                                                                       
.put("content", entry.element("content").getStringValue())
+                                                                       
.put("published", date.getStringValue())
+                                                                       
.put("author", entry.element("author").getStringValue())
+                                                                       );
+                                                       if (i > MAX_ITEM_COUNT) 
{
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               } catch (IOException|DocumentException e) {
+                                       log.error("Unexpected error while 
getting RSS", e);
+                               } finally {
+                                       if (con != null) {
+                                               con.disconnect();
+                                       }
+                               }
+                       }
+               }
+               if (feed.length() > 0) {
+                       setRss(feed);
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
index b1da7b4..1f5f5df 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
@@ -18,81 +18,27 @@
  */
 package org.apache.openmeetings.web.user.dashboard;
 
-import static 
org.apache.openmeetings.core.rss.LoadAtomRssFeed.getFeedConnection;
-import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED1;
-import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED2;
-import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.getRss;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.wicket.behavior.AbstractAjaxBehavior;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
-import org.apache.wicket.request.resource.ContentDisposition;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
-import org.apache.wicket.util.resource.AbstractResourceStream;
-import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.wicketstuff.dashboard.Widget;
 import org.wicketstuff.dashboard.web.WidgetView;
 
 public class RssWidgetView extends WidgetView {
        private static final long serialVersionUID = 1L;
-       private final RSSFeedBehavior feed1;
-       private final RSSFeedBehavior feed2;
 
        public RssWidgetView(String id, Model<Widget> model) {
                super(id, model);
-               ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-               add(feed1 = new 
RSSFeedBehavior(cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED1, "")));
-               add(feed2 = new 
RSSFeedBehavior(cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED2, "")));
        }
 
        @Override
        public void renderHead(IHeaderResponse response) {
                super.renderHead(response);
                response.render(JavaScriptHeaderItem.forReference(new 
JavaScriptResourceReference(RssWidgetView.class, "rss.js")));
-               
response.render(OnDomReadyHeaderItem.forScript(String.format("loadRssTab('%s', 
'%s');", feed1.getCallbackUrl(), feed2.getCallbackUrl()))) ;
-       }
-
-       static class RSSFeedBehavior extends AbstractAjaxBehavior {
-               private static final long serialVersionUID = 1L;
-               private String url;
-
-               RSSFeedBehavior(String url) {
-                       this.url = url;
-               }
-
-               @Override
-               public void onRequest() {
-                       ResourceStreamRequestHandler handler = new 
ResourceStreamRequestHandler(new AbstractResourceStream() {
-                               private static final long serialVersionUID = 1L;
-                               transient HttpURLConnection con;
-
-                               @Override
-                               public InputStream getInputStream() throws 
ResourceStreamNotFoundException {
-                                       try {
-                                               con = getFeedConnection(url);
-                                               return con.getInputStream();
-                                       } catch (IOException e) {
-                                               throw new 
ResourceStreamNotFoundException();
-                                       }
-                               }
-
-                               @Override
-                               public void close() throws IOException {
-                                       if (con != null) {
-                                               con.disconnect();
-                                       }
-                               }
-                       }, "feed");
-                       
handler.setContentDisposition(ContentDisposition.INLINE);
-                       
getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
-               }
+               
response.render(OnDomReadyHeaderItem.forScript(String.format("displayRss(%s);", 
getRss().toString()))) ;
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
index 0725f7c..cc40eac 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
@@ -1,63 +1,19 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
-var MAX_ITEM_COUNT = 5;
-function getRssItems(url, next) {
-       //TODO items need to be merged and sorted by date
-       $.ajax({
-               url: url
-               , type: 'GET'
-               , crossDomain: true
-               , dataType: 'xml'
-               , cache: false
-               , success: function(data) {
-                       const $xml = $(data);
-                       let counter = MAX_ITEM_COUNT;
-                       $xml.find("item").each(function() {
-                               const $this = $(this), item = {
-                                       title : $this.find("title").text(),
-                                       link : $this.find("link").text(),
-                                       description : 
$this.find("description").text(),
-                                       pubDate : $this.find("pubDate").text(),
-                                       author : $this.find("author").text()
-                               }
-                               addItem(item);
-                               if (--counter < 0) {
-                                       return false;
-                               }
-                       });
-                       counter = MAX_ITEM_COUNT;
-                       $xml.find("entry").each(function() {
-                               const $this = $(this), item = {
-                                       title : $this.find("title").text(),
-                                       link : $this.find("link").text(),
-                                       description : $this.find("content"),
-                                       pubDate : 
$this.find("published").text(),
-                                       author : $this.find("author").text()
-                               }
-                               addItem(item);
-                               if (--counter < 0) {
-                                       return false;
-                               }
-                       });
-                       if (next) {
-                               getRssItems(next, null)
-                       } else {
-                               $('#feeds').accordion({
-                                       collapsible: true
-                                       , active: false
-                                       , header: 'h3'
-                                       , heightStyle: "content"
-                                       });
-                       }
-               }
-       });
+function addItem(feeds, item) {
+       feeds.append('<h3>' + item.title + '</h3>')
+               .append($('<div></div>').append(item.content));
 }
-function addItem(item) {
-       //TODO need to be checked
-       $('#feeds').append('<h3>' + item.title + '</h3>')
-               .append($('<div></div>').append(item.description));
-}
-function loadRssTab(url1, url2) {
+function displayRss(entries) {
        $('#feedcontainer').html('');
        $('#feedcontainer').append('<div id="feeds"></div>');
-       getRssItems(url1, url2);
+       const feeds = $('#feeds');
+       for (let i = 0; i < entries.length; ++i) {
+               addItem(feeds, entries[i]);
+       }
+       feeds.accordion({
+               collapsible: true
+               , active: false
+               , header: 'h3'
+               , heightStyle: "content"
+               });
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
index 4463d81..c8fec62 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
@@ -84,6 +84,10 @@
                        p:targetObject-ref="reminderJob" 
p:targetMethod="remindExpiringRecordings" p:concurrent="false" />
        <bean id="triggerExpiringRecording" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
                        p:jobDetail-ref="expiringRecordingJobDetail" 
p:startDelay="5000" p:repeatInterval="3600000"/>
+       <bean id="loadRssJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="reminderJob" 
p:targetMethod="loadRss" p:concurrent="false" />
+       <bean id="triggerLoadRss" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="loadRssJobDetail" p:startDelay="5000" 
p:repeatInterval="600000"/>
 
        <!-- Mail related jobs -->
        <bean id="resetSendingMailStatus" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
@@ -107,6 +111,7 @@
                                <ref bean="triggerExpiringRecording" />
                                <ref bean="triggerResetSendingMailStatus" />
                                <ref bean="triggerSendMails" />
+                               <ref bean="triggerLoadRss" />
                        </list>
                </property>
        </bean>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java
index a4832dc..19dda78 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java
@@ -18,16 +18,21 @@
  */
 package org.apache.openmeetings.service.quartz;
 
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setInitComplete;
 
 import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.service.quartz.scheduler.CleanupJob;
+import org.apache.openmeetings.service.quartz.scheduler.ReminderJob;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class TestJob extends AbstractWicketTester {
        @Autowired
        private CleanupJob cleanJob;
+       @Autowired
+       private ReminderJob reminderJob;
 
        @Test
        public void testNotInited() {
@@ -38,8 +43,35 @@ public class TestJob extends AbstractWicketTester {
                        cleanJob.cleanRoomFiles();
                        cleanJob.cleanSessions();
                        cleanJob.cleanTestSetup();
+
+                       reminderJob.loadRss();
+                       reminderJob.remindExpiringRecordings();
+                       reminderJob.remindMeetings();
                } finally {
                        setInitComplete(true);
                }
        }
+
+       private void testRss(boolean enabled, Runnable r) {
+               boolean prevRss = cfgDao.getBool(CONFIG_DASHBOARD_SHOW_RSS, 
false);
+               Configuration cfg = cfgDao.get(CONFIG_DASHBOARD_SHOW_RSS);
+               try {
+                       cfg.setValueB(enabled);
+                       cfgDao.update(cfg, null);
+                       r.run();
+               } finally {
+                       cfg.setValueB(prevRss);
+                       cfgDao.update(cfg, null);
+               }
+       }
+
+       @Test
+       public void testRssDisabled() {
+               testRss(false, () -> reminderJob.loadRss());
+       }
+
+       @Test
+       public void testRssEnabled() {
+               testRss(true, () -> reminderJob.loadRss());
+       }
 }

Reply via email to