diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java index 3b3fe2158b4276a0f90882d689b52870bde695a7..720513b98fef431d0de62aabb15ac0cdfbb1fed8 100644 --- a/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java @@ -29,18 +29,18 @@ public class AnonymizationHandlerMethod extends AbstractSiteConfigPreferenceHand @Override public void handlePreferences(final Map<String, String> values) { if (!Collections.disjoint(PREFERENCES, values.keySet())) { - updateInactivityBeforeLockout(); + updateAnon(); } } @Override public void handlePreference(final String preference, final String value) { if(PREFERENCES.contains(preference)){ - updateInactivityBeforeLockout(); + updateAnon(); } } - private void updateInactivityBeforeLockout(){ + private void updateAnon(){ try { if (XDAT.getSiteConfigPreferences().getEnableSitewideAnonymizationScript()) { AnonUtils.getService().enableSiteWide(getAdminUser().getLogin(), DicomEdit.buildScriptPath(DicomEdit.ResourceScope.SITE_WIDE, null)); diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/SeriesImportFilterHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/SeriesImportFilterHandlerMethod.java new file mode 100644 index 0000000000000000000000000000000000000000..2b35c2d232c52125a926cb6f8d19e310b0560e59 --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/SeriesImportFilterHandlerMethod.java @@ -0,0 +1,92 @@ +package org.nrg.xnat.event.listeners.methods; + +import com.google.common.collect.ImmutableList; +import org.nrg.dicomtools.filters.*; +import org.nrg.xdat.XDAT; +import org.nrg.xdat.security.helpers.Roles; +import org.nrg.xdat.security.helpers.Users; +import org.nrg.xft.security.UserI; +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 SeriesImportFilterHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod { + @Override + public List<String> getHandledPreferences() { + return PREFERENCES; + } + + @Override + public void handlePreferences(final Map<String, String> values) { + if (!Collections.disjoint(PREFERENCES, values.keySet())) { + updateSeriesImportFilter(); + } + } + + @Override + public void handlePreference(final String preference, final String value) { + if(PREFERENCES.contains(preference)){ + updateSeriesImportFilter(); + } + } + + private void updateSeriesImportFilter(){ + try { + final boolean enabled = XDAT.getSiteConfigPreferences().getEnableSitewideSeriesImportFilter(); + final SeriesImportFilterMode mode = SeriesImportFilterMode.mode(XDAT.getSiteConfigPreferences().getSitewideSeriesImportFilterMode()); + final String filterContents = XDAT.getSiteConfigPreferences().getSitewideSeriesImportFilter(); + final SeriesImportFilter seriesImportFilter; + if (mode == SeriesImportFilterMode.ModalityMap) { + seriesImportFilter = new ModalityMapSeriesImportFilter(filterContents, enabled); + } else { + seriesImportFilter = new RegExBasedSeriesImportFilter(filterContents, mode, enabled); + } + if (!seriesImportFilter.equals(getSeriesImportFilter())) { + getDicomFilterService().commit(seriesImportFilter, getAdminUser().getLogin(), "Updated site-wide series import filter from administrator UI."); + } + } + catch(Exception e){ + _log.error("Failed to update Series Import Filter.",e); + } + } + + private static final Logger _log = LoggerFactory.getLogger(SeriesImportFilterHandlerMethod.class); + private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("enableSitewideSeriesImportFilter", "sitewideSeriesImportFilterMode", "sitewideSeriesImportFilter")); + + private UserI getAdminUser() throws Exception { + for (String login : Users.getAllLogins()) { + final UserI user = Users.getUser(login); + if (Roles.isSiteAdmin(user)) { + return user; + } + } + return null; + } + + private DicomFilterService getDicomFilterService() { + return XDAT.getContextService().getBean(DicomFilterService.class); + } + + private SeriesImportFilter getSeriesImportFilter() { + DicomFilterService service = getDicomFilterService(); + if (service != null) { + return service.getSeriesImportFilter(); + } + else{ + return null; + } + } + + @Autowired + @Lazy + private JdbcTemplate _template; +} diff --git a/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml b/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml index c3971c66b3605028c64d681a9c81b3daae1f3d20..d6b7ecbe035f320ad0d4c8deaad3aebf0bef68f8 100644 --- a/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml +++ b/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml @@ -971,6 +971,9 @@ seriesImportFilter: blacklist: label: Blacklist value: blacklist + modalityMap: + label: Modality Map + value: modalityMap sitewideSeriesImportFilter: kind: panel.textarea id: sitewideSeriesImportFilter