From 6893dab6a97bea4bb719ede43d149fced4d07a04 Mon Sep 17 00:00:00 2001
From: Rick Herrick <jrherrick@wustl.edu>
Date: Mon, 22 Feb 2016 14:52:20 -0600
Subject: [PATCH] Fixed issue where initializing templatized DICOM file namer
 broke Turbine/Velocity initialization. Added initial delay to prearchive
 rebuild task.

---
 .../nrg/dcm/id/TemplatizedDicomFileNamer.java | 32 +++++++++++--------
 .../xnat/configuration/SchedulerConfig.java   |  2 +-
 .../webapp/WEB-INF/conf/InstanceSettings.xml  |  5 ---
 3 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/src/main/java/org/nrg/dcm/id/TemplatizedDicomFileNamer.java b/src/main/java/org/nrg/dcm/id/TemplatizedDicomFileNamer.java
index f5e79ca2..ecddac66 100644
--- a/src/main/java/org/nrg/dcm/id/TemplatizedDicomFileNamer.java
+++ b/src/main/java/org/nrg/dcm/id/TemplatizedDicomFileNamer.java
@@ -50,7 +50,6 @@ public class TemplatizedDicomFileNamer implements DicomFileNamer {
             _log.debug("Initializing the templatized DICOM file namer with the template: " + naming);
         }
         _naming = hasExtension(naming) ? naming : naming + SUFFIX;
-        _template = initializeTemplate();
         _variables = initializeVariables();
         _hashes = initializeHashes();
         validate();
@@ -88,7 +87,7 @@ public class TemplatizedDicomFileNamer implements DicomFileNamer {
         }
         StringWriter writer = new StringWriter();
         try {
-            _template.merge(context, writer);
+            getTemplate().merge(context, writer);
         } catch (Exception exception) {
             throw new RuntimeException("Error trying to resolve naming template", exception);
         }
@@ -103,7 +102,7 @@ public class TemplatizedDicomFileNamer implements DicomFileNamer {
      */
     private String calculateHashString(final List<String> variables, final Map<String,String> values) {
         final int hash = Lists.transform(variables, Functions.forMap(values)).hashCode();
-        return Long.toString(hash & 0xffffffffl, 36);
+        return Long.toString(hash & 0xffffffffL, 36);
     }
 
     /**
@@ -126,16 +125,20 @@ public class TemplatizedDicomFileNamer implements DicomFileNamer {
      * @return The initialized Velocity template.
      * @throws Exception
      */
-    private Template initializeTemplate() throws Exception {
-        RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices();
-        runtimeServices.init();
-        StringReader reader = new StringReader(_naming);
-        SimpleNode node = runtimeServices.parse(reader, "naming");
-        Template template = new Template();
-        template.setRuntimeServices(runtimeServices);
-        template.setData(node);
-        template.initDocument();
-        return template;
+    private Template getTemplate() throws Exception {
+        synchronized (_naming) {
+            if (_template == null) {
+                RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices();
+                runtimeServices.init();
+                StringReader reader   = new StringReader(_naming);
+                SimpleNode   node     = runtimeServices.parse(reader, "naming");
+                Template     template = new Template();
+                template.setRuntimeServices(runtimeServices);
+                template.setData(node);
+                template.initDocument();
+            }
+        }
+        return _template;
     }
 
     /**
@@ -194,7 +197,8 @@ public class TemplatizedDicomFileNamer implements DicomFileNamer {
     }
 
     private final String _naming;
-    private final Template _template;
     private final Set<String> _variables;
     private final Map<String, List<String>> _hashes;
+
+    private Template _template;
 }
diff --git a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
index fd68409e..83c4acec 100644
--- a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
+++ b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
@@ -49,7 +49,7 @@ public class SchedulerConfig {
         clearExpiredAliasTokens.call();
     }
 
-    @Scheduled(fixedRateString = "${services.rebuilder.repeat:60000}")
+    @Scheduled(fixedRateString = "${services.rebuilder.repeat:60000}", initialDelay = 60000)
     public void rebuildSessionXmls() {
         _log.debug("Now running the session rebuild process.");
         final SessionXMLRebuilder sessionXMLRebuilder = new SessionXMLRebuilder(_provider, _interval, _jmsTemplate);
diff --git a/src/main/webapp/WEB-INF/conf/InstanceSettings.xml b/src/main/webapp/WEB-INF/conf/InstanceSettings.xml
index f7fff52d..a1ae1fb6 100644
--- a/src/main/webapp/WEB-INF/conf/InstanceSettings.xml
+++ b/src/main/webapp/WEB-INF/conf/InstanceSettings.xml
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Tim Olsen (Washington University) -->
 <Instance_Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schemas/xdat/instance.xsd"
 				   site_url="http://localhost:8080" admin_email="administrator@xnat.org" archive_root_path="/data/xnat/archive"
 				   prearchive_path="/data/xnat/prearchive" cache_path="/data/xnat/cache"
@@ -19,9 +18,5 @@
 		<Data_Model File_Name="catalog.xsd" File_Location="schemas/catalog" DB="xnat"/>
 		<Data_Model File_Name="protocolValidation.xsd" File_Location="schemas/validation" DB="xnat"/>
 		<Data_Model File_Name="screeningAssessment.xsd" File_Location="schemas/screening" DB="xnat"/>
-
-<!--<Data_Model File_Name="ext.xsd" File_Location="schemas/ext" DB="xnat"/>-->
-		<!-- Start modules schemas: Reserved for xnat_builder, don't modify anything between this line and the end modules line. -->
-		<!-- End modules schemas: Reserved for xnat_builder, don't modify anything between this line and the start modules line. -->
 	</Models>
 </Instance_Settings>
-- 
GitLab