From 2ebb48397b00265e50eae6ea9a08d0f66d265d5b Mon Sep 17 00:00:00 2001 From: Rick Herrick <jrherrick@wustl.edu> Date: Wed, 25 May 2016 12:02:00 -0500 Subject: [PATCH] Rearchitecting preference event handler framework. --- .../SiteConfigPreferenceHandler.java | 165 ++++++++---------- ...ractSiteConfigPreferenceHandlerMethod.java | 11 ++ .../AliasTokenPreferenceHandlerMethod.java | 61 +++++++ 3 files changed, 148 insertions(+), 89 deletions(-) create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java diff --git a/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java b/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java index 9bfb3768..2eb63876 100644 --- a/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java +++ b/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java @@ -4,6 +4,8 @@ import org.apache.commons.codec.binary.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nrg.framework.event.entities.EventSpecificFields; +import org.nrg.prefs.events.AbstractPreferenceHandler; +import org.nrg.prefs.events.PreferenceHandlerMethod; import org.nrg.xdat.XDAT; import org.nrg.xdat.preferences.SiteConfigPreferenceEvent; import org.nrg.xdat.preferences.SiteConfigPreferences; @@ -21,107 +23,92 @@ import reactor.bus.EventBus; import reactor.fn.Consumer; import javax.inject.Inject; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Set; +import java.util.*; import java.util.concurrent.ScheduledFuture; -import static reactor.bus.selector.Selectors.type; - @Service -public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPreferenceEvent>> { - - @Inject public SiteConfigPreferenceHandler( EventBus eventBus ){ - eventBus.on(type(SiteConfigPreferenceEvent.class), this); - } - - @Override - public void accept(Event<SiteConfigPreferenceEvent> event) { - final SiteConfigPreferenceEvent scpEvent = event.getData(); - handleEvent(scpEvent); - } +public class SiteConfigPreferenceHandler extends AbstractPreferenceHandler<SiteConfigPreferenceEvent> { - public void handleEvent(SiteConfigPreferenceEvent e) { - Set<EventSpecificFields> fields = e.getEventSpecificFields(); - if(fields!=null) { - for (EventSpecificFields field : fields) { - if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeout")) { - updateAliasTokenTimeout(e); - } - else if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeoutSchedule")) { - updateAliasTokenTimeout(e); - } - else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockout")) { - updateInactivityBeforeLockout(e); - } - else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockoutSchedule")) { - updateInactivityBeforeLockout(e); - } - else if (StringUtils.equals(field.getFieldName(), "maxFailedLoginsLockoutDuration")) { - updateResetFailedLogins(e); - } - else if (StringUtils.equals(field.getFieldName(), "resetFailedLoginsSchedule")) { - updateResetFailedLogins(e); - } - } - } - } - - private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){ - try { - XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); - Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); - - for(ScheduledFuture temp: scheduledAliasTokenTimeouts){ - temp.cancel(false); - } - - scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template),new CronTrigger(XDAT.getSiteConfigPreferences().getAliasTokenTimeoutSchedule()))); - - } catch (Exception e1) { - _log.error("", e1); - } + @Inject + public SiteConfigPreferenceHandler(final EventBus eventBus){ + super(SiteConfigPreferences.SITE_CONFIG_TOOL_ID, eventBus); } - private void updateInactivityBeforeLockout(SiteConfigPreferenceEvent e){ - try { - XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); - Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); - - for(ScheduledFuture temp: scheduledInactivityBeforeLockout){ - temp.cancel(false); - } - - scheduledInactivityBeforeLockout.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new DisableInactiveUsers((new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout()))).intValue(),(new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()))).intValue()),new CronTrigger(XDAT.getSiteConfigPreferences().getInactivityBeforeLockoutSchedule()))); - - } catch (Exception e1) { - _log.error("", e1); - } - } - - private void updateResetFailedLogins(SiteConfigPreferenceEvent e){ - try { - XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); - Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); - - for(ScheduledFuture temp: scheduledResetFailedLogins){ - temp.cancel(false); - } - - scheduledResetFailedLogins.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ResetFailedLogins(_template,XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()),new CronTrigger(XDAT.getSiteConfigPreferences().getResetFailedLoginsSchedule()))); - - } catch (Exception e1) { - _log.error("", e1); - } - } +// if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeout")) { +// updateAliasTokenTimeout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeoutSchedule")) { +// updateAliasTokenTimeout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockout")) { +// updateInactivityBeforeLockout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockoutSchedule")) { +// updateInactivityBeforeLockout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "maxFailedLoginsLockoutDuration")) { +// updateResetFailedLogins(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "resetFailedLoginsSchedule")) { +// updateResetFailedLogins(e); +// } +// +// } +// +// private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){ +// try { +// XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); +// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); +// +// for(ScheduledFuture temp: scheduledAliasTokenTimeouts){ +// temp.cancel(false); +// } +// +// scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template),new CronTrigger(XDAT.getSiteConfigPreferences().getAliasTokenTimeoutSchedule()))); +// +// } catch (Exception e1) { +// _log.error("", e1); +// } +// } +// +// private void updateInactivityBeforeLockout(SiteConfigPreferenceEvent e){ +// try { +// XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); +// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); +// +// for(ScheduledFuture temp: scheduledInactivityBeforeLockout){ +// temp.cancel(false); +// } +// +// scheduledInactivityBeforeLockout.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new DisableInactiveUsers((new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout()))).intValue(),(new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()))).intValue()),new CronTrigger(XDAT.getSiteConfigPreferences().getInactivityBeforeLockoutSchedule()))); +// +// } catch (Exception e1) { +// _log.error("", e1); +// } +// } +// +// private void updateResetFailedLogins(SiteConfigPreferenceEvent e){ +// try { +// XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); +// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); +// +// for(ScheduledFuture temp: scheduledResetFailedLogins){ +// temp.cancel(false); +// } +// +// scheduledResetFailedLogins.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ResetFailedLogins(_template,XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()),new CronTrigger(XDAT.getSiteConfigPreferences().getResetFailedLoginsSchedule()))); +// +// } catch (Exception e1) { +// _log.error("", e1); +// } +// } @Autowired @Lazy private JdbcTemplate _template; private static final Log _log = LogFactory.getLog(SiteConfigPreferenceHandler.class); - - private ArrayList<ScheduledFuture> scheduledAliasTokenTimeouts = new ArrayList<ScheduledFuture>(); private ArrayList<ScheduledFuture> scheduledInactivityBeforeLockout = new ArrayList<ScheduledFuture>(); + private ArrayList<ScheduledFuture> scheduledResetFailedLogins = new ArrayList<ScheduledFuture>(); } 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 new file mode 100644 index 00000000..43c7ef72 --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java @@ -0,0 +1,11 @@ +package org.nrg.xnat.event.listeners.methods; + +import org.nrg.prefs.events.PreferenceHandlerMethod; +import org.nrg.xdat.preferences.SiteConfigPreferences; + +public abstract class AbstractSiteConfigPreferenceHandlerMethod implements PreferenceHandlerMethod { + @Override + public String getToolId() { + return SiteConfigPreferences.SITE_CONFIG_TOOL_ID; + } +} diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java new file mode 100644 index 00000000..b7b068b3 --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java @@ -0,0 +1,61 @@ +package org.nrg.xnat.event.listeners.methods; + +import com.google.common.collect.ImmutableList; +import org.nrg.prefs.events.PreferenceHandlerMethod; +import org.nrg.xdat.XDAT; +import org.nrg.xdat.preferences.SiteConfigPreferenceEvent; +import org.nrg.xnat.security.alias.ClearExpiredAliasTokens; +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.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.ScheduledFuture; + +@Component +public class AliasTokenPreferenceHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod { + @Override + public List<String> getHandledPreferences() { + return PREFERENCES; + } + + @Override + public void handlePreferences(final Map<String, String> values) { + + } + + @Override + public void handlePreference(final String preference, final String value) { + + } + + private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){ + try { + XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); + Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); + + for(ScheduledFuture temp: scheduledAliasTokenTimeouts){ + temp.cancel(false); + } + + scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template), new CronTrigger(XDAT.getSiteConfigPreferences().getAliasTokenTimeoutSchedule()))); + + } catch (Exception e1) { + _log.error("", e1); + } + } + + private static final Logger _log = LoggerFactory.getLogger(AliasTokenPreferenceHandlerMethod.class); + private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("aliasTokenTimeout", "aliasTokenTimeoutSchedule")); + + @Autowired + @Lazy + private JdbcTemplate _template; + + private ArrayList<ScheduledFuture> scheduledAliasTokenTimeouts = new ArrayList<>(); +} -- GitLab