From f93dd33e20ec054016a2b065deefb05a287d786a Mon Sep 17 00:00:00 2001 From: Mike McKay <mfmckay@wustl.edu> Date: Fri, 3 Jun 2016 16:05:00 -0500 Subject: [PATCH] XNAT-4255 Added PET Tracers to AdminUI. --- .../xnat/configuration/SchedulerConfig.java | 1 + .../methods/PetTracerHandlerMethod.java | 63 +++++++++++++++++++ .../xnat/spawner/site-admin-elements.yaml | 21 ++++++- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/PetTracerHandlerMethod.java diff --git a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java index 35f8b20e..991f1ab6 100644 --- a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java +++ b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java @@ -52,6 +52,7 @@ public class SchedulerConfig implements SchedulingConfigurer { _eventService.triggerEvent(new PreferenceEvent("archivePath", String.valueOf(XDAT.getSiteConfigPreferences().getArchivePath()))); _eventService.triggerEvent(new PreferenceEvent("security.services.role.default", String.valueOf(XDAT.getSiteConfigPreferences().getRoleService()))); _eventService.triggerEvent(new PreferenceEvent("checksums", String.valueOf(XDAT.getSiteConfigPreferences().getChecksums()))); + _eventService.triggerEvent(new PreferenceEvent("sitewidePetTracers", String.valueOf(XDAT.getSiteConfigPreferences().getSitewidePetTracers()))); for (final TriggerTask triggerTask : _triggerTasks) { taskRegistrar.addTriggerTask(triggerTask); } diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/PetTracerHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/PetTracerHandlerMethod.java new file mode 100644 index 00000000..6e2c5d23 --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/PetTracerHandlerMethod.java @@ -0,0 +1,63 @@ +package org.nrg.xnat.event.listeners.methods; + +import com.google.common.collect.ImmutableList; +import org.nrg.xdat.XDAT; +import org.nrg.xdat.security.helpers.Users; +import org.nrg.xdat.security.services.RoleHolder; +import org.nrg.xft.security.UserI; +import org.nrg.xnat.services.PETTracerUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +@Component +public class PetTracerHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod { + @Override + public List<String> getHandledPreferences() { + return PREFERENCES; + } + + @Override + public void handlePreferences(final Map<String, String> values) { + if (!Collections.disjoint(PREFERENCES, values.keySet())) { + updatePetTracer(); + } + } + + @Override + public void handlePreference(final String preference, final String value) { + if(PREFERENCES.contains(preference)){ + updatePetTracer(); + } + } + + private void updatePetTracer(){ + try { + PETTracerUtils.getService().setSiteWideTracerList(getAdminUser().getLogin(), PETTracerUtils.buildScriptPath(PETTracerUtils.ResourceScope.SITE_WIDE, ""), XDAT.getSiteConfigPreferences().getSitewidePetTracers()); + } + catch(Exception e){ + _log.error("Failed to set sitewide anon script.",e); + } + } + + private static final Logger _log = LoggerFactory.getLogger(PetTracerHandlerMethod.class); + private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("sitewidePetTracers")); + + private UserI getAdminUser() throws Exception { + for (String login : Users.getAllLogins()) { + final UserI user = Users.getUser(login); + if (_roleHolder.isSiteAdmin(user)) { + return user; + } + } + return null; + } + @Autowired + private RoleHolder _roleHolder; +} 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 50f11c17..20dd472d 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 @@ -945,7 +945,7 @@ anonymization: seriesImportFilter: kind: panel.form name: seriesImportFilter - label: "Series Import Filter" + label: "Series Import Filter (Site Wide)" method: POST contentType: json action: /xapi/siteConfig/batch @@ -984,6 +984,24 @@ seriesImportFilter: <a href="http://docs.oracle.com/javase/tutorial/essential/regex/" target="_blank">Java regular expression syntax</a>. These expressions are case-insensitive, i.e. the string "SAG LOCALIZER" will also match "Sag Localizer". +petTracers: + kind: panel.form + name: petTracers + label: "Pet Tracers (Site Wide)" + method: POST + contentType: json + action: /xapi/siteConfig/batch + load: XNAT.data.siteConfig + refresh: /xapi/siteConfig + contents: + sitewidePetTracers: + kind: panel.textarea + id: sitewidePetTracers + name: sitewidePetTracers + label: "Pet Tracers" + description: > + This is the site-wide list of PET tracers. List entries should be separated by whitespace. This list can also be replaced at the project level. + sessionUploadMethod: kind: panel.form name: sessionUploadMethod @@ -1312,6 +1330,7 @@ adminPage: contents: ${anonymization} ${seriesImportFilter} + ${petTracers} ${sessionUploadMethod} dicomScpReceivers: kind: tab -- GitLab