Author: tv
Date: Fri Jan  8 11:29:21 2016
New Revision: 1723699

URL: http://svn.apache.org/viewvc?rev=1723699&view=rev
Log:
Eventually remove all static service accessors and replace them by lookups or 
annotations

Modified:
    turbine/core/trunk/src/java/org/apache/turbine/Turbine.java
    turbine/core/trunk/src/java/org/apache/turbine/modules/GenericLoader.java
    
turbine/core/trunk/src/java/org/apache/turbine/modules/actions/LegacyVelocityAction.java
    
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/LegacyVelocitySecureScreen.java
    
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/TemplateScreen.java
    
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java
    
turbine/core/trunk/src/java/org/apache/turbine/om/security/DefaultUserImpl.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/session/SessionListener.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/ui/TurbineUIService.java
    
turbine/core/trunk/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateInfo.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateNavigation.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateScreen.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityEmail.java
    
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java

Modified: turbine/core/trunk/src/java/org/apache/turbine/Turbine.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/Turbine.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/Turbine.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/Turbine.java Fri Jan  8 
11:29:21 2016
@@ -59,7 +59,6 @@ import org.apache.turbine.services.Servi
 import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.rundata.RunDataService;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
 import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.ServerData;
 import org.apache.turbine.util.TurbineConfig;
@@ -203,19 +202,17 @@ public class Turbine
 
                 configure(config, context);
 
-                TemplateService templateService = TurbineTemplate.getService();
+                TemplateService templateService =
+                    
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
                 if (templateService == null)
                 {
-                    throw new TurbineException(
-                            "No Template Service configured!");
+                    throw new TurbineException("No Template Service 
configured!");
                 }
 
                 if (getRunDataService() == null)
                 {
-                    throw new TurbineException(
-                            "No RunData Service configured!");
+                    throw new TurbineException("No RunData Service 
configured!");
                 }
-
             }
             catch (Exception e)
             {

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/modules/GenericLoader.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/modules/GenericLoader.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/modules/GenericLoader.java 
(original)
+++ turbine/core/trunk/src/java/org/apache/turbine/modules/GenericLoader.java 
Fri Jan  8 11:29:21 2016
@@ -25,8 +25,8 @@ import java.util.List;
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
 import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
 
 /**
  * This is the base class for the loaders. It contains code that is
@@ -41,7 +41,7 @@ import org.apache.turbine.services.assem
 public abstract class GenericLoader<T extends Assembler>
 {
     /** The Assembler Broker Service */
-    protected AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
+    protected AssemblerBrokerService ab;
 
     /** @serial This can be serialized */
     private boolean reload = false;
@@ -58,6 +58,7 @@ public abstract class GenericLoader<T ex
     public GenericLoader()
     {
         super();
+        ab = 
(AssemblerBrokerService)TurbineServices.getInstance().getService(AssemblerBrokerService.SERVICE_NAME);
     }
 
     /**

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/modules/actions/LegacyVelocityAction.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/modules/actions/LegacyVelocityAction.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/modules/actions/LegacyVelocityAction.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/modules/actions/LegacyVelocityAction.java
 Fri Jan  8 11:29:21 2016
@@ -22,7 +22,6 @@ package org.apache.turbine.modules.actio
 import org.apache.fulcrum.parser.ParameterParser;
 import org.apache.turbine.Turbine;
 import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
 import org.apache.turbine.util.RunData;
 import org.apache.velocity.context.Context;
 
@@ -79,7 +78,7 @@ public abstract class LegacyVelocityActi
 
         RunData data = getRunData(pipelineData);
         ParameterParser pp = pipelineData.get(Turbine.class, 
ParameterParser.class);
-        Context context = TurbineVelocity.getContext(pipelineData);
+        Context context = velocity.getContext(pipelineData);
         executeEvents(pp, new Class<?>[]{ RunData.class, Context.class },
                 new Object[]{ data, context });
     }

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/LegacyVelocitySecureScreen.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/modules/screens/LegacyVelocitySecureScreen.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/LegacyVelocitySecureScreen.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/LegacyVelocitySecureScreen.java
 Fri Jan  8 11:29:21 2016
@@ -21,7 +21,6 @@ package org.apache.turbine.modules.scree
 
 
 import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
 import org.apache.turbine.util.RunData;
 import org.apache.velocity.context.Context;
 
@@ -59,7 +58,7 @@ public abstract class LegacyVelocitySecu
     {
         if (isAuthorized(getRunData(pipelineData)))
         {
-            doBuildTemplate(getRunData(pipelineData), 
TurbineVelocity.getContext(pipelineData));
+            doBuildTemplate(getRunData(pipelineData), 
velocity.getContext(pipelineData));
         }
     }
 

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/TemplateScreen.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/modules/screens/TemplateScreen.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/TemplateScreen.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/TemplateScreen.java
 Fri Jan  8 11:29:21 2016
@@ -26,9 +26,10 @@ import org.apache.turbine.annotation.Tur
 import org.apache.turbine.modules.Screen;
 import org.apache.turbine.modules.ScreenLoader;
 import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
 import org.apache.turbine.util.RunData;
+import org.apache.turbine.util.template.TemplateInfo;
 
 /**
  * Template Screen.
@@ -132,14 +133,15 @@ public abstract class TemplateScreen
     public static void setTemplate(PipelineData pipelineData, String template)
     {
         RunData data = (RunData)pipelineData;
-        data.getTemplateInfo().setScreenTemplate(template);
+        TemplateInfo ti = data.getTemplateInfo();
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+
+        ti.setScreenTemplate(template);
         try
         {
             // We have do call getScreenTemplate because of the path
             // separator.
-            data.getTemplateInfo().setLayoutTemplate(
-                    TurbineTemplate.getLayoutTemplateName(
-                            data.getTemplateInfo().getScreenTemplate()));
+            
ti.setLayoutTemplate(templateService.getLayoutTemplateName(ti.getScreenTemplate()));
         }
         catch (Exception e)
         {

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java
 Fri Jan  8 11:29:21 2016
@@ -21,7 +21,6 @@ package org.apache.turbine.modules.scree
 
 
 import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
 import org.apache.velocity.context.Context;
 
 /**
@@ -67,7 +66,7 @@ public abstract class VelocitySecureScre
     {
         if (isAuthorized(pipelineData))
         {
-            doBuildTemplate(pipelineData, 
TurbineVelocity.getContext(pipelineData));
+            doBuildTemplate(pipelineData, velocity.getContext(pipelineData));
         }
     }
 

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/om/security/DefaultUserImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/om/security/DefaultUserImpl.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/om/security/DefaultUserImpl.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/om/security/DefaultUserImpl.java 
Fri Jan  8 11:29:21 2016
@@ -30,7 +30,8 @@ import javax.servlet.http.HttpSessionBin
 
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.turbine.services.security.TurbineSecurity;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.security.SecurityService;
 import org.apache.turbine.util.ObjectUtils;
 
 /**
@@ -97,7 +98,8 @@ public class DefaultUserImpl implements
         {
             if (hasLoggedIn())
             {
-                TurbineSecurity.saveOnSessionUnbind(this);
+                SecurityService securityService = 
(SecurityService)TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
+                securityService.saveOnSessionUnbind(this);
             }
         }
         catch (Exception e)

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java
 Fri Jan  8 11:29:21 2016
@@ -29,7 +29,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.turbine.modules.Assembler;
 import org.apache.turbine.modules.Loader;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
 import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
 import org.python.core.Py;
 import org.python.util.PythonInterpreter;
@@ -57,8 +58,7 @@ public abstract class PythonBaseFactory<
     private static Log log = LogFactory.getLog(PythonBaseFactory.class);
 
     /** Our configuration */
-    private final Configuration conf =
-        TurbineAssemblerBroker.getService().getConfiguration();
+    private final Configuration conf = 
TurbineServices.getInstance().getConfiguration(AssemblerBrokerService.SERVICE_NAME);
 
     /**
      * Get an Assembler.

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java
 Fri Jan  8 11:29:21 2016
@@ -24,7 +24,8 @@ package org.apache.turbine.services.jsp.
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.turbine.modules.NavigationLoader;
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.template.TemplateService;
 import org.apache.turbine.util.RunData;
 
 /**
@@ -70,7 +71,8 @@ public class JspNavigation
         String module = null;
         try
         {
-            module = TurbineTemplate.getNavigationName(template);
+            TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+            module = templateService.getNavigationName(template);
             NavigationLoader.getInstance().exec(data, module);
         }
         catch (Exception e)

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java
 Fri Jan  8 11:29:21 2016
@@ -25,8 +25,9 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.turbine.modules.Screen;
 import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
+import org.apache.turbine.services.template.TemplateService;
 import org.apache.turbine.util.RunData;
 
 /**
@@ -62,7 +63,9 @@ public class JspScreenPlaceholder
     public JspScreenPlaceholder(RunData data)
     {
         this.data = data;
-        this.screenLoader = 
(ScreenLoader)TurbineAssemblerBroker.getLoader(Screen.class);
+        AssemblerBrokerService abs = 
(AssemblerBrokerService)TurbineServices.getInstance()
+            .getService(AssemblerBrokerService.SERVICE_NAME);
+        this.screenLoader = (ScreenLoader)abs.getLoader(Screen.class);
     }
 
     /**
@@ -75,7 +78,8 @@ public class JspScreenPlaceholder
         try
         {
             template = data.getTemplateInfo().getScreenTemplate();
-            module = TurbineTemplate.getScreenName(template);
+            TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+            module = templateService.getScreenName(template);
             screenLoader.exec(data, module);
         }
         catch (Exception e)

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
 Fri Jan  8 11:29:21 2016
@@ -51,7 +51,7 @@ import org.apache.turbine.om.security.Us
 import org.apache.turbine.pipeline.DefaultPipelineData;
 import org.apache.turbine.services.ServiceManager;
 import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.template.TemplateService;
 import org.apache.turbine.util.FormMessages;
 import org.apache.turbine.util.ServerData;
 import org.apache.turbine.util.SystemError;
@@ -561,7 +561,8 @@ public class DefaultTurbineRunData
              * services are running. If we get nothing we
              * will fall back to the ECS layout.
              */
-            layout = TurbineTemplate.getDefaultLayoutName(this);
+            TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+            layout = templateService.getDefaultLayoutName(this);
 
             if (layout == null)
             {

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/session/SessionListener.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/session/SessionListener.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/session/SessionListener.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/session/SessionListener.java
 Fri Jan  8 11:29:21 2016
@@ -22,10 +22,13 @@ package org.apache.turbine.services.sess
 
 
 import java.io.Serializable;
+
 import javax.servlet.http.HttpSessionActivationListener;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 
+import org.apache.turbine.services.TurbineServices;
+
 /**
  * This class is a listener for both session creation and destruction,
  * and for session activation and passivation.  It must be configured
@@ -66,13 +69,35 @@ public class SessionListener
     private static final long serialVersionUID = -8083730704842809870L;
 
     /**
+     * The session service.
+     */
+    private SessionService sessionService;
+
+    /**
+     * Lazy initialization
+     *
+     * @return the sessionService
+     */
+    private SessionService getSessionService()
+    {
+        // don't care about synchronization, lookup is cheap
+        if (sessionService == null)
+        {
+            sessionService = 
(SessionService)TurbineServices.getInstance().getService(SessionService.SERVICE_NAME);
+        }
+
+        return sessionService;
+    }
+
+    /**
      * Called by the servlet container when a new session is created
      *
      * @param event Session creation event.
      */
+    @Override
     public void sessionCreated(HttpSessionEvent event)
     {
-        TurbineSession.addSession(event.getSession());
+        getSessionService().addSession(event.getSession());
         event.getSession().setAttribute(getClass().getName(), this);
     }
 
@@ -81,9 +106,10 @@ public class SessionListener
      *
      * @param event Session destruction event.
      */
+    @Override
     public void sessionDestroyed(HttpSessionEvent event)
     {
-        TurbineSession.removeSession(event.getSession());
+        getSessionService().removeSession(event.getSession());
     }
 
 
@@ -95,9 +121,10 @@ public class SessionListener
      *
      * @param event Session activation event.
      */
+    @Override
     public void sessionDidActivate(HttpSessionEvent event)
     {
-        TurbineSession.addSession(event.getSession());
+        getSessionService().addSession(event.getSession());
     }
 
     /**
@@ -106,8 +133,9 @@ public class SessionListener
      *
      * @param event Session passivation event.
      */
+    @Override
     public void sessionWillPassivate(HttpSessionEvent event)
     {
-        TurbineSession.removeSession(event.getSession());
+        getSessionService().removeSession(event.getSession());
     }
 }

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
 Fri Jan  8 11:29:21 2016
@@ -25,6 +25,7 @@ import java.util.Hashtable;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.turbine.services.TurbineBaseService;
+import org.apache.turbine.services.TurbineServices;
 
 /**
  * The base implementation of Turbine {@link
@@ -54,15 +55,18 @@ public abstract class BaseTemplateEngine
     /**
      * @see 
org.apache.turbine.services.template.TemplateEngineService#registerConfiguration
      */
+    @Override
     public void registerConfiguration(String defaultExt)
     {
         initConfiguration(defaultExt);
-        TurbineTemplate.registerTemplateEngineService(this);
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+        templateService.registerTemplateEngineService(this);
     }
 
     /**
      * @see 
org.apache.turbine.services.template.TemplateEngineService#getTemplateEngineServiceConfiguration
      */
+    @Override
     public Hashtable<String, Object> getTemplateEngineServiceConfiguration()
     {
         return configuration;
@@ -71,6 +75,7 @@ public abstract class BaseTemplateEngine
     /**
      * @see 
org.apache.turbine.services.template.TemplateEngineService#getAssociatedFileExtensions
      */
+    @Override
     public String[] getAssociatedFileExtensions()
     {
         return (String[]) configuration.get(TEMPLATE_EXTENSIONS);
@@ -135,5 +140,6 @@ public abstract class BaseTemplateEngine
     /**
      * @see 
org.apache.turbine.services.template.TemplateEngineService#templateExists
      */
+    @Override
     public abstract boolean templateExists(String template);
 }

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/TurbineTemplateService.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
 Fri Jan  8 11:29:21 2016
@@ -22,9 +22,8 @@ package org.apache.turbine.services.temp
 
 
 import java.io.File;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang.StringUtils;
@@ -46,7 +45,7 @@ import org.apache.turbine.services.Initi
 import org.apache.turbine.services.TurbineBaseService;
 import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.servlet.TurbineServlet;
+import org.apache.turbine.services.servlet.ServletService;
 import org.apache.turbine.services.template.mapper.BaseTemplateMapper;
 import org.apache.turbine.services.template.mapper.ClassMapper;
 import org.apache.turbine.services.template.mapper.DirectMapper;
@@ -238,6 +237,11 @@ public class TurbineTemplateService
     private String defaultTemplate;
 
     /**
+     * The servlet service.
+     */
+    private ServletService servletService;
+
+    /**
      * The mappings of template file extensions to {@link
      * org.apache.turbine.services.template.TemplateEngineService}
      * implementations. Implementing template engines can locate
@@ -245,7 +249,7 @@ public class TurbineTemplateService
      * may possess, and other template engines are stuck with file
      * based template hierarchy only.
      */
-    private Map<String, TemplateEngineService> templateEngineRegistry = null;
+    private ConcurrentMap<String, TemplateEngineService> 
templateEngineRegistry = null;
 
     /**
      * C'tor
@@ -268,6 +272,8 @@ public class TurbineTemplateService
         // Get the configuration for the template service.
         Configuration config = getConfiguration();
 
+        servletService = 
(ServletService)TurbineServices.getInstance().getService(ServletService.SERVICE_NAME);
+
         // Get the default extension to use if nothing else is applicable.
         defaultExtension = 
config.getString(TemplateService.DEFAULT_EXTENSION_KEY,
             TemplateService.DEFAULT_EXTENSION_VALUE);
@@ -284,7 +290,7 @@ public class TurbineTemplateService
         log.debug("Default Template:  " + defaultTemplate);
         log.debug("Use Caching:       " + useCache);
 
-        templateEngineRegistry = Collections.synchronizedMap(new 
HashMap<String, TemplateEngineService>());
+        templateEngineRegistry = new ConcurrentHashMap<String, 
TemplateEngineService>();
 
         initMapper(config);
         setInit(true);
@@ -625,7 +631,7 @@ public class TurbineTemplateService
     {
         for (int i = 0; i < templatePaths.length; i++)
         {
-            templatePaths[i] = TurbineServlet.getRealPath(templatePaths[i]);
+            templatePaths[i] = servletService.getRealPath(templatePaths[i]);
         }
         return templatePaths;
     }
@@ -633,20 +639,19 @@ public class TurbineTemplateService
     /**
      * Delegates to the appropriate {@link
      * org.apache.turbine.services.template.TemplateEngineService} to
-     * check the existance of the specified template.
+     * check the existence of the specified template.
      *
-     * @param template The template to check for the existance of.
+     * @param template The template to check for the existence of.
      * @param templatePaths The paths to check for the template.
      * @deprecated Use templateExists from the various Templating Engines
      */
     @Override
     @Deprecated
-    public boolean templateExists(String template,
-        String[] templatePaths)
+    public boolean templateExists(String template, String[] templatePaths)
     {
-        for (int i = 0; i < templatePaths.length; i++)
+        for (String templatePath : templatePaths)
         {
-            if (new File(templatePaths[i], template).exists())
+            if (new File(templatePath, template).exists())
             {
                 return true;
             }
@@ -661,13 +666,13 @@ public class TurbineTemplateService
      * @param service The <code>TemplateEngineService</code> to register.
      */
     @Override
-    public synchronized void 
registerTemplateEngineService(TemplateEngineService service)
+    public void registerTemplateEngineService(TemplateEngineService service)
     {
         String[] exts = service.getAssociatedFileExtensions();
 
-        for (int i = 0; i < exts.length; i++)
+        for (String ext : exts)
         {
-            templateEngineRegistry.put(exts[i], service);
+            templateEngineRegistry.put(ext, service);
         }
     }
 

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
 Fri Jan  8 11:29:21 2016
@@ -25,8 +25,9 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateEngineService;
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.template.TemplateService;
 
 /**
  * A base class for the various mappers which contains common
@@ -166,20 +167,19 @@ public abstract class BaseMapper
     {
         // We might get a Name without an extension passed. If yes, then we use
         // the Default extension
-
-        TemplateEngineService tes
-            = TurbineTemplate.getTemplateEngineService(template);
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+        TemplateEngineService tes = 
templateService.getTemplateEngineService(template);
 
         if (StringUtils.isEmpty(template) || (tes == null))
         {
-            return TurbineTemplate.getDefaultTemplate();
+            return templateService.getDefaultTemplate();
         }
 
         String defaultName = (String) 
tes.getTemplateEngineServiceConfiguration()
             .get(defaultProperty);
 
         return StringUtils.isEmpty(defaultName)
-            ? TurbineTemplate.getDefaultTemplate()
+            ? templateService.getDefaultTemplate()
             : defaultName;
     }
 

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java
 Fri Jan  8 11:29:21 2016
@@ -22,9 +22,8 @@ package org.apache.turbine.services.temp
 
 
 import org.apache.commons.lang.StringUtils;
-
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
 
 /**
  * This is a mapper like the BaseMapper but it returns its
@@ -80,6 +79,7 @@ public abstract class BaseTemplateMapper
      *
      * @return the mapped default name for the template.
      */
+    @Override
     public String getDefaultName(String template)
     {
         String res = super.getDefaultName(template);
@@ -98,10 +98,12 @@ public abstract class BaseTemplateMapper
             int dotIndex = templateComponents[templateComponents.length 
-1].lastIndexOf(TemplateService.EXTENSION_SEPARATOR);
             if (dotIndex < 0)
             {
-                if 
(StringUtils.isNotEmpty(TurbineTemplate.getDefaultExtension()))
+                TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+
+                if 
(StringUtils.isNotEmpty(templateService.getDefaultExtension()))
                 {
                     resBuf.append(TemplateService.EXTENSION_SEPARATOR);
-                    resBuf.append(TurbineTemplate.getDefaultExtension());
+                    resBuf.append(templateService.getDefaultExtension());
                 }
             }
             else

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
 Fri Jan  8 11:29:21 2016
@@ -28,9 +28,9 @@ import java.util.List;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateEngineService;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
 
 /**
  * This mapper is responsible for the lookup of templates for the Layout
@@ -71,6 +71,7 @@ public class LayoutTemplateMapper
      * @param template The template name.
      * @return The parsed module name.
      */
+    @Override
     public String doMapping(String template)
     {
         log.debug("doMapping(" + template + ")");
@@ -89,15 +90,16 @@ public class LayoutTemplateMapper
         log.debug("templateName is " + templateName);
 
         // Last element decides, which template Service to use...
-        TemplateEngineService tes = 
TurbineTemplate.getTemplateEngineService(templateName);
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+        TemplateEngineService tes = 
templateService.getTemplateEngineService(templateName);
 
         if (tes == null)
         {
             return null;
         }
 
-        String defaultName =
-            TurbineTemplate.getDefaultLayoutTemplateName(templateName); // 
We're, after all, a Layout Template Mapper...
+        // We're, after all, a Layout Template Mapper...
+        String defaultName = 
templateService.getDefaultLayoutTemplateName(templateName);
 
         // This is an optimization. If the name we're looking for is
         // already the default name for the template, don't do a "first run"

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
 Fri Jan  8 11:29:21 2016
@@ -28,9 +28,9 @@ import java.util.List;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateEngineService;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
 
 /**
  * This is a pretty simple mapper which returns template pathes for
@@ -67,6 +67,7 @@ public class ScreenDefaultTemplateMapper
      * @param template The template name.
      * @return The parsed module name.
      */
+    @Override
     public String doMapping(String template)
     {
         log.debug("doMapping(" + template + ")");
@@ -85,7 +86,8 @@ public class ScreenDefaultTemplateMapper
         log.debug("templateName is " + templateName);
 
         // Last element decides, which template Service to use...
-        TemplateEngineService tes = 
TurbineTemplate.getTemplateEngineService(templateName);
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+        TemplateEngineService tes = 
templateService.getTemplateEngineService(templateName);
 
         if (tes == null)
         {

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java
 Fri Jan  8 11:29:21 2016
@@ -22,9 +22,9 @@ package org.apache.turbine.services.temp
 
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateEngineService;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
 
 /**
  * This is a pretty simple mapper which returns template pathes for
@@ -62,8 +62,8 @@ public class ScreenTemplateMapper
         String [] components = StringUtils.split(template, 
String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR));
 
         // Last element decides, which template Service to use...
-        TemplateEngineService tes =
-            
TurbineTemplate.getTemplateEngineService(components[components.length - 1]);
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+        TemplateEngineService tes = 
templateService.getTemplateEngineService(components[components.length - 1]);
 
         String templatePackage = StringUtils.join(components, 
String.valueOf(separator));
 

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/ui/TurbineUIService.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/ui/TurbineUIService.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/ui/TurbineUIService.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/ui/TurbineUIService.java
 Fri Jan  8 11:29:21 2016
@@ -21,10 +21,11 @@ package org.apache.turbine.services.ui;
 
 import java.io.File;
 import java.io.InputStream;
-import java.util.HashMap;
 import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.filefilter.DirectoryFileFilter;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
@@ -32,18 +33,19 @@ import org.apache.commons.logging.LogFac
 import org.apache.turbine.Turbine;
 import org.apache.turbine.services.InitializationException;
 import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.pull.TurbinePull;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.pull.PullService;
 import org.apache.turbine.services.pull.tools.UITool;
-import org.apache.turbine.services.servlet.TurbineServlet;
+import org.apache.turbine.services.servlet.ServletService;
 import org.apache.turbine.util.ServerData;
 import org.apache.turbine.util.uri.DataURI;
 
 /**
  * The UI service provides for shared access to User Interface (skin) files,
- * as well as the ability for non-default skin files to inherit properties 
from 
- * a default skin.  Use TurbineUI to access skin properties from your screen 
- * classes and action code. UITool is provided as a pull tool for accessing 
- * skin properties from your templates. 
+ * as well as the ability for non-default skin files to inherit properties from
+ * a default skin.  Use TurbineUI to access skin properties from your screen
+ * classes and action code. UITool is provided as a pull tool for accessing
+ * skin properties from your templates.
  *
  * @author <a href="mailto:[email protected]";>Jason van Zyl</a>
  * @author <a href="mailto:[email protected]";>James Coltman</a>
@@ -101,7 +103,7 @@ public class TurbineUIService
     private static final String RELATIVE_PROPERTY = "tool.ui.want.relative";
 
     /**
-     * Default skin name. This name refers to a directory in the 
+     * Default skin name. This name refers to a directory in the
      * WEBAPP/resources/ui/skins directory. There is a file called skin.props
      * which contains the name/value pairs to be made available via the skin.
      */
@@ -126,6 +128,11 @@ public class TurbineUIService
     private static final String DEFAULT_SKIN_CSS_FILE = "skin.css";
 
     /**
+     * The servlet service.
+     */
+    private ServletService servletService;
+
+    /**
      * The directory within the skin directory that contains the skin images.
      */
     private String imagesDirectory;
@@ -144,11 +151,12 @@ public class TurbineUIService
     /**
      * The skin Properties store.
      */
-    private HashMap<String, Properties> skins = new HashMap<String, 
Properties>();
+    private ConcurrentHashMap<String, Properties> skins = new 
ConcurrentHashMap<String, Properties>();
 
     /**
      * Refresh the service by clearing all skins.
      */
+    @Override
     public void refresh()
     {
         clearSkins();
@@ -156,14 +164,15 @@ public class TurbineUIService
 
     /**
      * Refresh a particular skin by clearing it.
-     * 
+     *
      * @param skinName the name of the skin to clear.
      */
+    @Override
     public void refresh(String skinName)
     {
         clearSkin(skinName);
     }
-    
+
     /**
      * Retrieve the Properties for a specific skin.  If they are not yet loaded
      * they will be.  If the specified skin does not exist properties for the
@@ -171,32 +180,33 @@ public class TurbineUIService
      * level message will be written to the log.  If the webapp skin does not
      * exist the default skin will be used and id that doesn't exist an empty
      * Properties will be returned.
-     * 
-     * @param skinName the name of the skin whose properties are to be 
+     *
+     * @param skinName the name of the skin whose properties are to be
      * retrieved.
-     * @return the Properties for the named skin or the properties for the 
+     * @return the Properties for the named skin or the properties for the
      * default skin configured for the webapp if the named skin does not exist.
      */
     private Properties getSkinProperties(String skinName)
     {
         Properties skinProperties = skins.get(skinName);
-        return null != skinProperties ? skinProperties : loadSkin(skinName); 
+        return null != skinProperties ? skinProperties : loadSkin(skinName);
     }
 
     /**
-     * Retrieve a skin property from the named skin.  If the property is not 
-     * defined in the named skin the value for the default skin will be 
-     * provided.  If the named skin does not exist then the skin configured 
for 
+     * Retrieve a skin property from the named skin.  If the property is not
+     * defined in the named skin the value for the default skin will be
+     * provided.  If the named skin does not exist then the skin configured for
      * the webapp will be used.  If the webapp skin does not exist the default
-     * skin will be used.  If the default skin does not exist then 
+     * skin will be used.  If the default skin does not exist then
      * <code>null</code> will be returned.
-     * 
+     *
      * @param skinName the name of the skin to retrieve the property from.
      * @param key the key to retrieve from the skin.
-     * @return the value of the property for the named skin (defaulting to the 
+     * @return the value of the property for the named skin (defaulting to the
      * default skin), the webapp skin, the default skin or <code>null</code>,
      * depending on whether or not the property or skins exist.
      */
+    @Override
     public String get(String skinName, String key)
     {
         Properties skinProperties = getSkinProperties(skinName);
@@ -204,17 +214,18 @@ public class TurbineUIService
     }
 
     /**
-     * Retrieve a skin property from the default skin for the webapp.  If the 
-     * property is not defined in the webapp skin the value for the default 
skin 
-     * will be provided.  If the webapp skin does not exist the default skin 
-     * will be used.  If the default skin does not exist then 
<code>null</code> 
+     * Retrieve a skin property from the default skin for the webapp.  If the
+     * property is not defined in the webapp skin the value for the default 
skin
+     * will be provided.  If the webapp skin does not exist the default skin
+     * will be used.  If the default skin does not exist then <code>null</code>
      * will be returned.
-     * 
+     *
      * @param key the key to retrieve.
-     * @return the value of the property for the webapp skin (defaulting to 
the 
-     * default skin), the default skin or <code>null</code>, depending on 
+     * @return the value of the property for the webapp skin (defaulting to the
+     * default skin), the default skin or <code>null</code>, depending on
      * whether or not the property or skins exist.
      */
+    @Override
     public String get(String key)
     {
         return get(getWebappSkinName(), key);
@@ -222,59 +233,54 @@ public class TurbineUIService
 
     /**
      * Provide access to the list of available skin names.
-     * 
+     *
      * @return the available skin names.
      */
+    @Override
     public String[] getSkinNames()
     {
-        File skinsDir = new File(TurbineServlet.getRealPath(skinsDirectory));
+        File skinsDir = new File(servletService.getRealPath(skinsDirectory));
         return skinsDir.list(DirectoryFileFilter.INSTANCE);
     }
 
     /**
-     * Clear the map of stored skins. 
+     * Clear the map of stored skins.
      */
     private void clearSkins()
     {
-        synchronized (skins)
-        {
-            skins = new HashMap<String, Properties>();
-        }
+        skins.clear();
         log.debug("All skins were cleared.");
     }
-    
+
     /**
      * Clear a particular skin from the map of stored skins.
-     * 
+     *
      * @param skinName the name of the skin to clear.
      */
     private void clearSkin(String skinName)
     {
-        synchronized (skins)
+        if (!skinName.equals(SKIN_PROPERTY_DEFAULT))
         {
-            if (!skinName.equals(SKIN_PROPERTY_DEFAULT))
-            {
-                skins.remove(SKIN_PROPERTY_DEFAULT);
-            }
-            skins.remove(skinName);
+            skins.remove(SKIN_PROPERTY_DEFAULT);
         }
-        log.debug("The skin \"" + skinName 
+        skins.remove(skinName);
+        log.debug("The skin \"" + skinName
                 + "\" was cleared (will also clear \"default\" skin).");
     }
 
     /**
      * Load the specified skin.
-     * 
+     *
      * @param skinName the name of the skin to load.
      * @return the Properties for the named skin if it exists, or the skin
      * configured for the web application if it does not exist, or the default
-     * skin if that does not exist, or an empty Parameters object if even that 
+     * skin if that does not exist, or an empty Parameters object if even that
      * cannot be found.
      */
-    private synchronized Properties loadSkin(String skinName)
+    private Properties loadSkin(String skinName)
     {
         Properties defaultSkinProperties = null;
-        
+
         if (!StringUtils.equals(skinName, SKIN_PROPERTY_DEFAULT))
         {
             defaultSkinProperties = getSkinProperties(SKIN_PROPERTY_DEFAULT);
@@ -282,7 +288,7 @@ public class TurbineUIService
 
         // The following line is okay even for default.
         Properties skinProperties = new Properties(defaultSkinProperties);
-        
+
         StringBuilder sb = new StringBuilder();
         sb.append('/').append(skinsDirectory);
         sb.append('/').append(skinName);
@@ -292,22 +298,23 @@ public class TurbineUIService
             log.debug("Loading selected skin from: " + sb.toString());
         }
 
+        InputStream is = null;
+
         try
         {
             // This will NPE if the directory associated with the skin does not
-            // exist, but it is habdled correctly below.
-            InputStream is = TurbineServlet.getResourceAsStream(sb.toString());
-
+            // exist, but it is handled correctly below.
+            is = servletService.getResourceAsStream(sb.toString());
             skinProperties.load(is);
         }
         catch (Exception e)
         {
             log.error("Cannot load skin: " + skinName + ", from: "
                     + sb.toString(), e);
-            if (!StringUtils.equals(skinName, getWebappSkinName()) 
+            if (!StringUtils.equals(skinName, getWebappSkinName())
                     && !StringUtils.equals(skinName, SKIN_PROPERTY_DEFAULT))
             {
-                log.error("Attempting to return the skin configured for " 
+                log.error("Attempting to return the skin configured for "
                         + "webapp instead of " + skinName);
                 return getSkinProperties(getWebappSkinName());
             }
@@ -322,25 +329,27 @@ public class TurbineUIService
                 return new Properties();
             }
         }
-        
-        // Replace in skins HashMap
-        synchronized (skins)
+        finally
         {
-            skins.put(skinName, skinProperties);
+            IOUtils.closeQuietly(is);
         }
-        
+
+        // Replace in skins HashMap
+        skins.put(skinName, skinProperties);
+
         return skinProperties;
     }
 
     /**
-     * Get the name of the default skin name for the web application from the 
-     * TurbineResources.properties file. If the property is not present the 
+     * Get the name of the default skin name for the web application from the
+     * TurbineResources.properties file. If the property is not present the
      * name of the default skin will be returned.  Note that the web 
application
-     * skin name may be something other than default, in which case its 
+     * skin name may be something other than default, in which case its
      * properties will default to the skin with the name "default".
-     * 
+     *
      * @return the name of the default skin for the web application.
      */
+    @Override
     public String getWebappSkinName()
     {
         return Turbine.getConfiguration()
@@ -348,60 +357,64 @@ public class TurbineUIService
     }
 
     /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
+     * Retrieve the URL for an image that is part of a skin. The images are
      * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
      *
-     * <p>Use this if for some reason your server name, server scheme, or 
server 
-     * port change on a per request basis. I'm not sure if this would happen 
in 
+     * <p>Use this if for some reason your server name, server scheme, or 
server
+     * port change on a per request basis. I'm not sure if this would happen in
      * a load balanced situation. I think in most cases the image(String image)
      * method would probably be enough, but I'm not absolutely positive.
-     * 
+     *
      * @param skinName the name of the skin to retrieve the image from.
      * @param imageId the id of the image whose URL will be generated.
      * @param serverData the serverData to use as the basis for the URL.
      */
+    @Override
     public String image(String skinName, String imageId, ServerData serverData)
     {
         return getSkinResource(serverData, skinName, imagesDirectory, imageId);
     }
 
     /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
+     * Retrieve the URL for an image that is part of a skin. The images are
      * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     * 
+     *
      * @param skinName the name of the skin to retrieve the image from.
      * @param imageId the id of the image whose URL will be generated.
      */
+    @Override
     public String image(String skinName, String imageId)
     {
         return image(skinName, imageId, Turbine.getDefaultServerData());
     }
 
     /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style 
is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
+     * Retrieve the URL for the style sheet that is part of a skin. The style 
is
+     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the
      * filename skin.css
      *
-     * <p>Use this if for some reason your server name, server scheme, or 
server 
-     * port change on a per request basis. I'm not sure if this would happen 
in 
-     * a load balanced situation. I think in most cases the style() method 
would 
+     * <p>Use this if for some reason your server name, server scheme, or 
server
+     * port change on a per request basis. I'm not sure if this would happen in
+     * a load balanced situation. I think in most cases the style() method 
would
      * probably be enough, but I'm not absolutely positive.
-     * 
+     *
      * @param skinName the name of the skin to retrieve the style sheet from.
      * @param serverData the serverData to use as the basis for the URL.
      */
+    @Override
     public String getStylecss(String skinName, ServerData serverData)
     {
         return getSkinResource(serverData, skinName, null, cssFile);
     }
 
     /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style 
is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
+     * Retrieve the URL for the style sheet that is part of a skin. The style 
is
+     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the
      * filename skin.css
-     * 
+     *
      * @param skinName the name of the skin to retrieve the style sheet from.
      */
+    @Override
     public String getStylecss(String skinName)
     {
         return getStylecss(skinName, Turbine.getDefaultServerData());
@@ -411,15 +424,16 @@ public class TurbineUIService
      * Retrieve the URL for a given script that is part of a skin. The script 
is
      * stored in the WEBAPP/resources/ui/skins/[SKIN] directory.
      *
-     * <p>Use this if for some reason your server name, server scheme, or 
server 
-     * port change on a per request basis. I'm not sure if this would happen 
in 
-     * a load balanced situation. I think in most cases the style() method 
would 
+     * <p>Use this if for some reason your server name, server scheme, or 
server
+     * port change on a per request basis. I'm not sure if this would happen in
+     * a load balanced situation. I think in most cases the style() method 
would
      * probably be enough, but I'm not absolutely positive.
      *
      * @param skinName the name of the skin to retrieve the image from.
      * @param filename the name of the script file.
      * @param serverData the serverData to use as the basis for the URL.
      */
+    @Override
     public String getScript(String skinName, String filename,
             ServerData serverData)
     {
@@ -433,6 +447,7 @@ public class TurbineUIService
      * @param skinName the name of the skin to retrieve the image from.
      * @param filename the name of the script file.
      */
+    @Override
     public String getScript(String skinName, String filename)
     {
         return getScript(skinName, filename, Turbine.getDefaultServerData());
@@ -497,10 +512,12 @@ public class TurbineUIService
     {
         Configuration cfg = Turbine.getConfiguration();
 
-        // Get the resources directory that is specified in the TR.props or 
+        servletService = 
(ServletService)TurbineServices.getInstance().getService(ServletService.SERVICE_NAME);
+        PullService pullService = 
(PullService)TurbineServices.getInstance().getService(PullService.SERVICE_NAME);
+        // Get the resources directory that is specified in the TR.props or
         // default to "resources", relative to the webapp.
         StringBuilder sb = new StringBuilder();
-        sb.append(stripSlashes(TurbinePull.getResourcesDirectory()));
+        sb.append(stripSlashes(pullService.getResourcesDirectory()));
         sb.append("/");
         sb.append(stripSlashes(
                 cfg.getString(SKINDIR_PROPERTY, SKINS_DIRECTORY)));
@@ -521,8 +538,6 @@ public class TurbineUIService
     public void shutdown()
     {
         clearSkins();
-
         setInit(false);
     }
-
 }

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
 Fri Jan  8 11:29:21 2016
@@ -37,8 +37,8 @@ import org.apache.commons.logging.LogFac
 import org.apache.turbine.Turbine;
 import org.apache.turbine.pipeline.PipelineData;
 import org.apache.turbine.services.InitializationException;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.pull.PullService;
-import org.apache.turbine.services.pull.TurbinePull;
 import org.apache.turbine.services.template.BaseTemplateEngineService;
 import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.TurbineException;
@@ -136,11 +136,10 @@ public class TurbineVelocityService
             // We can only load the Pull Model ToolBox
             // if the Pull service has been listed in the TR.props
             // and the service has successfully been initialized.
-            if (TurbinePull.isRegistered())
+            if 
(TurbineServices.getInstance().isRegistered(PullService.SERVICE_NAME))
             {
                 pullModelActive = true;
-
-                pullService = TurbinePull.getService();
+                pullService = 
(PullService)TurbineServices.getInstance().getService(PullService.SERVICE_NAME);
 
                 log.debug("Activated Pull Tools");
             }

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateInfo.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateInfo.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateInfo.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateInfo.java 
Fri Jan  8 11:29:21 2016
@@ -24,7 +24,8 @@ package org.apache.turbine.util.template
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.template.TemplateService;
 import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.uri.URIConstants;
 
@@ -113,7 +114,8 @@ public class TemplateInfo
         // to help us out.
         try
         {
-            setLayoutTemplate(TurbineTemplate.getLayoutTemplateName(v));
+            TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+            setLayoutTemplate(templateService.getLayoutTemplateName(v));
         }
         catch (Exception e)
         {

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateNavigation.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateNavigation.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateNavigation.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateNavigation.java
 Fri Jan  8 11:29:21 2016
@@ -24,7 +24,8 @@ package org.apache.turbine.util.template
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.turbine.modules.NavigationLoader;
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.template.TemplateService;
 import org.apache.turbine.util.RunData;
 
 /**
@@ -96,7 +97,8 @@ public class TemplateNavigation
             }
 
             data.getTemplateInfo().setNavigationTemplate(template);
-            module = TurbineTemplate.getNavigationName(template);
+            TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+            module = templateService.getNavigationName(template);
 
             if (module == null)
             {

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateScreen.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateScreen.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateScreen.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateScreen.java
 Fri Jan  8 11:29:21 2016
@@ -25,7 +25,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.turbine.modules.Screen;
 import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
 import org.apache.turbine.util.RunData;
 
 /**
@@ -69,7 +70,9 @@ public class TemplateScreen
     {
         this.data = data;
         this.screen = data.getScreen();
-        this.screenLoader = 
(ScreenLoader)TurbineAssemblerBroker.getLoader(Screen.class);
+        AssemblerBrokerService abs = 
(AssemblerBrokerService)TurbineServices.getInstance()
+            .getService(AssemblerBrokerService.SERVICE_NAME);
+        this.screenLoader = (ScreenLoader)abs.getLoader(Screen.class);
     }
 
     /**

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
 Fri Jan  8 11:29:21 2016
@@ -28,7 +28,7 @@ import org.apache.fulcrum.security.model
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
 import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.template.TurbineTemplate;
+import org.apache.turbine.services.template.TemplateService;
 import org.apache.turbine.util.RunData;
 
 /**
@@ -50,9 +50,8 @@ import org.apache.turbine.util.RunData;
  */
 public class TemplateSecurityCheck
 {
-    private String message =
-            "Sorry, you do not have permission to access this area.";
-    private String failScreen = TurbineTemplate.getDefaultScreen();
+    private String message = "Sorry, you do not have permission to access this 
area.";
+    private String failScreen;
     private String failTemplate;
     private RunData data = null;
 
@@ -65,7 +64,7 @@ public class TemplateSecurityCheck
      */
     public TemplateSecurityCheck(RunData data, String message)
     {
-        this.data = data;
+        this(data);
         this.message = message;
     }
 
@@ -77,6 +76,8 @@ public class TemplateSecurityCheck
     public TemplateSecurityCheck(RunData data)
     {
         this.data = data;
+        TemplateService templateService = 
(TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
+        this.failScreen = templateService.getDefaultScreen();
     }
 
     /**

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java
 Fri Jan  8 11:29:21 2016
@@ -23,9 +23,10 @@ package org.apache.turbine.util.velocity
 
 import org.apache.fulcrum.parser.ParameterParser;
 import org.apache.turbine.Turbine;
+import org.apache.turbine.annotation.TurbineService;
 import org.apache.turbine.modules.ActionEvent;
 import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
+import org.apache.turbine.services.velocity.VelocityService;
 import org.apache.velocity.context.Context;
 
 /**
@@ -49,6 +50,10 @@ import org.apache.velocity.context.Conte
  */
 public abstract class VelocityActionEvent extends ActionEvent
 {
+    /** Injected velocity service */
+    @TurbineService
+    protected VelocityService velocity;
+
     /** Indicates whether or not this module has been initialized. */
     protected boolean initialized = false;
 
@@ -78,7 +83,7 @@ public abstract class VelocityActionEven
         }
 
         ParameterParser pp = pipelineData.get(Turbine.class, 
ParameterParser.class);
-        Context context = TurbineVelocity.getContext(pipelineData);
+        Context context = velocity.getContext(pipelineData);
         executeEvents(pp, new Class<?>[]{ PipelineData.class, Context.class },
                 new Object[]{ pipelineData, context });
     }

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityEmail.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityEmail.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityEmail.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityEmail.java 
Fri Jan  8 11:29:21 2016
@@ -28,7 +28,8 @@ import org.apache.commons.mail.EmailExce
 import org.apache.commons.mail.SimpleEmail;
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.services.velocity.TurbineVelocity;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.velocity.VelocityService;
 import org.apache.velocity.context.Context;
 
 /**
@@ -251,12 +252,13 @@ public class VelocityEmail extends Simpl
         try
         {
             // Process the template.
-            body = TurbineVelocity.handleRequest(context, template);
+            VelocityService velocityService = 
(VelocityService)TurbineServices.getInstance().getService(VelocityService.SERVICE_NAME);
+            body = velocityService.handleRequest(context, template);
         }
         catch (Exception e)
         {
             throw new EmailException(
-                    "Could not render velocitty template", e);
+                    "Could not render velocity template", e);
         }
 
         // If the caller desires word-wrapping, do it here

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java?rev=1723699&r1=1723698&r2=1723699&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
 Fri Jan  8 11:29:21 2016
@@ -31,8 +31,8 @@ import org.apache.commons.mail.EmailExce
 import org.apache.commons.mail.HtmlEmail;
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
+import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.velocity.VelocityService;
 import org.apache.velocity.context.Context;
 
 /**
@@ -107,13 +107,11 @@ public class VelocityHtmlEmail extends H
     private String mailServer;
 
     /**
-     * Constructor, sets the context object from the passed {@link 
PipelineData} object
-     *
-     * @param pipelineData A Turbine {@link PipelineData} object.
+     * Constructor
      */
-    public VelocityHtmlEmail(PipelineData pipelineData)
+    public VelocityHtmlEmail()
     {
-        this(TurbineVelocity.getContext(pipelineData));
+        super();
     }
 
     /**
@@ -123,6 +121,7 @@ public class VelocityHtmlEmail extends H
      */
     public VelocityHtmlEmail(Context context)
     {
+        this();
         this.context = context;
         embmap = new Hashtable<String, String>();
     }
@@ -195,15 +194,15 @@ public class VelocityHtmlEmail extends H
 
         try
         {
+            VelocityService velocityService = 
(VelocityService)TurbineServices.getInstance().getService(VelocityService.SERVICE_NAME);
+
             if (htmlTemplate != null)
             {
-                setHtmlMsg(
-                        TurbineVelocity.handleRequest(context, htmlTemplate));
+                setHtmlMsg(velocityService.handleRequest(context, 
htmlTemplate));
             }
             if (textTemplate != null)
             {
-                setTextMsg(
-                        TurbineVelocity.handleRequest(context, textTemplate));
+                setTextMsg(velocityService.handleRequest(context, 
textTemplate));
             }
         }
         catch (Exception e)


Reply via email to