From f7b9b4995a30014d929c24626345ffa5eddbc679 Mon Sep 17 00:00:00 2001
From: Mike McKay <mfmckay@wustl.edu>
Date: Thu, 26 May 2016 20:00:16 -0500
Subject: [PATCH] Got changes to email prefix and admin email to take effect.
 Added support for preference change event handlers for notifications events
 and for handlers that can handle both notifications and site config events.

---
 .../NotificationsPreferenceHandler.java       | 32 +++++++++++
 ...tNotificationsPreferenceHandlerMethod.java | 15 +++++
 ...gNotificationsPreferenceHandlerMethod.java | 16 ++++++
 ...ractSiteConfigPreferenceHandlerMethod.java |  9 ++-
 .../InactivityBeforeLockoutHandlerMethod.java |  2 +-
 .../listeners/methods/MailHandlerMethod.java  | 56 +++++++++++++++++++
 .../ResetFailedLoginsHandlerMethod.java       |  2 +-
 7 files changed, 128 insertions(+), 4 deletions(-)
 create mode 100644 src/main/java/org/nrg/xnat/event/listeners/NotificationsPreferenceHandler.java
 create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/AbstractNotificationsPreferenceHandlerMethod.java
 create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigNotificationsPreferenceHandlerMethod.java
 create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/MailHandlerMethod.java

diff --git a/src/main/java/org/nrg/xnat/event/listeners/NotificationsPreferenceHandler.java b/src/main/java/org/nrg/xnat/event/listeners/NotificationsPreferenceHandler.java
new file mode 100644
index 00000000..c24b1eb0
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/event/listeners/NotificationsPreferenceHandler.java
@@ -0,0 +1,32 @@
+package org.nrg.xnat.event.listeners;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nrg.prefs.events.AbstractPreferenceHandler;
+import org.nrg.xdat.preferences.NotificationsPreferences;
+import org.nrg.xdat.preferences.PreferenceEvent;
+import org.nrg.xdat.preferences.SiteConfigPreferences;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import reactor.bus.EventBus;
+
+import javax.inject.Inject;
+
+@Service
+public class NotificationsPreferenceHandler extends AbstractPreferenceHandler<PreferenceEvent> {
+
+	@Inject
+	public NotificationsPreferenceHandler(final EventBus eventBus){
+		super(NotificationsPreferences.NOTIFICATIONS_TOOL_ID, eventBus);
+	}
+
+	@Autowired
+	@Lazy
+	private JdbcTemplate _template;
+
+	private static final Log _log = LogFactory.getLog(NotificationsPreferenceHandler.class);
+
+
+}
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractNotificationsPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractNotificationsPreferenceHandlerMethod.java
new file mode 100644
index 00000000..5b2c2547
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractNotificationsPreferenceHandlerMethod.java
@@ -0,0 +1,15 @@
+package org.nrg.xnat.event.listeners.methods;
+
+import org.nrg.prefs.events.PreferenceHandlerMethod;
+import org.nrg.xdat.preferences.NotificationsPreferences;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public abstract class AbstractNotificationsPreferenceHandlerMethod implements PreferenceHandlerMethod {
+    @Override
+    public List<String> getToolIds() {
+        return new ArrayList<String>(Arrays.asList(NotificationsPreferences.NOTIFICATIONS_TOOL_ID));
+    }
+}
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigNotificationsPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigNotificationsPreferenceHandlerMethod.java
new file mode 100644
index 00000000..f79800ee
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigNotificationsPreferenceHandlerMethod.java
@@ -0,0 +1,16 @@
+package org.nrg.xnat.event.listeners.methods;
+
+import org.nrg.prefs.events.PreferenceHandlerMethod;
+import org.nrg.xdat.preferences.NotificationsPreferences;
+import org.nrg.xdat.preferences.SiteConfigPreferences;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public abstract class AbstractSiteConfigNotificationsPreferenceHandlerMethod implements PreferenceHandlerMethod {
+    @Override
+    public List<String> getToolIds() {
+        return new ArrayList<String>(Arrays.asList(NotificationsPreferences.NOTIFICATIONS_TOOL_ID, SiteConfigPreferences.SITE_CONFIG_TOOL_ID));
+    }
+}
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java
index 43c7ef72..31dd51bc 100644
--- a/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java
@@ -1,11 +1,16 @@
 package org.nrg.xnat.event.listeners.methods;
 
 import org.nrg.prefs.events.PreferenceHandlerMethod;
+import org.nrg.xdat.preferences.NotificationsPreferences;
 import org.nrg.xdat.preferences.SiteConfigPreferences;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 public abstract class AbstractSiteConfigPreferenceHandlerMethod implements PreferenceHandlerMethod {
     @Override
-    public String getToolId() {
-        return SiteConfigPreferences.SITE_CONFIG_TOOL_ID;
+    public List<String> getToolIds() {
+        return new ArrayList<String>(Arrays.asList(SiteConfigPreferences.SITE_CONFIG_TOOL_ID));
     }
 }
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/InactivityBeforeLockoutHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/InactivityBeforeLockoutHandlerMethod.java
index 7f81283b..da904a6f 100644
--- a/src/main/java/org/nrg/xnat/event/listeners/methods/InactivityBeforeLockoutHandlerMethod.java
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/InactivityBeforeLockoutHandlerMethod.java
@@ -54,7 +54,7 @@ public class InactivityBeforeLockoutHandlerMethod extends AbstractSiteConfigPref
 	}
 
     private static final Logger       _log        = LoggerFactory.getLogger(InactivityBeforeLockoutHandlerMethod.class);
-    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("aliasTokenTimeout", "aliasTokenTimeoutSchedule"));
+    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("inactivityBeforeLockout", "inactivityBeforeLockoutSchedule"));
 
     @Autowired
     @Lazy
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/MailHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/MailHandlerMethod.java
new file mode 100644
index 00000000..37ad76ae
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/MailHandlerMethod.java
@@ -0,0 +1,56 @@
+package org.nrg.xnat.event.listeners.methods;
+
+import com.google.common.collect.ImmutableList;
+import org.nrg.notify.renderers.NrgMailChannelRenderer;
+import org.nrg.xdat.XDAT;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class MailHandlerMethod extends AbstractSiteConfigNotificationsPreferenceHandlerMethod {
+    @Override
+    public List<String> getHandledPreferences() {
+        return PREFERENCES;
+    }
+
+    @Override
+    public void handlePreferences(final Map<String, String> values) {
+        if (!Collections.disjoint(PREFERENCES, values.keySet())) {
+            updateMail();
+        }
+    }
+
+    @Override
+    public void handlePreference(final String preference, final String value) {
+        if(PREFERENCES.contains(preference)){
+            updateMail();
+        }
+    }
+
+    private void updateMail(){
+		try {
+            XDAT.getContextService().getBean(NrgMailChannelRenderer.class).setFromAddress(XDAT.getSiteConfigPreferences().getAdminEmail());
+            XDAT.getContextService().getBean(NrgMailChannelRenderer.class).setSubjectPrefix(XDAT.getNotificationsPreferences().getEmailPrefix());
+
+		} catch (Exception e1) {
+			_log.error("", e1);
+		}
+	}
+
+    private static final Logger       _log        = LoggerFactory.getLogger(MailHandlerMethod.class);
+    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("emailPrefix", "adminEmail"));
+
+    @Autowired
+    @Lazy
+    private JdbcTemplate _template;
+
+}
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/ResetFailedLoginsHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/ResetFailedLoginsHandlerMethod.java
index 1460e841..ad0cb875 100644
--- a/src/main/java/org/nrg/xnat/event/listeners/methods/ResetFailedLoginsHandlerMethod.java
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/ResetFailedLoginsHandlerMethod.java
@@ -53,7 +53,7 @@ public class ResetFailedLoginsHandlerMethod extends AbstractSiteConfigPreference
 	}
 
     private static final Logger       _log        = LoggerFactory.getLogger(ResetFailedLoginsHandlerMethod.class);
-    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("aliasTokenTimeout", "aliasTokenTimeoutSchedule"));
+    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("maxFailedLoginsLockoutDuration", "resetFailedLoginsSchedule"));
 
     @Autowired
     @Lazy
-- 
GitLab