Skip to content
Snippets Groups Projects
Commit 2ebb4839 authored by Rick Herrick's avatar Rick Herrick Committed by Mike McKay
Browse files

Rearchitecting preference event handler framework.

parent 1d8b1efb
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,8 @@ import org.apache.commons.codec.binary.StringUtils; ...@@ -4,6 +4,8 @@ import org.apache.commons.codec.binary.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.nrg.framework.event.entities.EventSpecificFields; 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.XDAT;
import org.nrg.xdat.preferences.SiteConfigPreferenceEvent; import org.nrg.xdat.preferences.SiteConfigPreferenceEvent;
import org.nrg.xdat.preferences.SiteConfigPreferences; import org.nrg.xdat.preferences.SiteConfigPreferences;
...@@ -21,107 +23,92 @@ import reactor.bus.EventBus; ...@@ -21,107 +23,92 @@ import reactor.bus.EventBus;
import reactor.fn.Consumer; import reactor.fn.Consumer;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.ArrayList; import java.util.*;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import static reactor.bus.selector.Selectors.type;
@Service @Service
public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPreferenceEvent>> { public class SiteConfigPreferenceHandler extends AbstractPreferenceHandler<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 void handleEvent(SiteConfigPreferenceEvent e) { @Inject
Set<EventSpecificFields> fields = e.getEventSpecificFields(); public SiteConfigPreferenceHandler(final EventBus eventBus){
if(fields!=null) { super(SiteConfigPreferences.SITE_CONFIG_TOOL_ID, eventBus);
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);
}
} }
private void updateInactivityBeforeLockout(SiteConfigPreferenceEvent e){ // if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeout")) {
try { // updateAliasTokenTimeout(e);
XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); // }
Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); // else if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeoutSchedule")) {
// updateAliasTokenTimeout(e);
for(ScheduledFuture temp: scheduledInactivityBeforeLockout){ // }
temp.cancel(false); // else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockout")) {
} // updateInactivityBeforeLockout(e);
// }
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()))); // else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockoutSchedule")) {
// updateInactivityBeforeLockout(e);
} catch (Exception e1) { // }
_log.error("", e1); // else if (StringUtils.equals(field.getFieldName(), "maxFailedLoginsLockoutDuration")) {
} // updateResetFailedLogins(e);
} // }
// else if (StringUtils.equals(field.getFieldName(), "resetFailedLoginsSchedule")) {
private void updateResetFailedLogins(SiteConfigPreferenceEvent e){ // updateResetFailedLogins(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){ // private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){
temp.cancel(false); // try {
} // XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true);
// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator();
scheduledResetFailedLogins.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ResetFailedLogins(_template,XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()),new CronTrigger(XDAT.getSiteConfigPreferences().getResetFailedLoginsSchedule()))); //
// for(ScheduledFuture temp: scheduledAliasTokenTimeouts){
} catch (Exception e1) { // temp.cancel(false);
_log.error("", e1); // }
} //
} // 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 @Autowired
@Lazy @Lazy
private JdbcTemplate _template; private JdbcTemplate _template;
private static final Log _log = LogFactory.getLog(SiteConfigPreferenceHandler.class); 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> scheduledInactivityBeforeLockout = new ArrayList<ScheduledFuture>();
private ArrayList<ScheduledFuture> scheduledResetFailedLogins = new ArrayList<ScheduledFuture>(); private ArrayList<ScheduledFuture> scheduledResetFailedLogins = new ArrayList<ScheduledFuture>();
} }
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;
}
}
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<>();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment