Generic (Eclipse-) cleanup: Modernize code

git-svn-id: https://svn.apache.org/repos/asf/turbine/core/trunk@1886259 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/turbine/Turbine.java b/src/java/org/apache/turbine/Turbine.java
index e7fe61e..06a5bec 100644
--- a/src/java/org/apache/turbine/Turbine.java
+++ b/src/java/org/apache/turbine/Turbine.java
@@ -365,7 +365,7 @@
      * Checks configuraton style, resolves the location of the configuration and
      * loads it to internal {@link Configuration} object
      * ({@link #configuration}).
-     * 
+     *
      * Allows reading from a {@link CombinedConfigurationBuilder} xml configuration file.
      *
      * @param config
@@ -764,7 +764,7 @@
             try
             {
                 // Perform turbine specific initialization below.
-                Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+                Map<Class<?>, Object> runDataMap = new HashMap<>();
                 runDataMap.put(RunData.class, pipelineData);
                 // put the data into the pipeline
                 pipelineData.put(RunData.class, runDataMap);
diff --git a/src/java/org/apache/turbine/TurbineConstants.java b/src/java/org/apache/turbine/TurbineConstants.java
index f2b6926..828b445 100644
--- a/src/java/org/apache/turbine/TurbineConstants.java
+++ b/src/java/org/apache/turbine/TurbineConstants.java
@@ -221,7 +221,7 @@
 	String DEFAULT_HTML_CONTENT_TYPE = "text/html";
 	String DEFAULT_TEXT_CONTENT_TYPE = "text/plain";
 	String DEFAULT_CSS_CONTENT_TYPE = "text/css";
-	
+
 	/** Default Language property */
 	String LOCALE_DEFAULT_LANGUAGE_KEY = "locale.default.language";
 
diff --git a/src/java/org/apache/turbine/annotation/AnnotationProcessor.java b/src/java/org/apache/turbine/annotation/AnnotationProcessor.java
index 494d107..7913dce 100644
--- a/src/java/org/apache/turbine/annotation/AnnotationProcessor.java
+++ b/src/java/org/apache/turbine/annotation/AnnotationProcessor.java
@@ -51,7 +51,7 @@
     private static Logger log = LogManager.getLogger(AnnotationProcessor.class);
 
     /** Annotation cache */
-    private static ConcurrentMap<String, Annotation[]> annotationCache = new ConcurrentHashMap<String, Annotation[]>();
+    private static ConcurrentMap<String, Annotation[]> annotationCache = new ConcurrentHashMap<>();
 
     /**
      * Get cached annotations for field, class or method
diff --git a/src/java/org/apache/turbine/modules/ActionEvent.java b/src/java/org/apache/turbine/modules/ActionEvent.java
index 09cd978..5bbc7ff 100644
--- a/src/java/org/apache/turbine/modules/ActionEvent.java
+++ b/src/java/org/apache/turbine/modules/ActionEvent.java
@@ -119,7 +119,7 @@
 	/**
 	 * Cache for the methods to invoke
 	 */
-	private ConcurrentMap<String, Method> methodCache = new ConcurrentHashMap<String, Method>();
+	private ConcurrentMap<String, Method> methodCache = new ConcurrentHashMap<>();
 
 	/**
 	 * Retrieve a method of the given name and signature. The value is cached.
diff --git a/src/java/org/apache/turbine/modules/actions/InitContextsAction.java b/src/java/org/apache/turbine/modules/actions/InitContextsAction.java
index 4304869..2f26af9 100644
--- a/src/java/org/apache/turbine/modules/actions/InitContextsAction.java
+++ b/src/java/org/apache/turbine/modules/actions/InitContextsAction.java
@@ -68,7 +68,7 @@
         // used by the InitialContext class to create a new context
         // instance.
 
-        Hashtable<String, Properties> contextPropsList = new Hashtable<String, Properties>();
+        Hashtable<String, Properties> contextPropsList = new Hashtable<>();
         for (Iterator<String> contextKeys = conf.getKeys("context."); contextKeys.hasNext();)
         {
             String key = contextKeys.next();
diff --git a/src/java/org/apache/turbine/modules/screens/JSONScreen.java b/src/java/org/apache/turbine/modules/screens/JSONScreen.java
index 1f08d14..1da4127 100644
--- a/src/java/org/apache/turbine/modules/screens/JSONScreen.java
+++ b/src/java/org/apache/turbine/modules/screens/JSONScreen.java
@@ -132,10 +132,12 @@
         // Process the request
         Object json_res = jsonRpcService.processCall(cdata, json_bridge, request);
 
-        PrintWriter out = new PrintWriter(
-                new OutputStreamWriter(data.getResponse().getOutputStream(), charset));
-        out.print(json_res.toString());
-        out.flush();
-        out.close();
+        try (PrintWriter out = new PrintWriter(
+                new OutputStreamWriter(
+                    data.getResponse().getOutputStream(), charset)))
+        {
+            out.print(json_res.toString());
+            out.flush();
+        }
     }
 }
diff --git a/src/java/org/apache/turbine/modules/screens/PlainJSONScreen.java b/src/java/org/apache/turbine/modules/screens/PlainJSONScreen.java
index 07c37bc..a5cdfdc 100644
--- a/src/java/org/apache/turbine/modules/screens/PlainJSONScreen.java
+++ b/src/java/org/apache/turbine/modules/screens/PlainJSONScreen.java
@@ -41,13 +41,13 @@
  * <p>Here is an example from a subclass:
  *
  * <code>
- * 
+ *
  *
  * public void doOutput(PipelineData pipelineData) throws Exception
  * {
  *     RunData data = pipelineData.getRunData();
  *     JSONStrategy strategy = null;
- *     
+ *
  *     try
  *     {
  *        strategy = new XYStrategy();
@@ -60,7 +60,7 @@
  *          String msg = new JSONObject().put("error", e.getMessage()).toString();
  *          data.setMessage( msg );
  *       }
- *     
+ *
  *     super.doOutput(data);
  * }
  * </code>
@@ -74,7 +74,7 @@
     protected static final String JSON_TYPE = "application/json;charset=utf-8";
 
     protected final static int BUFFER_SIZE = 4096;
-    
+
     static final Logger log = LoggerFactory.getLogger(PlainJSONScreen.class);
 
     /** Injected service instance */
@@ -103,14 +103,16 @@
         RunData data = pipelineData.getRunData();
         // read in json!
         Charset charset = StandardCharsets.UTF_8; //request.getCharacterEncoding();
-        
+
         String json_res = data.getMessage();
 
         log.debug( "json_res output: {}", json_res );
-        PrintWriter out = new PrintWriter(
-                new OutputStreamWriter(data.getResponse().getOutputStream(),charset));
-        out.print(json_res.toString());
-        out.flush();
-        out.close();
+        try (PrintWriter out = new PrintWriter(
+                new OutputStreamWriter(
+                    data.getResponse().getOutputStream(),charset)))
+        {
+            out.print(json_res.toString());
+            out.flush();
+        }
     }
 }
diff --git a/src/java/org/apache/turbine/modules/screens/PlainJSONSecureAnnotatedScreen.java b/src/java/org/apache/turbine/modules/screens/PlainJSONSecureAnnotatedScreen.java
index 6d0f9c0..5adcd38 100644
--- a/src/java/org/apache/turbine/modules/screens/PlainJSONSecureAnnotatedScreen.java
+++ b/src/java/org/apache/turbine/modules/screens/PlainJSONSecureAnnotatedScreen.java
@@ -30,7 +30,7 @@
 
 public class PlainJSONSecureAnnotatedScreen extends PlainJSONScreen
 {
-    
+
     /**
      * This method overrides the method in JSONScreen to perform a security
      * check prior to producing the output.
@@ -48,12 +48,12 @@
     }
 
     /**
-     * Use this method to perform the necessary security check with Turbine annotations {@link TurbineRequiredRole} in 
+     * Use this method to perform the necessary security check with Turbine annotations {@link TurbineRequiredRole} in
      * a newly overridden {@link #doOutput(PipelineData)} method.
      *
      * @param pipelineData Turbine information.
      * @return <code>true</code> if the user is authorized to access the screen, by default it is required ACL is populated.
-     * If {@link TurbineRequiredRole} is not set, it is allowed by default 
+     * If {@link TurbineRequiredRole} is not set, it is allowed by default
      * @throws Exception A generic exception.
      */
     protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
diff --git a/src/java/org/apache/turbine/om/OMTool.java b/src/java/org/apache/turbine/om/OMTool.java
index ae28082..dec5735 100644
--- a/src/java/org/apache/turbine/om/OMTool.java
+++ b/src/java/org/apache/turbine/om/OMTool.java
@@ -47,7 +47,7 @@
 
     /** The cache of PullHelpers. **/
     private ConcurrentMap<String, OMTool.PullHelper> pullMap =
-            new ConcurrentHashMap<String, OMTool.PullHelper>();
+            new ConcurrentHashMap<>();
 
     /**
      *  The Factory responsible for retrieving the
@@ -61,7 +61,7 @@
      */
     public OMTool() throws Exception
     {
-        omMap = new ConcurrentHashMap<String, Object>();
+        omMap = new ConcurrentHashMap<>();
         String className = Turbine.getConfiguration().getString("tool.om.factory");
         this.omFactory = (RetrieverFactory)Class.forName(className).newInstance();
     }
diff --git a/src/java/org/apache/turbine/om/security/DefaultUserImpl.java b/src/java/org/apache/turbine/om/security/DefaultUserImpl.java
index d98cea4..225822e 100644
--- a/src/java/org/apache/turbine/om/security/DefaultUserImpl.java
+++ b/src/java/org/apache/turbine/om/security/DefaultUserImpl.java
@@ -68,7 +68,7 @@
         super();
         setUserDelegate( user );
         setCreateDate(new Date());
-        tempStorage = new HashMap<String, Object>(10);
+        tempStorage = new HashMap<>(10);
         setHasLoggedIn(Boolean.FALSE);
     }
 
@@ -459,7 +459,7 @@
 
             if (permStorage == null)
             {
-                permStorage = new HashMap<String, Object>();
+                permStorage = new HashMap<>();
             }
         }
 
@@ -492,7 +492,7 @@
     {
         if (tempStorage == null)
         {
-            tempStorage = new HashMap<String, Object>();
+            tempStorage = new HashMap<>();
         }
         return tempStorage;
     }
diff --git a/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java b/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java
index f590f4e..22cd00d 100644
--- a/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java
+++ b/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java
@@ -120,7 +120,7 @@
                 {
                     // copy keys into a new list, so we can clear the session
                     // and not get ConcurrentModificationException
-                    List<String> nameList = new ArrayList<String>();
+                    List<String> nameList = new ArrayList<>();
                     while (names.hasMoreElements())
                     {
                         nameList.add(names.nextElement());
diff --git a/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java b/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
index a8bfb20..50be1a6 100644
--- a/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
+++ b/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
@@ -44,7 +44,7 @@
 public class DefaultPipelineData implements PipelineData
 {
     private final Map<Class<?>, Map<Class<?>, ? super Object>> map =
-        new HashMap<Class<?>, Map<Class<?>, ? super Object>>();
+        new HashMap<>();
 
     /**
      * Put a configured map of objects into the pipeline data object
diff --git a/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java b/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java
index 7f5796f..fd39bea 100644
--- a/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java
+++ b/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java
@@ -36,8 +36,8 @@
  * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
  * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
  * @version $Id$
- * 
- * No replacement. Delegate session timeout to the container e.g. in web.xml, which allows to create a session at any place. 
+ *
+ * No replacement. Delegate session timeout to the container e.g. in web.xml, which allows to create a session at any place.
  */
 @Deprecated
 public class DefaultSessionTimeoutValve
diff --git a/src/java/org/apache/turbine/pipeline/TurbinePipeline.java b/src/java/org/apache/turbine/pipeline/TurbinePipeline.java
index ff35351..d1ad7e4 100644
--- a/src/java/org/apache/turbine/pipeline/TurbinePipeline.java
+++ b/src/java/org/apache/turbine/pipeline/TurbinePipeline.java
@@ -62,12 +62,12 @@
     /**
      * The set of Valves associated with this Pipeline.
      */
-    private CopyOnWriteArrayList<Valve> valves = new CopyOnWriteArrayList<Valve>();
+    private CopyOnWriteArrayList<Valve> valves = new CopyOnWriteArrayList<>();
 
     /**
      * The per-thread execution state for processing through this pipeline.
      */
-    private ThreadLocal<Iterator<Valve>> state = new ThreadLocal<Iterator<Valve>>();
+    private ThreadLocal<Iterator<Valve>> state = new ThreadLocal<>();
 
     /**
      * @see org.apache.turbine.pipeline.Pipeline#initialize()
@@ -137,7 +137,7 @@
      */
     protected void setValves(Valve[] valves)
     {
-        this.valves = new CopyOnWriteArrayList<Valve>(valves);
+        this.valves = new CopyOnWriteArrayList<>(valves);
     }
 
     /**
diff --git a/src/java/org/apache/turbine/services/BaseInitableBroker.java b/src/java/org/apache/turbine/services/BaseInitableBroker.java
index e7908a2..6759c73 100644
--- a/src/java/org/apache/turbine/services/BaseInitableBroker.java
+++ b/src/java/org/apache/turbine/services/BaseInitableBroker.java
@@ -60,14 +60,14 @@
         implements InitableBroker
 {
     /** A repository of Initable instances. */
-    protected Hashtable<String, Initable> initables = new Hashtable<String, Initable>();
+    protected Hashtable<String, Initable> initables = new Hashtable<>();
 
     /**
      * Names of classes being early-initialized are pushed onto this
      * stack.  A name appearing twice indicates a circular dependency
      * chain.
      */
-    protected Stack<String> stack = new Stack<String>();
+    protected Stack<String> stack = new Stack<>();
 
     /** Logging */
     private final Logger log = LogManager.getLogger(this.getClass());
diff --git a/src/java/org/apache/turbine/services/BaseService.java b/src/java/org/apache/turbine/services/BaseService.java
index a2369af..88275a9 100644
--- a/src/java/org/apache/turbine/services/BaseService.java
+++ b/src/java/org/apache/turbine/services/BaseService.java
@@ -54,6 +54,7 @@
      *
      * @param broker The ServiceBroker that instantiated this object.
      */
+    @Override
     public void setServiceBroker(ServiceBroker broker)
     {
         this.serviceBroker = broker;
@@ -64,6 +65,7 @@
      *
      * @param name The name of this Service.
      */
+    @Override
     public void setName(String name)
     {
         this.name = name;
@@ -74,6 +76,7 @@
      *
      * @return The name of this Service.
      */
+    @Override
     public String getName()
     {
         return name;
@@ -94,6 +97,7 @@
      *
      * @return The Properties of this Service.
      */
+    @Override
     public Properties getProperties()
     {
         return ConfigurationConverter.getProperties(getConfiguration());
@@ -104,6 +108,7 @@
      *
      * @return The Configuration of this Service.
      */
+    @Override
     public Configuration getConfiguration()
     {
         if (name == null)
diff --git a/src/java/org/apache/turbine/services/BaseServiceBroker.java b/src/java/org/apache/turbine/services/BaseServiceBroker.java
index b4a104d..e1ad728 100644
--- a/src/java/org/apache/turbine/services/BaseServiceBroker.java
+++ b/src/java/org/apache/turbine/services/BaseServiceBroker.java
@@ -60,12 +60,12 @@
     /**
      * Mapping of Service names to class names, keep order.
      */
-    private final Map<String, Class<?>> mapping = new LinkedHashMap<String, Class<?>>();
+    private final Map<String, Class<?>> mapping = new LinkedHashMap<>();
 
     /**
      * A repository of Service instances.
      */
-    private final ConcurrentHashMap<String, Service> services = new ConcurrentHashMap<String, Service>();
+    private final ConcurrentHashMap<String, Service> services = new ConcurrentHashMap<>();
 
     /**
      * Lock access during service initialization
@@ -102,7 +102,7 @@
      * the requirement of having init(Object) all
      * together.
      */
-    private final ConcurrentHashMap<String, Object> serviceObjects = new ConcurrentHashMap<String, Object>();
+    private final ConcurrentHashMap<String, Object> serviceObjects = new ConcurrentHashMap<>();
 
     /** Logging */
     private static final Logger log = LogManager.getLogger(BaseServiceBroker.class);
@@ -116,7 +116,7 @@
     /**
      * mapping from service names to instances of TurbineServiceProviders
      */
-    private final ConcurrentHashMap<String, Service> serviceProviderInstanceMap = new ConcurrentHashMap<String, Service>();
+    private final ConcurrentHashMap<String, Service> serviceProviderInstanceMap = new ConcurrentHashMap<>();
 
     /**
      * Default constructor, protected as to only be usable by subclasses.
@@ -246,7 +246,7 @@
     {
         // we need to temporarily store the earlyInit flags to avoid
         // ConcurrentModificationExceptions
-        Map<String, String> earlyInitFlags = new LinkedHashMap<String, String>();
+        Map<String, String> earlyInitFlags = new LinkedHashMap<>();
 
         /*
          * These keys returned in an order that corresponds
@@ -336,7 +336,7 @@
      */
     public Iterator<String> getServiceNames(String prefix)
     {
-        Set<String> keys = new LinkedHashSet<String>(mapping.keySet());
+        Set<String> keys = new LinkedHashSet<>(mapping.keySet());
         for(Iterator<String> key = keys.iterator(); key.hasNext();)
         {
             if (!key.next().startsWith(prefix))
@@ -500,7 +500,7 @@
          * this will fix the problem for now.
          */
 
-        ArrayList<String> reverseServicesList = new ArrayList<String>();
+        ArrayList<String> reverseServicesList = new ArrayList<>();
 
         for (Iterator<String> serviceNames = getServiceNames(); serviceNames.hasNext();)
         {
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java b/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
index 4f72776..f78fa27 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
@@ -104,9 +104,9 @@
 
         log.info("Registering {} {} factories.", Integer.valueOf(names.size()), type);
 
-        for (Iterator<Object> it = names.iterator(); it.hasNext(); )
+        for (Object name2 : names)
         {
-            String factory = (String) it.next();
+            String factory = (String) name2;
             try
             {
                 @SuppressWarnings("unchecked")
@@ -139,7 +139,7 @@
     public void init()
         throws InitializationException
     {
-        factories = new HashMap<Class<?>, List<?>>();
+        factories = new HashMap<>();
 
         try
         {
@@ -171,8 +171,8 @@
                 .getInt(TurbineConstants.MODULE_CACHE_SIZE_KEY,
                         TurbineConstants.MODULE_CACHE_SIZE_DEFAULT);
 
-            assemblerCache = new ConcurrentHashMap<String, Assembler>(cacheSize);
-            loaderCache = new ConcurrentHashMap<Class<?>, Loader<? extends Assembler>>(cacheSize);
+            assemblerCache = new ConcurrentHashMap<>(cacheSize);
+            loaderCache = new ConcurrentHashMap<>(cacheSize);
         }
 
         setInit(true);
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java
index 7ae1294..83f293b 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java
@@ -42,6 +42,7 @@
      * @param name name of the requested Assembler
      * @return an Assembler
      */
+    @Override
     public Action getAssembler(String name)
     {
         return getAssembler(Action.PREFIX, name);
@@ -52,6 +53,7 @@
      *
      * @return a Loader
      */
+    @Override
     public Loader<Action> getLoader()
     {
         return ActionLoader.getInstance();
@@ -62,6 +64,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Action> getManagedClass()
     {
         return Action.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
index 2e1237f..32dbdb4 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
@@ -52,7 +52,7 @@
      * A cache for previously obtained Class instances, which we keep in order
      * to reduce the Class.forName() overhead (which can be sizable).
      */
-    private final ConcurrentHashMap<String, Class<T>> classCache = new ConcurrentHashMap<String, Class<T>>();
+    private final ConcurrentHashMap<String, Class<T>> classCache = new ConcurrentHashMap<>();
 
     /**
      * Get an Assembler.
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java
index 4f8a529..1f3a3c8 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java
@@ -42,6 +42,7 @@
      * @param name name of the requested Assembler
      * @return an Assembler
      */
+    @Override
     public Layout getAssembler(String name)
     {
         return getAssembler(Layout.PREFIX, name);
@@ -63,6 +64,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Layout> getManagedClass()
     {
         return Layout.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java
index ce97a26..ba04b03 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java
@@ -42,6 +42,7 @@
      * @param name name of the requested Assembler
      * @return an Assembler
      */
+    @Override
     public Navigation getAssembler(String name)
     {
         return getAssembler(Navigation.PREFIX, name);
@@ -63,6 +64,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Navigation> getManagedClass()
     {
         return Navigation.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java
index 5d73254..5292ce1 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java
@@ -42,6 +42,7 @@
      * @param name name of the requested Assembler
      * @return an Assembler
      */
+    @Override
     public Page getAssembler(String name)
     {
         return getAssembler(Page.PREFIX, name);
@@ -63,6 +64,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Page> getManagedClass()
     {
         return Page.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java
index 9ace6e6..731de71 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java
@@ -42,6 +42,7 @@
      * @param name name of the requested Assembler
      * @return an Assembler
      */
+    @Override
     public ScheduledJob getAssembler(String name)
     {
         return getAssembler(ScheduledJob.PREFIX, name);
@@ -63,6 +64,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<ScheduledJob> getManagedClass()
     {
         return ScheduledJob.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java
index 682fcf5..8fe7018 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java
@@ -42,6 +42,7 @@
      * @param name name of the requested Assembler
      * @return an Assembler
      */
+    @Override
     public Screen getAssembler(String name)
     {
         return getAssembler(Screen.PREFIX, name);
@@ -63,6 +64,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Screen> getManagedClass()
     {
         return Screen.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java
index ac8fb37..5099b30 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java
@@ -45,6 +45,7 @@
      * @return an Assembler
      * @throws Exception generic exception
      */
+    @Override
     public Action getAssembler(String name)
         throws Exception
     {
@@ -56,6 +57,7 @@
      *
      * @return a Loader
      */
+    @Override
     public Loader<Action> getLoader()
     {
         return ActionLoader.getInstance();
@@ -66,6 +68,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Action> getManagedClass()
     {
         return Action.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java
index 49cdf7e..e4046e3 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java
@@ -45,6 +45,7 @@
      * @return an Assembler
      * @throws Exception generic exception
      */
+    @Override
     public Layout getAssembler(String name)
         throws Exception
     {
@@ -67,6 +68,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Layout> getManagedClass()
     {
         return Layout.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java
index 40c7801..ece7d69 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java
@@ -45,6 +45,7 @@
      * @return an Assembler
      * @throws Exception generic exception
      */
+    @Override
     public Navigation getAssembler(String name)
         throws Exception
     {
@@ -67,6 +68,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Navigation> getManagedClass()
     {
         return Navigation.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java
index 99ae378..2984e94 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java
@@ -45,6 +45,7 @@
      * @return an Assembler
      * @throws Exception generic exception
      */
+    @Override
     public Page getAssembler(String name)
         throws Exception
     {
@@ -67,6 +68,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Page> getManagedClass()
     {
         return Page.class;
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java
index 5e1cff2..bdd6e00 100644
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java
+++ b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java
@@ -45,6 +45,7 @@
      * @return an Assembler
      * @throws Exception generic exception
      */
+    @Override
     public Screen getAssembler(String name)
         throws Exception
     {
@@ -67,6 +68,7 @@
      *
      * @return a class
      */
+    @Override
     public Class<Screen> getManagedClass()
     {
         return Screen.class;
diff --git a/src/java/org/apache/turbine/services/intake/IntakeTool.java b/src/java/org/apache/turbine/services/intake/IntakeTool.java
index 2e80fc6..4a19f83 100644
--- a/src/java/org/apache/turbine/services/intake/IntakeTool.java
+++ b/src/java/org/apache/turbine/services/intake/IntakeTool.java
@@ -67,7 +67,7 @@
     /** ValueParser instance */
     protected ValueParser pp;
 
-    private final HashMap<String, Group> declaredGroups = new HashMap<String, Group>();
+    private final HashMap<String, Group> declaredGroups = new HashMap<>();
     private final StringBuilder allGroupsSB = new StringBuilder(256);
     private final StringBuilder groupSB = new StringBuilder(128);
 
@@ -101,8 +101,8 @@
             {
                 groupCount = groupNames.length;
             }
-            groups = new HashMap<String, Group>((int) (1.25 * groupCount + 1));
-            pullMap = new HashMap<String, IntakeTool.PullHelper>((int) (1.25 * groupCount + 1));
+            groups = new HashMap<>((int) (1.25 * groupCount + 1));
+            pullMap = new HashMap<>((int) (1.25 * groupCount + 1));
 
             for (int i = groupCount - 1; i >= 0; i--)
             {
@@ -445,11 +445,11 @@
 
 			if (groupKeys != null)
 			{
-		        for (int i = 0; i < groupKeys.length; i++)
-		        {
-		            if (!groupKeys[i].equals(group.getGID()))
+		        for (String groupKey : groupKeys)
+                {
+		            if (!groupKey.equals(group.getGID()))
 		            {
-		                 pp.add(INTAKE_GRP, groupKeys[i]);
+		                 pp.add(INTAKE_GRP, groupKey);
 		            }
                 }
 		    }
diff --git a/src/java/org/apache/turbine/services/jsp/TurbineJspService.java b/src/java/org/apache/turbine/services/jsp/TurbineJspService.java
index 1dd4f60..114e79a 100644
--- a/src/java/org/apache/turbine/services/jsp/TurbineJspService.java
+++ b/src/java/org/apache/turbine/services/jsp/TurbineJspService.java
@@ -242,9 +242,9 @@
     @Override
     public boolean templateExists(String template)
     {
-        for (int i = 0; i < templatePaths.length; i++)
+        for (String templatePath : templatePaths)
         {
-            if (templateExists(templatePaths[i], template))
+            if (templateExists(templatePath, template))
             {
                 return true;
             }
diff --git a/src/java/org/apache/turbine/services/naming/TurbineNamingService.java b/src/java/org/apache/turbine/services/naming/TurbineNamingService.java
index 8932a79..b51acdc 100644
--- a/src/java/org/apache/turbine/services/naming/TurbineNamingService.java
+++ b/src/java/org/apache/turbine/services/naming/TurbineNamingService.java
@@ -61,7 +61,7 @@
     private static Map<String, Properties> contextPropsList = null;
 
     /** All initial contexts known to this service */
-    private final Map<String, InitialContext> initialContexts = new HashMap<String, InitialContext>();
+    private final Map<String, InitialContext> initialContexts = new HashMap<>();
 
     /**
      * Called the first time the Service is used.<br>
@@ -81,7 +81,7 @@
         Configuration conf = Turbine.getConfiguration();
         try
         {
-            contextPropsList = new HashMap<String, Properties>();
+            contextPropsList = new HashMap<>();
 
             for (Iterator<String> contextKeys = conf.subset("context").getKeys();
                  contextKeys.hasNext();)
@@ -142,6 +142,7 @@
      * @return The context with the specified name, or null if no
      * context exists with that name.
      */
+    @Override
     public Context getContext(String contextName)
     {
         // Get just the properties for the context with the specified
diff --git a/src/java/org/apache/turbine/services/pull/TurbinePullService.java b/src/java/org/apache/turbine/services/pull/TurbinePullService.java
index c2be3bf..f673749 100644
--- a/src/java/org/apache/turbine/services/pull/TurbinePullService.java
+++ b/src/java/org/apache/turbine/services/pull/TurbinePullService.java
@@ -315,7 +315,7 @@
     @SuppressWarnings("unchecked")
     private List<ToolData> getTools(Configuration toolConfig)
     {
-        List<ToolData> tools = new ArrayList<ToolData>();
+        List<ToolData> tools = new ArrayList<>();
 
         // There might not be any tools for this prefix
         // so return an empty list.
diff --git a/src/java/org/apache/turbine/services/pull/util/SessionData.java b/src/java/org/apache/turbine/services/pull/util/SessionData.java
index 5671ddd..99d287a 100644
--- a/src/java/org/apache/turbine/services/pull/util/SessionData.java
+++ b/src/java/org/apache/turbine/services/pull/util/SessionData.java
@@ -49,7 +49,7 @@
     @Override
     public void init(Object data)
     {
-        dataStorage = new HashMap<String, Object>();
+        dataStorage = new HashMap<>();
     }
 
     /**
diff --git a/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java b/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
index 022a107..b659e3d 100644
--- a/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
+++ b/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
@@ -123,7 +123,7 @@
     private int statusCode = HttpServletResponse.SC_OK;
 
     /** This is a List to hold critical system errors. */
-    private final List<SystemError> errors = new ArrayList<SystemError>();
+    private final List<SystemError> errors = new ArrayList<>();
 
     /** JNDI Contexts. */
     private Map<String, Context> jndiContexts;
@@ -148,7 +148,7 @@
      * screen.  This is great for debugging variable values when an
      * exception is thrown.
      */
-    private final Map<String, Object> debugVariables = new HashMap<String, Object>();
+    private final Map<String, Object> debugVariables = new HashMap<>();
 
     /** Logging */
     private static final Logger log = LogManager.getLogger(DefaultTurbineRunData.class);
@@ -1054,7 +1054,7 @@
     {
         if (jndiContexts == null)
         {
-            jndiContexts = new HashMap<String, Context>();
+            jndiContexts = new HashMap<>();
         }
         return jndiContexts;
     }
diff --git a/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java b/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
index e09ea77..908a4d0 100644
--- a/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
+++ b/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
@@ -239,9 +239,9 @@
         TurbineRunData data;
         try
         {
-    		Class<?> runDataClazz = classCache.computeIfAbsent(cfg[0], className -> classForName(className));
-            Class<?> parameterParserClazz = classCache.computeIfAbsent(cfg[1], className -> classForName(className));
-            Class<?> cookieParserClazz = classCache.computeIfAbsent(cfg[2], className -> classForName(className));
+    		Class<?> runDataClazz = classCache.computeIfAbsent(cfg[0], this::classForName);
+            Class<?> parameterParserClazz = classCache.computeIfAbsent(cfg[1], this::classForName);
+            Class<?> cookieParserClazz = classCache.computeIfAbsent(cfg[2], this::classForName);
 
             data = (TurbineRunData) pool.getInstance(runDataClazz);
             @SuppressWarnings("unchecked") // ok
diff --git a/src/java/org/apache/turbine/services/schedule/AbstractSchedulerService.java b/src/java/org/apache/turbine/services/schedule/AbstractSchedulerService.java
index ee11cfb..5327693 100644
--- a/src/java/org/apache/turbine/services/schedule/AbstractSchedulerService.java
+++ b/src/java/org/apache/turbine/services/schedule/AbstractSchedulerService.java
@@ -72,7 +72,7 @@
         try
         {
             setEnabled(getConfiguration().getBoolean("enabled", true));
-            scheduleQueue = new JobQueue<JobEntry>();
+            scheduleQueue = new JobQueue<>();
             mainLoop = new MainLoop();
 
             @SuppressWarnings("unchecked") // Why is this cast necessary?
diff --git a/src/java/org/apache/turbine/services/schedule/JobQueue.java b/src/java/org/apache/turbine/services/schedule/JobQueue.java
index 0e7a08d..f9634ca 100644
--- a/src/java/org/apache/turbine/services/schedule/JobQueue.java
+++ b/src/java/org/apache/turbine/services/schedule/JobQueue.java
@@ -46,7 +46,7 @@
      */
     public JobQueue()
     {
-        queue = new Vector<J>(10);
+        queue = new Vector<>(10);
     }
 
     /**
@@ -181,15 +181,10 @@
      */
     private void sortQueue()
     {
-        Comparator<J> aComparator = new Comparator<J>()
-        {
-            @Override
-            public int compare(J o1, J o2)
-            {
-                Long time1 = Long.valueOf(o1.getNextRuntime());
-                Long time2 = Long.valueOf(o2.getNextRuntime());
-                return time1.compareTo(time2);
-            }
+        Comparator<J> aComparator = (o1, o2) -> {
+            Long time1 = Long.valueOf(o1.getNextRuntime());
+            Long time2 = Long.valueOf(o2.getNextRuntime());
+            return time1.compareTo(time2);
         };
 
         Collections.sort(queue, aComparator);
diff --git a/src/java/org/apache/turbine/services/schedule/QuartzSchedulerService.java b/src/java/org/apache/turbine/services/schedule/QuartzSchedulerService.java
index 3a6c6fa..c7dfe77 100644
--- a/src/java/org/apache/turbine/services/schedule/QuartzSchedulerService.java
+++ b/src/java/org/apache/turbine/services/schedule/QuartzSchedulerService.java
@@ -260,7 +260,7 @@
     @Override
     public List<? extends JobEntry> listJobs()
     {
-        List<JobEntryQuartz> jobs = new ArrayList<JobEntryQuartz>();
+        List<JobEntryQuartz> jobs = new ArrayList<>();
 
         try
         {
diff --git a/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java b/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java
index 55b6926..0e36277 100644
--- a/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java
+++ b/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java
@@ -75,7 +75,7 @@
     {
         Configuration conf = getConfiguration();
         List<Object> jobProps = conf.getList("scheduler.jobs");
-        List<JobEntry> jobs = new ArrayList<JobEntry>();
+        List<JobEntry> jobs = new ArrayList<>();
 
         // If there are scheduler.jobs defined then set up a job vector
         // for the scheduleQueue
diff --git a/src/java/org/apache/turbine/services/security/DefaultUserManager.java b/src/java/org/apache/turbine/services/security/DefaultUserManager.java
index e00737a..9779a58 100644
--- a/src/java/org/apache/turbine/services/security/DefaultUserManager.java
+++ b/src/java/org/apache/turbine/services/security/DefaultUserManager.java
@@ -256,7 +256,7 @@
             throws DataBackendException
     {
         UserSet<org.apache.fulcrum.security.entity.User> uset = umDelegate.getAllUsers();
-        List<User> userList = new ArrayList<User>();
+        List<User> userList = new ArrayList<>();
 
         for (org.apache.fulcrum.security.entity.User u : uset)
         {
diff --git a/src/java/org/apache/turbine/services/security/SecurityService.java b/src/java/org/apache/turbine/services/security/SecurityService.java
index 42977e5..6d3f2f4 100644
--- a/src/java/org/apache/turbine/services/security/SecurityService.java
+++ b/src/java/org/apache/turbine/services/security/SecurityService.java
@@ -42,7 +42,7 @@
  * The Security Service manages Users, Groups Roles and Permissions in the
  * system.
  * </p>
- * 
+ *
  * <p>
  * The task performed by the security service include creation and removal of
  * accounts, groups, roles, and permissions; assigning users roles in groups;
@@ -50,7 +50,7 @@
  * representing these logical entities.
  * </p>
  *
- * <p> 
+ * <p>
  * Because of pluggable nature of the Services, it is possible to create
  * multiple implementations of SecurityService, for example employing database
  * and directory server as the data backend.
@@ -477,13 +477,13 @@
      */
     void revokeAll(Role role)
             throws DataBackendException, UnknownEntityException;
-    
+
     /**
      * Revokes by default all permissions from a Role and if flag is set
      * all groups and users for this role
-     * 
+     *
      * This method is used when deleting a Role.
-     * 
+     *
      * @param role
      *            the Role
      * @param cascadeDelete
@@ -541,7 +541,7 @@
 
     /**
      * Retrieve a Role object with specified name.
-     * 
+     *
      * @param <R> role class
      * @param name the name of the Role.
      * @return an object representing the Role with specified name.
@@ -741,12 +741,12 @@
     void renamePermission(Permission permission, String name)
             throws DataBackendException, UnknownEntityException;
     /**
-     * Replaces transactionally the first given role with the second role for the given user. 
-     * 
+     * Replaces transactionally the first given role with the second role for the given user.
+     *
      * @param user the user.
      * @param role the old role
      * @param newRole the new role
-     * 
+     *
      * @throws DataBackendException if there was an error accessing the data
      *         backend.
      * @throws UnknownEntityException if the permission does not exist.
diff --git a/src/java/org/apache/turbine/services/security/UserManager.java b/src/java/org/apache/turbine/services/security/UserManager.java
index ab66f61..bd3a73c 100644
--- a/src/java/org/apache/turbine/services/security/UserManager.java
+++ b/src/java/org/apache/turbine/services/security/UserManager.java
@@ -289,7 +289,7 @@
     /**
      * Return a Class object representing the system's chosen implementation of
      * of ACL interface for the given user
-     * 
+     *
      * @param <A> ACL class
      * @param user the user
      * @return systems's chosen implementation of ACL interface.
diff --git a/src/java/org/apache/turbine/services/session/TurbineSessionService.java b/src/java/org/apache/turbine/services/session/TurbineSessionService.java
index fee24b7..54a856a 100644
--- a/src/java/org/apache/turbine/services/session/TurbineSessionService.java
+++ b/src/java/org/apache/turbine/services/session/TurbineSessionService.java
@@ -67,7 +67,7 @@
     @Override
     public Collection<HttpSession> getActiveSessions()
     {
-        return new ArrayList<HttpSession>(activeSessions.values());
+        return new ArrayList<>(activeSessions.values());
     }
 
     /**
@@ -124,7 +124,7 @@
         Collection<User> users;
         // Pre-allocate a list which won't need expansion more
         // than once.
-        users = new ArrayList<User>((int) (activeSessions.size() * 0.7));
+        users = new ArrayList<>((int) (activeSessions.size() * 0.7));
         for (HttpSession session : activeSessions.values())
         {
             User u = getUserFromSession(session);
@@ -181,7 +181,7 @@
     @Override
     public Collection<HttpSession> getSessionsForUser(User user)
     {
-        Collection<HttpSession> sessions = new ArrayList<HttpSession>();
+        Collection<HttpSession> sessions = new ArrayList<>();
         for (HttpSession session : activeSessions.values())
         {
             User u = this.getUserFromSession(session);
@@ -203,7 +203,7 @@
     @Override
     public void init()
     {
-        this.activeSessions = new ConcurrentHashMap<String, HttpSession>();
+        this.activeSessions = new ConcurrentHashMap<>();
 
         setInit(true);
     }
diff --git a/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java b/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
index 678e1e7..872c067 100644
--- a/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
+++ b/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
@@ -50,7 +50,7 @@
      * 5) default navigation
      * 6) default error screen
      */
-    private final Hashtable<String, Object> configuration = new Hashtable<String, Object>();
+    private final Hashtable<String, Object> configuration = new Hashtable<>();
 
     /**
      * @see org.apache.turbine.services.template.TemplateEngineService#registerConfiguration
@@ -131,9 +131,9 @@
             DEFAULT_SCREEN_TEMPLATE
         };
 
-        for (int i = 0; i < copyParams.length; i++)
+        for (String copyParam : copyParams)
         {
-            configuration.put(copyParams[i], config.getString(copyParams[i], ""));
+            configuration.put(copyParam, config.getString(copyParam, ""));
         }
     }
 
diff --git a/src/java/org/apache/turbine/services/template/TurbineTemplateService.java b/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
index 2502927..d12d112 100644
--- a/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
+++ b/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
@@ -293,7 +293,7 @@
         log.debug("Default Template:  {}", defaultTemplate);
         log.debug("Use Caching:       {}", Boolean.valueOf(useCache));
 
-        templateEngineRegistry = new ConcurrentHashMap<String, TemplateEngineService>();
+        templateEngineRegistry = new ConcurrentHashMap<>();
 
         initMapper(config);
         setInit(true);
diff --git a/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java b/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
index bce5cb1..c3de542 100644
--- a/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
+++ b/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
@@ -147,7 +147,7 @@
     {
         if (useCache)
         {
-            templateCache = new HashMap<String, String>(cacheSize);
+            templateCache = new HashMap<>(cacheSize);
         }
     }
 
diff --git a/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java b/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java
index 1a09ba5..c7458dd 100644
--- a/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java
+++ b/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java
@@ -105,7 +105,7 @@
 
         // Copy our elements into an array
         List<String> components
-            = new ArrayList<String>(Arrays.asList(StringUtils.split(
+            = new ArrayList<>(Arrays.asList(StringUtils.split(
                                               template,
                                               String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
         int componentSize = components.size() - 1 ;
diff --git a/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
index 40cfec6..5aca928 100644
--- a/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
+++ b/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
@@ -77,7 +77,7 @@
         log.debug("doMapping({})", template);
         // Copy our elements into an array
         List<String> components
-            = new ArrayList<String>(Arrays.asList(StringUtils.split(
+            = new ArrayList<>(Arrays.asList(StringUtils.split(
                                               template,
                                               String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
         int componentSize = components.size() - 1 ;
diff --git a/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
index 13de528..ed780bf 100644
--- a/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
+++ b/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
@@ -73,7 +73,7 @@
         log.debug("doMapping({})", template);
         // Copy our elements into an array
         List<String> components
-            = new ArrayList<String>(Arrays.asList(StringUtils.split(
+            = new ArrayList<>(Arrays.asList(StringUtils.split(
                                               template,
                                               String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
         int componentSize = components.size() - 1 ;
diff --git a/src/java/org/apache/turbine/services/ui/TurbineUIService.java b/src/java/org/apache/turbine/services/ui/TurbineUIService.java
index 19caf16..05b0825 100644
--- a/src/java/org/apache/turbine/services/ui/TurbineUIService.java
+++ b/src/java/org/apache/turbine/services/ui/TurbineUIService.java
@@ -20,7 +20,6 @@
  */
 
 import java.io.File;
-import java.io.FilenameFilter;
 import java.io.InputStream;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
@@ -150,7 +149,7 @@
     /**
      * The skin Properties store.
      */
-    private ConcurrentHashMap<String, Properties> skins = new ConcurrentHashMap<String, Properties>();
+    private ConcurrentHashMap<String, Properties> skins = new ConcurrentHashMap<>();
 
     /**
      * Refresh the service by clearing all skins.
@@ -239,14 +238,9 @@
     public String[] getSkinNames()
     {
         File skinsDir = new File(servletService.getRealPath(skinsDirectory));
-        return skinsDir.list(new FilenameFilter()
-        {
-            @Override
-            public boolean accept(File dir, String name)
-            {
-                File directory = new File(dir, name);
-                return directory.isDirectory();
-            }
+        return skinsDir.list((dir, name) -> {
+            File directory = new File(dir, name);
+            return directory.isDirectory();
         });
     }
 
diff --git a/src/java/org/apache/turbine/services/urlmapper/MappedTemplateLink.java b/src/java/org/apache/turbine/services/urlmapper/MappedTemplateLink.java
index ea2b1c1..74623c1 100644
--- a/src/java/org/apache/turbine/services/urlmapper/MappedTemplateLink.java
+++ b/src/java/org/apache/turbine/services/urlmapper/MappedTemplateLink.java
@@ -54,7 +54,7 @@
      */
     @TurbineService
     private URLMapperService urlMapperService;
-    
+
 
     /**
      * Builds the URL with all of the data URL-encoded as well as
@@ -78,6 +78,7 @@
      *
      * @return A String with the built URL.
      */
+    @Override
     public String getAbsoluteLink()
     {
         urlMapperService.mapToURL(templateURI);
@@ -107,10 +108,11 @@
      *
      * @return A String with the built URL.
      */
+    @Override
     public String getRelativeLink()
     {
         urlMapperService.mapToURL(templateURI);
         return super.getRelativeLink();
     }
-    
+
 }
diff --git a/src/java/org/apache/turbine/services/urlmapper/TurbineURLMapperService.java b/src/java/org/apache/turbine/services/urlmapper/TurbineURLMapperService.java
index 941b29b..8af5610 100644
--- a/src/java/org/apache/turbine/services/urlmapper/TurbineURLMapperService.java
+++ b/src/java/org/apache/turbine/services/urlmapper/TurbineURLMapperService.java
@@ -21,10 +21,11 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -94,7 +95,12 @@
     /**
      * Regex pattern for group names
      */
-    private static final Pattern namedGroupsPattern = Pattern.compile("\\(\\?<([a-zA-Z][a-zA-Z0-9]*)>.+?\\)");
+    private static final Pattern NAMED_GROUPS_PATTERN = Pattern.compile("\\(\\?<([a-zA-Z][a-zA-Z0-9]*)>.+?\\)");
+
+    /**
+     * Regex pattern for multiple slashes
+     */
+    private static final Pattern MULTI_SLASH_PATTERN = Pattern.compile("/+");
 
     /**
      * Symbolic group name for context path
@@ -109,10 +115,10 @@
     /**
      * Symbolic group names that will not be added to parameters
      */
-    private static final Set<String> DEFAULT_PARAMETERS = Stream.of(
+    private static final Set<String> DEFAULT_PARAMETERS = new HashSet<>(Arrays.asList(
             CONTEXT_PATH_PARAMETER,
             WEBAPP_ROOT_PARAMETER
-    ).collect(Collectors.toSet());
+    ));
 
     /**
      * Map a set of parameters (contained in TurbineURI PathInfo and QueryData)
@@ -123,33 +129,30 @@
     @Override
     public void mapToURL(TurbineURI uri)
     {
+        if (!uri.hasPathInfo() && !uri.hasQueryData())
+        {
+            return; // no mapping or mapping already done
+        }
+
+        List<URIParam> pathInfo = uri.getPathInfo();
+        List<URIParam> queryData = uri.getQueryData();
+
         // Create map from list, taking only the first appearance of a key
         // PathInfo takes precedence
-        Map<String, Object> uriParameterMap = Stream.concat(
-                uri.getPathInfo().stream(),
-                uri.getQueryData().stream())
-                .collect(Collectors.toMap(
+        Map<String, Object> uriParameterMap =
+                Stream.concat(pathInfo.stream(), queryData.stream())
+                    .collect(Collectors.toMap(
                         URIParam::getKey,
                         URIParam::getValue,
                         (e1, e2) -> e1,
                         LinkedHashMap::new));
 
-        Set<String> keys = new HashSet<>(uriParameterMap.keySet());
-
-        if (keys.isEmpty() && uri.getQueryData().isEmpty() || uri.getPathInfo().isEmpty())
-        {
-            return; // no mapping or mapping already done
-        }
-
         for (URLMapEntry urlMap : container.getMapEntries())
         {
-            Set<String> entryKeys = new HashSet<>();
+            Set<String> keys = new HashSet<>(uriParameterMap.keySet());
+            keys.removeAll(urlMap.getIgnoreParameters().keySet());
 
-            Map<String, Integer> groupNamesMap = urlMap.getGroupNamesMap();
-            if (groupNamesMap != null)
-            {
-                entryKeys.addAll(groupNamesMap.keySet());
-            }
+            Set<String> entryKeys = new HashSet<>(urlMap.getGroupNamesMap().keySet());
 
             Set<String> implicitKeysFound = urlMap.getImplicitParameters().entrySet().stream()
                     .filter(entry -> Objects.equals(uriParameterMap.get(entry.getKey()), entry.getValue()))
@@ -158,15 +161,13 @@
 
             entryKeys.addAll(implicitKeysFound);
             implicitKeysFound.forEach(key -> {
-                uri.removePathInfo(key);
-                uri.removeQueryData(key);
+                pathInfo.removeIf(uriParam -> key.equals(uriParam.getKey()));
+                queryData.removeIf(uriParam -> key.equals(uriParam.getKey()));
             });
 
-            keys.removeAll(urlMap.getIgnoreParameters().keySet());
-
             if (entryKeys.containsAll(keys))
             {
-                Matcher matcher = namedGroupsPattern.matcher(urlMap.getUrlPattern().pattern());
+                Matcher matcher = NAMED_GROUPS_PATTERN.matcher(urlMap.getUrlPattern().pattern());
                 StringBuffer sb = new StringBuffer();
 
                 while (matcher.find())
@@ -188,15 +189,15 @@
                                  Matcher.quoteReplacement(
                                         (!ignore)? Objects.toString(uriParameterMap.get(key)):""));
                         // Remove handled parameters (all of them!)
-                        uri.removePathInfo(key);
-                        uri.removeQueryData(key);
+                        pathInfo.removeIf(uriParam -> key.equals(uriParam.getKey()));
+                        queryData.removeIf(uriParam -> key.equals(uriParam.getKey()));
                     }
                 }
-                
+
                 matcher.appendTail(sb);
-                
+
                 // Clean up
-                uri.setScriptName(sb.toString().replaceAll("/+", "/"));
+                uri.setScriptName(MULTI_SLASH_PATTERN.matcher(sb).replaceAll("/"));
                 break;
             }
         }
@@ -217,16 +218,11 @@
             if (matcher.matches())
             {
                 // extract parameters from URL
-                Map<String, Integer> groupNameMap = urlMap.getGroupNamesMap();
-
-                if (groupNameMap != null)
-                {
-                    groupNameMap.entrySet().stream()
-                            // ignore default parameters
-                            .filter(group -> !DEFAULT_PARAMETERS.contains(group.getKey()))
-                            .forEach(group ->
-                                    pp.setString(group.getKey(), matcher.group(group.getValue().intValue())));
-                }
+                urlMap.getGroupNamesMap().entrySet().stream()
+                        // ignore default parameters
+                        .filter(group -> !DEFAULT_PARAMETERS.contains(group.getKey()))
+                        .forEach(group ->
+                                pp.setString(group.getKey(), matcher.group(group.getValue().intValue())));
 
                 // add implicit parameters
                 urlMap.getImplicitParameters().entrySet().forEach(e ->
@@ -291,22 +287,17 @@
         }
 
         // Get groupNamesMap for every Pattern and store it in the entry
-        try
+        for (URLMapEntry urlMap : container.getMapEntries())
         {
-            Method namedGroupsMethod = Pattern.class.getDeclaredMethod("namedGroups");
-            namedGroupsMethod.setAccessible(true);
+            int position = 1;
+            Map<String, Integer> groupNamesMap = new HashMap<>();
+            Matcher matcher = NAMED_GROUPS_PATTERN.matcher(urlMap.getUrlPattern().pattern());
 
-            for (URLMapEntry urlMap : container.getMapEntries())
+            while (matcher.find())
             {
-                @SuppressWarnings("unchecked")
-                Map<String, Integer> groupNamesMap = (Map<String, Integer>) namedGroupsMethod.invoke(urlMap.getUrlPattern());
-                urlMap.setGroupNamesMap(groupNamesMap);
+                groupNamesMap.put(matcher.group(1), Integer.valueOf(position++));
             }
-        }
-        catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                | NoSuchMethodException | SecurityException e)
-        {
-            throw new InitializationException("Could not invoke method Pattern.getNamedGroups", e);
+            urlMap.setGroupNamesMap(groupNamesMap);
         }
 
         log.info("Loaded {} url-mappings from {}", Integer.valueOf(container.getMapEntries().size()), configFile);
@@ -320,7 +311,7 @@
     @Override
     public void shutdown()
     {
-        container = null;
+        container.getMapEntries().clear();
         setInit(false);
     }
 }
diff --git a/src/java/org/apache/turbine/services/urlmapper/model/URLMappingContainer.java b/src/java/org/apache/turbine/services/urlmapper/model/URLMappingContainer.java
index 9da6915..1a2fac0 100644
--- a/src/java/org/apache/turbine/services/urlmapper/model/URLMappingContainer.java
+++ b/src/java/org/apache/turbine/services/urlmapper/model/URLMappingContainer.java
@@ -93,6 +93,6 @@
      */
     protected void setMapEntries(List<URLMapEntry> newURLMapEntries)
     {
-        this.urlMapEntries = new CopyOnWriteArrayList<URLMapEntry>(newURLMapEntries);
+        this.urlMapEntries = new CopyOnWriteArrayList<>(newURLMapEntries);
     }
 }
diff --git a/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java b/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
index 2d4e096..4872418 100644
--- a/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
+++ b/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
@@ -154,7 +154,7 @@
                 {
                     outputEncoding = defaultInputEncoding;
                 }
-                
+
                 defaultOutputEncoding = outputEncoding;
             }
             else
@@ -512,9 +512,9 @@
                 Object value = conf.getProperty(key);
                 if (value instanceof List<?>)
                 {
-                    for (Iterator<?> itr = ((List<?>)value).iterator(); itr.hasNext();)
+                    for (Object name2 : ((List<?>) value))
                     {
-                        velocity.addProperty(key, itr.next());
+                        velocity.addProperty(key, name2);
                     }
                 }
                 else
diff --git a/src/java/org/apache/turbine/util/FormMessage.java b/src/java/org/apache/turbine/util/FormMessage.java
index e3967e1..467683d 100644
--- a/src/java/org/apache/turbine/util/FormMessage.java
+++ b/src/java/org/apache/turbine/util/FormMessage.java
@@ -41,7 +41,7 @@
      */
     public FormMessage()
     {
-        fieldNames = new ArrayList<String>();
+        fieldNames = new ArrayList<>();
     }
 
     /**
diff --git a/src/java/org/apache/turbine/util/FormMessages.java b/src/java/org/apache/turbine/util/FormMessages.java
index acc41f5..e796d01 100644
--- a/src/java/org/apache/turbine/util/FormMessages.java
+++ b/src/java/org/apache/turbine/util/FormMessages.java
@@ -22,7 +22,6 @@
  */
 
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -47,10 +46,10 @@
      */
     public FormMessages()
     {
-        forms_messages = new Hashtable<String, List<String>>();
-        fields_messages = new Hashtable<String, List<String>>();
-        messages_fields = new Hashtable<String, List<String>>();
-        forms_fields = new Hashtable<String, List<String>>();
+        forms_messages = new Hashtable<>();
+        fields_messages = new Hashtable<>();
+        messages_fields = new Hashtable<>();
+        forms_fields = new Hashtable<>();
     }
 
     /**
@@ -94,7 +93,7 @@
 
         if ( !table.containsKey( key ) )
         {
-            values = new ArrayList<String>();
+            values = new ArrayList<>();
             values.add( value );
             table.put( key, values );
         }
@@ -140,9 +139,9 @@
                 messageName = messages.get( i );
                 result[i].setMessage( messageName );
                 fields = getValues( messages_fields, messageName );
-                for ( int j = 0; j < fields.size(); j++ )
+                for (String field : fields)
                 {
-                    fieldName = fields.get( j );
+                    fieldName = field;
                     if ( formHasField( formName, fieldName ) )
                     {
                         result[i].setFieldName( fieldName );
@@ -192,9 +191,9 @@
     private boolean formHasField( String formName, String fieldName )
     {
         List<String> fields = getValues( forms_fields, formName );
-        for ( Iterator<String> iter = fields.iterator(); iter.hasNext(); )
+        for (String field : fields)
         {
-            if ( fieldName.equals( iter.next().toString() ) )
+            if ( fieldName.equals( field.toString() ) )
             {
                 return true;
             }
diff --git a/src/java/org/apache/turbine/util/LocaleUtils.java b/src/java/org/apache/turbine/util/LocaleUtils.java
index 2be9803..c281031 100644
--- a/src/java/org/apache/turbine/util/LocaleUtils.java
+++ b/src/java/org/apache/turbine/util/LocaleUtils.java
@@ -141,7 +141,7 @@
             String charSet = Turbine.getConfiguration()
                     .getString(TurbineConstants.LOCALE_DEFAULT_CHARSET_KEY,
                             TurbineConstants.LOCALE_DEFAULT_CHARSET_DEFAULT);
-            
+
             if (StringUtils.isNotEmpty(charSet))
             {
                 defaultCharSet = charSetForName(charSet);
@@ -177,7 +177,7 @@
                     log.debug("Charset now {}", charset);
                 }
             }
-            
+
             // The fallback to end all fallbacks
             if (charset == null)
             {
@@ -214,21 +214,21 @@
     {
         String charset = Turbine.getConfiguration()
                 .getString(TurbineConstants.LOCALE_OVERRIDE_CHARSET_KEY);
-        
+
         if (StringUtils.isEmpty(charset))
         {
             return null;
         }
-        
+
         return charSetForName(charset);
     }
 
     /**
      * Get a Charset object for a given name
      * This method does not throw exceptions on illegal input but returns null.
-     * 
+     *
      * @param charSet the charset name
-     * 
+     *
      * @return the Charset or null if it does not exist
      */
     private static Charset charSetForName(String charSet)
@@ -241,8 +241,8 @@
         {
             log.error("Illegal default charset {}", charSet);
         }
-        
+
         return null;
     }
-    
+
 }
diff --git a/src/java/org/apache/turbine/util/SecurityCheck.java b/src/java/org/apache/turbine/util/SecurityCheck.java
index f20a335..16f5eb1 100644
--- a/src/java/org/apache/turbine/util/SecurityCheck.java
+++ b/src/java/org/apache/turbine/util/SecurityCheck.java
@@ -110,7 +110,7 @@
             throws Exception
     {
         boolean value = false;
-        TurbineAccessControlList acl = data.getACL();
+        TurbineAccessControlList<?> acl = data.getACL();
         if (acl == null ||
             !acl.hasRole(role))
         {
@@ -173,7 +173,7 @@
             throws Exception
     {
         boolean value = false;
-        TurbineAccessControlList acl = data.getACL();
+        TurbineAccessControlList<?> acl = data.getACL();
         if (acl == null ||
             !acl.hasPermission(permission))
         {
@@ -217,7 +217,7 @@
                 securityService.getPermissionManager().addPermission(permissionObject);
 
                 Role role = null;
-                TurbineAccessControlList acl = data.getACL();
+                TurbineAccessControlList<?> acl = data.getACL();
                 RoleSet roles = acl.getRoles();
                 if(roles.size() > 0)
                 {
diff --git a/src/java/org/apache/turbine/util/TurbineConfig.java b/src/java/org/apache/turbine/util/TurbineConfig.java
index 17924be..69fc3b8 100644
--- a/src/java/org/apache/turbine/util/TurbineConfig.java
+++ b/src/java/org/apache/turbine/util/TurbineConfig.java
@@ -179,7 +179,7 @@
      *
      * This is a specialized constructor that allows to configure
      * Turbine easily in the common setups.
-     * 
+     *
      * Check also {@link TurbineXmlConfig} to load a {@link #CONFIGURATION_PATH_KEY}.
      *
      * @param path The web application root (i.e. the path for file lookup).
@@ -307,7 +307,7 @@
     @Override
     public Enumeration<String> getInitParameterNames()
     {
-        return new Vector<String>(initParams.keySet()).elements();
+        return new Vector<>(initParams.keySet()).elements();
     }
 
     /**
@@ -440,7 +440,7 @@
     @Override
     public Enumeration<String> getAttributeNames()
     {
-        return new Vector<String>(attributes.keySet()).elements();
+        return new Vector<>(attributes.keySet()).elements();
     }
 
     // Unimplemented methods follow
diff --git a/src/java/org/apache/turbine/util/TurbineException.java b/src/java/org/apache/turbine/util/TurbineException.java
index 0dd8d0e..7b9bf88 100644
--- a/src/java/org/apache/turbine/util/TurbineException.java
+++ b/src/java/org/apache/turbine/util/TurbineException.java
@@ -34,9 +34,9 @@
  * printStackTrace()</code> methods, the stacktrace will contain
  * the information about all exceptions thrown and caught on the way.
  * </p>
- * 
+ *
  * <p> Running the following program </p>
- * 
+ *
  * <pre>
  *  1 import org.apache.turbine.util.TurbineException;
  *  2
@@ -69,10 +69,10 @@
  * 29          throw new Exception("baz");
  * 30      }
  * 31 }
- * </pre> 
- * 
+ * </pre>
+ *
  * <p>Yields the following stacktrace: </p>
- * 
+ *
  * <pre>
  * java.lang.Exception: baz: bar: foo
  *    at Test.c(Test.java:29)
diff --git a/src/java/org/apache/turbine/util/TurbineXmlConfig.java b/src/java/org/apache/turbine/util/TurbineXmlConfig.java
index 47049f8..8e83be6 100644
--- a/src/java/org/apache/turbine/util/TurbineXmlConfig.java
+++ b/src/java/org/apache/turbine/util/TurbineXmlConfig.java
@@ -25,16 +25,16 @@
 
 /**
  * A class used for initialization of Turbine without a servlet container.
- * 
+ *
  * <p>
  * If you need to use Turbine outside of a servlet container, you can
  * use this class for initialization of the Turbine servlet.
  * </p>
- * 
+ *
  * <pre>
  * TurbineXmlConfig config = new TurbineXmlConfig(".", "conf/TurbineResources.properties");
  * </pre>
- * 
+ *
  * <p>
  * All paths referenced in TurbineResources.properties and the path to
  * the properties file itself (the second argument) will be resolved
@@ -43,14 +43,14 @@
  * discarding the references to objects created above. They are not needed,
  * once everything is initialized.
  * </p>
- * 
+ *
  * <p>
  * In order to initialize the Services Framework outside of the Turbine Servlet,
  * you need to call the <code>init()</code> method. By default, this will
  * initialize the Resource and Logging Services and any other services you
  * have defined in your TurbineResources.properties file.
  * </p>
- * 
+ *
  * TODO Make this class enforce the lifecycle contracts
  *
  * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
diff --git a/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java b/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java
index 4ef4f03..f0313a1 100644
--- a/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java
+++ b/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java
@@ -41,12 +41,12 @@
  * class, layour template, or anywhere else.  The get methods should be used in
  * your layout template(s) to construct the appropriate HTML tags.
  * </p>
- * 
+ *
  *<p>
  * Example usage of this tool to build the HEAD and BODY tags in your layout
  * templates:
  * </p>
- * 
+ *
  * <p>
  *  <code>
  *  ## Set defaults for all pages using this layout.  Anything set here can<br>
@@ -88,7 +88,7 @@
  *     &gt;
  * </code>
  * </p>
- * 
+ *
  * <p>
  * Example usages of this tool in your screen templates:<br>
  *   <code>$page.addScript($content.getURI("myJavascript.js")<br>
@@ -107,22 +107,22 @@
     private String title;
 
     /** Body Attributes */
-    private final Map<String, String> bodyAttributes = new LinkedHashMap<String, String>();
+    private final Map<String, String> bodyAttributes = new LinkedHashMap<>();
 
     /** Script references */
-    private final List<String> scripts = new ArrayList<String>();
+    private final List<String> scripts = new ArrayList<>();
 
     /** External references */
-    private final List<LinkTag> linkTags = new ArrayList<LinkTag>();
+    private final List<LinkTag> linkTags = new ArrayList<>();
 
     /** Inline styles */
-    private final List<String> styles = new ArrayList<String>();
+    private final List<String> styles = new ArrayList<>();
 
     /** Meta tags for the HEAD */
-    private final Map<String, String> metaTags = new LinkedHashMap<String, String>();
+    private final Map<String, String> metaTags = new LinkedHashMap<>();
 
     /** http-equiv tags */
-    private final Map<String, String> httpEquivs = new LinkedHashMap<String, String>();
+    private final Map<String, String> httpEquivs = new LinkedHashMap<>();
 
     /** Doctype */
     private String doctype = null;
diff --git a/src/java/org/apache/turbine/util/template/TemplateInfo.java b/src/java/org/apache/turbine/util/template/TemplateInfo.java
index 6676243..cbd7c78 100644
--- a/src/java/org/apache/turbine/util/template/TemplateInfo.java
+++ b/src/java/org/apache/turbine/util/template/TemplateInfo.java
@@ -64,7 +64,7 @@
     public TemplateInfo(RunData data)
     {
         this.data = data;
-        tempStorage = new HashMap<String, Object>(10);
+        tempStorage = new HashMap<>(10);
     }
 
     /**
diff --git a/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java b/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
index e0d3d78..3ea4649 100644
--- a/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
+++ b/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
@@ -99,7 +99,7 @@
             return false;
         }
 
-        TurbineAccessControlList acl = data.getACL();
+        TurbineAccessControlList<?> acl = data.getACL();
         if (acl == null || !acl.hasRole(role))
         {
             data.setScreen(getFailScreen());
@@ -122,7 +122,7 @@
         throws Exception
     {
         boolean value = true;
-        TurbineAccessControlList acl = data.getACL();
+        TurbineAccessControlList<?> acl = data.getACL();
         if (acl == null || !acl.hasPermission(permission))
         {
             data.setScreen(getFailScreen());
diff --git a/src/java/org/apache/turbine/util/uri/TemplateURI.java b/src/java/org/apache/turbine/util/uri/TemplateURI.java
index ae18562..ec5618e 100644
--- a/src/java/org/apache/turbine/util/uri/TemplateURI.java
+++ b/src/java/org/apache/turbine/util/uri/TemplateURI.java
@@ -1,28 +1,6 @@
 package org.apache.turbine.util.uri;
 
 
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Iterator;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.fulcrum.parser.ParameterParser;
 import org.apache.turbine.util.RunData;
@@ -263,12 +241,13 @@
      * @param type Type of insertion (@see #add(char type, String name, String value))
      * @param pp A ParameterParser.
      */
+    @Override
     protected void add(int type,
             ParameterParser pp)
     {
-        for(Iterator<?> it = pp.keySet().iterator(); it.hasNext();)
+        for (Object name : pp.keySet())
         {
-            String key = (String) it.next();
+            String key = (String) name;
 
             if (!key.equalsIgnoreCase(CGI_ACTION_PARAM) &&
                     !key.equalsIgnoreCase(CGI_SCREEN_PARAM) &&
@@ -277,9 +256,9 @@
                 String[] values = pp.getStrings(key);
                 if(values != null)
                 {
-                    for (int i = 0; i < values.length; i++)
+                    for (String value : values)
                     {
-                        add(type, key, values[i]);
+                        add(type, key, value);
                     }
                 }
                 else
diff --git a/src/java/org/apache/turbine/util/uri/TurbineURI.java b/src/java/org/apache/turbine/util/uri/TurbineURI.java
index 711a4d7..a60e2be 100644
--- a/src/java/org/apache/turbine/util/uri/TurbineURI.java
+++ b/src/java/org/apache/turbine/util/uri/TurbineURI.java
@@ -894,10 +894,7 @@
      */
     protected void add(int type, List<URIParam> list)
     {
-        for (URIParam uriParam : list)
-        {
-            dataVectors[type].add(uriParam);
-        }
+        dataVectors[type].addAll(list);
     }
 
     /**
diff --git a/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java b/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
index 180dabe..1b3123d 100644
--- a/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
+++ b/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
@@ -125,7 +125,7 @@
     {
         this();
         this.context = context;
-        embmap = new Hashtable<String, String>();
+        embmap = new Hashtable<>();
     }
 
     /**
diff --git a/src/test/org/apache/turbine/ConfigurationTest.java b/src/test/org/apache/turbine/ConfigurationTest.java
index 611cbbb..fb15f8b 100644
--- a/src/test/org/apache/turbine/ConfigurationTest.java
+++ b/src/test/org/apache/turbine/ConfigurationTest.java
@@ -56,7 +56,7 @@
 
     private TurbineConfig tc = null;
     private TurbineXmlConfig txc = null;
-    
+
     @After
     public void close() {
         if (tc != null) tc.dispose();
@@ -140,7 +140,7 @@
             throw e;
         }
     }
-    
+
     @Test
     public void testCreateTurbineWithIncludedConfiguration() throws Exception
     {
@@ -148,7 +148,7 @@
         try
         {
             tc.initialize();
-            
+
             Configuration configuration = Turbine.getConfiguration();
             assertNotNull("No Configuration Object found!", configuration);
             assertFalse("Make sure we have values", configuration.isEmpty());
diff --git a/src/test/org/apache/turbine/TurbineTest.java b/src/test/org/apache/turbine/TurbineTest.java
index b7f475e..ce246fd 100644
--- a/src/test/org/apache/turbine/TurbineTest.java
+++ b/src/test/org/apache/turbine/TurbineTest.java
@@ -83,8 +83,8 @@
     public void testDefaultInputEncoding() throws Exception
     {
         Turbine t = tc.getTurbine();
-        assertNotNull(t.getDefaultInputEncoding());
-        assertEquals(TurbineConstants.PARAMETER_ENCODING_DEFAULT, t.getDefaultInputEncoding());
+        assertNotNull(Turbine.getDefaultInputEncoding());
+        assertEquals(TurbineConstants.PARAMETER_ENCODING_DEFAULT, Turbine.getDefaultInputEncoding());
         t.destroy();
     }
 
@@ -92,8 +92,8 @@
     public void testNonDefaultEncoding()
     {
         Turbine t = tc.getTurbine();
-        t.getConfiguration().setProperty(TurbineConstants.PARAMETER_ENCODING_KEY, "UTF-8");
-        assertNotNull(t.getDefaultInputEncoding());
-        assertEquals("UTF-8", t.getDefaultInputEncoding());
+        Turbine.getConfiguration().setProperty(TurbineConstants.PARAMETER_ENCODING_KEY, "UTF-8");
+        assertNotNull(Turbine.getDefaultInputEncoding());
+        assertEquals("UTF-8", Turbine.getDefaultInputEncoding());
     }
 }
diff --git a/src/test/org/apache/turbine/annotation/AnnotationProcessorTest.java b/src/test/org/apache/turbine/annotation/AnnotationProcessorTest.java
index bb10561..3444b8c 100644
--- a/src/test/org/apache/turbine/annotation/AnnotationProcessorTest.java
+++ b/src/test/org/apache/turbine/annotation/AnnotationProcessorTest.java
@@ -1,6 +1,11 @@
 package org.apache.turbine.annotation;
 
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -23,8 +28,6 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 import java.lang.reflect.Method;
 import java.util.List;
 
@@ -39,7 +42,6 @@
 import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.TurbineConfig;
 import org.apache.turbine.util.TurbineException;
-
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
@@ -139,7 +141,7 @@
     public void testRequiredRoleMethodProcess() throws Exception
     {
         RunData data = mock(RunData.class);
-        TurbineAccessControlList acl = mock(TurbineAccessControlList.class);
+        TurbineAccessControlList<?> acl = mock(TurbineAccessControlList.class);
         Role role = mock(Role.class);
         when(role.getName()).thenReturn( "user" );
         // Group group = mock(Group.class);
@@ -164,7 +166,7 @@
     public void testRequiredRoleAdminMethodProcess() throws Exception
     {
         RunData data = mock(RunData.class);
-        TurbineAccessControlList acl = mock(TurbineAccessControlList.class);
+        TurbineAccessControlList<?> acl = mock(TurbineAccessControlList.class);
         Role role = mock(Role.class);
         when(role.getName()).thenReturn( "user" );
         // Group group = mock(Group.class);
@@ -187,7 +189,7 @@
     public void testUnguardedMethodWProcessDefault() throws Exception
     {
         RunData data = mock(RunData.class);
-        TurbineAccessControlList acl = mock(TurbineAccessControlList.class);
+        TurbineAccessControlList<?> acl = mock(TurbineAccessControlList.class);
         Role role = mock(Role.class);
         when(role.getName()).thenReturn( "user" );
         // Group group = mock(Group.class);
@@ -203,7 +205,7 @@
         }
     }
 
-    //@Disabled("For performance tests only") 
+    //@Disabled("For performance tests only")
     @Tag("performance") // ignore in surefire, activating seems to be still buggy ?
     @Test
     public void testProcessingPerformance() throws TurbineException
diff --git a/src/test/org/apache/turbine/modules/ActionLoaderTest.java b/src/test/org/apache/turbine/modules/ActionLoaderTest.java
index f0ae76d..3f06d31 100644
--- a/src/test/org/apache/turbine/modules/ActionLoaderTest.java
+++ b/src/test/org/apache/turbine/modules/ActionLoaderTest.java
@@ -124,7 +124,7 @@
         when(request.getParameterValues("eventSubmit_doCauseexception")).thenReturn(new String[] { "foo" });
         RunData data = getRunData(request, response, config);
         PipelineData pipelineData = new DefaultPipelineData();
-        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        Map<Class<?>, Object> runDataMap = new HashMap<>();
         runDataMap.put(RunData.class, data);
         pipelineData.put(RunData.class, runDataMap);
         data.setAction("VelocityActionThrowsException");
@@ -165,7 +165,7 @@
         assertFalse(Turbine.getConfiguration().getBoolean("action.event.bubbleexception"));
         RunData data = getRunData(request, response, config);
         PipelineData pipelineData = new DefaultPipelineData();
-        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        Map<Class<?>, Object> runDataMap = new HashMap<>();
         runDataMap.put(RunData.class, data);
         pipelineData.put(RunData.class, runDataMap);
         data.setAction("VelocityActionThrowsException");
@@ -204,7 +204,7 @@
         when(request.getParameterValues("eventSubmit_doCauseexception")).thenReturn(new String[] { "foo" });
         RunData data = getRunData(request, response, config);
         PipelineData pipelineData = new DefaultPipelineData();
-        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        Map<Class<?>, Object> runDataMap = new HashMap<>();
         runDataMap.put(RunData.class, data);
         pipelineData.put(RunData.class, runDataMap);
         data.setAction("VelocityActionThrowsException");
@@ -267,7 +267,7 @@
     {
         RunData data = getRunData(request, response, config);
         PipelineData pipelineData = new DefaultPipelineData();
-        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        Map<Class<?>, Object> runDataMap = new HashMap<>();
         runDataMap.put(RunData.class, data);
         pipelineData.put(RunData.class, runDataMap);
         data.setAction("ImaginaryAction");
diff --git a/src/test/org/apache/turbine/om/MockRetrieverFactory.java b/src/test/org/apache/turbine/om/MockRetrieverFactory.java
index 2314e06..2bd72a2 100644
--- a/src/test/org/apache/turbine/om/MockRetrieverFactory.java
+++ b/src/test/org/apache/turbine/om/MockRetrieverFactory.java
@@ -33,14 +33,7 @@
     @Override
     public Retriever getInstance(String className) throws Exception
     {
-        return new Retriever()
-        {
-            @Override
-            public Object retrieve(String key) throws Exception
-            {
-                return new String(key);
-            }
-        };
+        return key -> new String(key);
     }
 
 }
diff --git a/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java
index b6af0e2..1147e96 100644
--- a/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java
+++ b/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java
@@ -97,7 +97,7 @@
     @Test
     public void testDefaults() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(LoginUser.CGI_USERNAME);
         v.add(LoginUser.CGI_PASSWORD);
         when(request.getParameterNames()).thenReturn(v.elements());
diff --git a/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java
index 5ed920c..dfe3929 100644
--- a/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java
+++ b/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java
@@ -82,7 +82,7 @@
         Turbine.getConfiguration().setProperty(TurbineConstants.SESSION_TIMEOUT_KEY,
                 Integer.valueOf(TurbineConstants.SESSION_TIMEOUT_DEFAULT));
 
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(URIConstants.CGI_ACTION_PARAM);
         when(request.getParameterNames()).thenReturn(v.elements());
         when(request.getParameterValues(URIConstants.CGI_ACTION_PARAM)).thenReturn(new String[] { "TestAction" });
diff --git a/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java
index efb8498..0712e3c 100644
--- a/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java
+++ b/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java
@@ -44,7 +44,6 @@
 import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.TurbineConfig;
 import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -85,7 +84,7 @@
      */
     @Test public void testAnonymousUser() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(LoginUser.CGI_USERNAME);
         v.add(LoginUser.CGI_PASSWORD);
         when(request.getParameterNames()).thenReturn(v.elements());
@@ -112,7 +111,7 @@
 
     @Test public void testLoggedInUser() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(LoginUser.CGI_USERNAME);
         v.add(LoginUser.CGI_PASSWORD);
         when(request.getParameterNames()).thenReturn(v.elements());
diff --git a/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java b/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java
index c31cb06..fc38b85 100644
--- a/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java
+++ b/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java
@@ -70,7 +70,7 @@
         request = getMockRequest();
         response = mock(HttpServletResponse.class);
 
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(URIConstants.CGI_ACTION_PARAM);
         when(request.getParameterNames()).thenReturn(v.elements());
 
diff --git a/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java b/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java
index 2461cd3..f1e3426 100644
--- a/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java
+++ b/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java
@@ -76,7 +76,7 @@
      */
     @Test public void testScreenSet() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(URIConstants.CGI_SCREEN_PARAM);
         when(request.getParameterNames()).thenReturn(v.elements());
 
@@ -95,7 +95,7 @@
 
     @Test public void testScreenNotSet() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(URIConstants.CGI_SCREEN_PARAM);
         when(request.getParameterNames()).thenReturn(v.elements());
 
diff --git a/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java b/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java
index 2de45bb..426d72a 100644
--- a/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java
+++ b/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java
@@ -43,7 +43,6 @@
 import org.apache.turbine.util.TurbineConfig;
 import org.apache.turbine.util.uri.URIConstants;
 import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -84,7 +83,7 @@
 
     @Test public void testValve() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(URIConstants.CGI_TEMPLATE_PARAM);
         when(request.getParameterNames()).thenReturn(v.elements());
 
@@ -118,7 +117,7 @@
 
     @Test public void testValveWithSecureAction() throws Exception
     {
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         v.add(URIConstants.CGI_TEMPLATE_PARAM);
         when(request.getParameterNames()).thenReturn(v.elements());
 
diff --git a/src/test/org/apache/turbine/pipeline/PipelineTest.java b/src/test/org/apache/turbine/pipeline/PipelineTest.java
index c3b18b8..2ef7c2d 100644
--- a/src/test/org/apache/turbine/pipeline/PipelineTest.java
+++ b/src/test/org/apache/turbine/pipeline/PipelineTest.java
@@ -25,7 +25,6 @@
 
 import java.io.StringWriter;
 
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
@@ -67,8 +66,8 @@
     /**
      * Tests the Pipeline throughput.
      */
-    //@Disabled("For performance tests only") 
-    @Tag("performance") 
+    //@Disabled("For performance tests only")
+    @Tag("performance")
     @Test public void testPipelinePerformance() throws Exception
     {
         StringWriter writer = new StringWriter();
diff --git a/src/test/org/apache/turbine/services/jsonrpc/JsonrpcServicelTest.java b/src/test/org/apache/turbine/services/jsonrpc/JsonrpcServicelTest.java
index 7fecbec..616911b 100644
--- a/src/test/org/apache/turbine/services/jsonrpc/JsonrpcServicelTest.java
+++ b/src/test/org/apache/turbine/services/jsonrpc/JsonrpcServicelTest.java
@@ -43,7 +43,7 @@
 //        serviceManager = TurbineServices.getInstance();
 //        serviceManager.setApplicationRoot(".");
 
-        Map<String, String> initParams = new HashMap<String, String>();
+        Map<String, String> initParams = new HashMap<>();
         initParams.put(TurbineConfig.PROPERTIES_PATH_KEY, "conf/test/CompleteTurbineResources.properties"); // "conf/test/TurbineResources.properties"
         initParams.put(TurbineConstants.LOGGING_ROOT_KEY, "target/test-logs");
 
diff --git a/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java b/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java
index fd26d37..304dc0f 100644
--- a/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java
+++ b/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java
@@ -34,6 +34,7 @@
         { "key4", "value4" }
     };
 
+    @Override
     protected Object[][] getContents()
     {
         return CONTENTS;
diff --git a/src/test/org/apache/turbine/services/pull/tools/UIToolTest.java b/src/test/org/apache/turbine/services/pull/tools/UIToolTest.java
index a8fab4e..324911f 100644
--- a/src/test/org/apache/turbine/services/pull/tools/UIToolTest.java
+++ b/src/test/org/apache/turbine/services/pull/tools/UIToolTest.java
@@ -52,7 +52,7 @@
     @BeforeClass
     public static void setUp() throws Exception
     {
-        Map<String, String> initParams = new HashMap<String, String>();
+        Map<String, String> initParams = new HashMap<>();
         initParams.put(TurbineConfig.PROPERTIES_PATH_KEY, "/conf/test/CompleteTurbineResources.properties"); // "conf/test/TurbineResources.properties"
         initParams.put(TurbineConstants.LOGGING_ROOT_KEY, "target/test-logs");
 
diff --git a/src/test/org/apache/turbine/services/urlmapper/TurbineURLMapperYAMLServiceTest.java b/src/test/org/apache/turbine/services/urlmapper/TurbineURLMapperYAMLServiceTest.java
index 79c553a..07e61e8 100644
--- a/src/test/org/apache/turbine/services/urlmapper/TurbineURLMapperYAMLServiceTest.java
+++ b/src/test/org/apache/turbine/services/urlmapper/TurbineURLMapperYAMLServiceTest.java
@@ -199,11 +199,11 @@
 
 //	/**
 //	 * 		Not implemented Test for MappedTemplateLink:
-//	 * - To work with <i>MappedTemplateLink</i>, we need access to the urlmapperservice in order to 
+//	 * - To work with <i>MappedTemplateLink</i>, we need access to the urlmapperservice in order to
 //	 * - simulate a request without pipeline (setting velocity context and initializing the service):
 //	 */
 //   @Test
-//   public void testMappedURILink() {   
+//   public void testMappedURILink() {
 //   	MappedTemplateLink ml = MappedTemplateLink.class.getDeclaredConstructor().newInstance();
 //   	assertNotNull(ml);
 //   	ml.setUrlMapperService(urlMapper);
diff --git a/src/test/org/apache/turbine/test/BaseTestCase.java b/src/test/org/apache/turbine/test/BaseTestCase.java
index dc1ff2f..3b2e83b 100644
--- a/src/test/org/apache/turbine/test/BaseTestCase.java
+++ b/src/test/org/apache/turbine/test/BaseTestCase.java
@@ -29,12 +29,9 @@
 import static org.mockito.Mockito.when;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Vector;
 
 import javax.servlet.ServletConfig;
@@ -42,17 +39,11 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.logging.log4j.core.config.ConfigurationSource;
-import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.turbine.TurbineConstants;
 import org.apache.turbine.pipeline.PipelineData;
 import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.rundata.RunDataService;
 import org.apache.turbine.util.RunData;
 import org.junit.BeforeClass;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 
 /**
  * Base functionality to be extended by all Apache Turbine test cases.  Test
@@ -87,7 +78,7 @@
        return runData;
     }
 
-    protected Map<String,Object> attributes = new HashMap<String,Object>();
+    protected Map<String,Object> attributes = new HashMap<>();
     protected int maxInactiveInterval = 0;
 
     @SuppressWarnings("boxing")
@@ -96,48 +87,26 @@
         HttpServletRequest request = mock(HttpServletRequest.class);
         HttpSession session = mock(HttpSession.class);
 
-        doAnswer(new Answer<Object>()
-        {
-            @Override
-            public Object answer(InvocationOnMock invocation) throws Throwable
-            {
-                String key = (String) invocation.getArguments()[0];
-                return attributes.get(key);
-            }
+        doAnswer(invocation -> {
+            String key = (String) invocation.getArguments()[0];
+            return attributes.get(key);
         }).when(session).getAttribute(anyString());
 
-        doAnswer(new Answer<Object>()
-        {
-            @Override
-            public Object answer(InvocationOnMock invocation) throws Throwable
-            {
-                String key = (String) invocation.getArguments()[0];
-                Object value = invocation.getArguments()[1];
-                attributes.put(key, value);
-                return null;
-            }
+        doAnswer(invocation -> {
+            String key = (String) invocation.getArguments()[0];
+            Object value = invocation.getArguments()[1];
+            attributes.put(key, value);
+            return null;
         }).when(session).setAttribute(anyString(), any());
 
         when(session.getMaxInactiveInterval()).thenReturn(maxInactiveInterval);
 
-        doAnswer(new Answer<Integer>()
-        {
-            @Override
-            public Integer answer(InvocationOnMock invocation) throws Throwable
-            {
-                return Integer.valueOf(maxInactiveInterval);
-            }
-        }).when(session).getMaxInactiveInterval();
+        doAnswer(invocation -> Integer.valueOf(maxInactiveInterval)).when(session).getMaxInactiveInterval();
 
-        doAnswer(new Answer<Object>()
-        {
-            @Override
-            public Object answer(InvocationOnMock invocation) throws Throwable
-            {
-                Integer value = (Integer) invocation.getArguments()[0];
-                maxInactiveInterval = value.intValue();
-                return null;
-            }
+        doAnswer(invocation -> {
+            Integer value = (Integer) invocation.getArguments()[0];
+            maxInactiveInterval = value.intValue();
+            return null;
         }).when(session).setMaxInactiveInterval(anyInt());
 
         when(session.isNew()).thenReturn(true);
@@ -158,7 +127,7 @@
         when(request.getHeader("Content-type")).thenReturn("html/text");
         when(request.getHeader("Accept-Language")).thenReturn("en-US");
 
-        Vector<String> v = new Vector<String>();
+        Vector<String> v = new Vector<>();
         when(request.getParameterNames()).thenReturn(v.elements());
         return request;
     }
diff --git a/src/test/org/apache/turbine/test/BaseTurbineTest.java b/src/test/org/apache/turbine/test/BaseTurbineTest.java
index 2d2d69a..1be697e 100644
--- a/src/test/org/apache/turbine/test/BaseTurbineTest.java
+++ b/src/test/org/apache/turbine/test/BaseTurbineTest.java
@@ -44,7 +44,7 @@
     {
         if (turbineConfig == null)
         {
-            Map<String, String> initParams = new HashMap<String, String>();
+            Map<String, String> initParams = new HashMap<>();
             initParams.put(TurbineConfig.PROPERTIES_PATH_KEY, config); // "conf/test/TurbineResources.properties"
             initParams.put(TurbineConstants.LOGGING_ROOT_KEY, "target/test-logs");
 
diff --git a/src/test/org/apache/turbine/test/HsqlDB.java b/src/test/org/apache/turbine/test/HsqlDB.java
index 67123c5..cf656ab 100644
--- a/src/test/org/apache/turbine/test/HsqlDB.java
+++ b/src/test/org/apache/turbine/test/HsqlDB.java
@@ -1,25 +1,8 @@
 package org.apache.turbine.test;
 
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.FileReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
@@ -68,10 +51,8 @@
     private void loadSqlFile(String fileName)
             throws Exception
     {
-        Statement statement = null;
-        try
+        try (Statement statement = connection.createStatement())
         {
-            statement = connection.createStatement();
             String commands = getFileContents(fileName);
 
             for (int targetPos = commands.indexOf(';'); targetPos > -1; targetPos = commands.indexOf(';'))
@@ -102,30 +83,14 @@
                 commands = commands.substring(targetPos + 2);
             }
         }
-        finally
-        {
-            if (statement != null)
-            {
-                statement.close();
-            }
-        }
     }
 
     private String getFileContents(String fileName)
             throws Exception
     {
-        FileReader fr = new FileReader(fileName);
+        byte[] bytes = Files.readAllBytes(Paths.get(fileName));
 
-        char fileBuf[]  = new char[1024];
-        StringBuffer sb = new StringBuffer(1000);
-        int res = -1;
-
-        while ((res = fr.read(fileBuf, 0, 1024)) > -1)
-        {
-            sb.append(fileBuf, 0, res);
-        }
-        fr.close();
-        return sb.toString();
+        return new String(bytes, StandardCharsets.ISO_8859_1);
     }
 }
 
diff --git a/src/test/org/apache/turbine/test/TestComponent.java b/src/test/org/apache/turbine/test/TestComponent.java
index c243fef..600cd58 100644
--- a/src/test/org/apache/turbine/test/TestComponent.java
+++ b/src/test/org/apache/turbine/test/TestComponent.java
@@ -34,7 +34,7 @@
         extends Component
 {
 
-    static final String ROLE = "org.apache.turbine.test.TestComponent";
+    String ROLE = "org.apache.turbine.test.TestComponent";
 
     void test();
 }
diff --git a/src/test/org/apache/turbine/testcontainer/BuildContainerWithDockerfileTest.java b/src/test/org/apache/turbine/testcontainer/BuildContainerWithDockerfileTest.java
index c8211d9..d3efca0 100644
--- a/src/test/org/apache/turbine/testcontainer/BuildContainerWithDockerfileTest.java
+++ b/src/test/org/apache/turbine/testcontainer/BuildContainerWithDockerfileTest.java
@@ -30,7 +30,7 @@
  * Steps to run this
  *
  * Requirements:
- * <li>Unix: (Debian stretch tested):set <code>DOCKER_HOST=unix:///var/run/docker.sock</code> in docker-java.properties 
+ * <li>Unix: (Debian stretch tested):set <code>DOCKER_HOST=unix:///var/run/docker.sock</code> in docker-java.properties
  * (find the template in conf/docker-resources/db/dj.p.template) and comment out all other environment keys.
  * <li>Windows 10: Docker Desktop should provide all required configuration by default or
  * you need to create a local machine, e.g. with <code>docker-machine -d hyperv <vmname-default></code>
@@ -38,7 +38,7 @@
  * <li>Windows 7/VirtualBox: copy DOCKER_* properties to ~/.docker-java.properties or docker-java.properties in classpath..
  * To get the environment run: <code>docker-machine env default</code>, if your default docker machine is named default.
  * Verify the name with <code>docker-machine ls</code>.
- * 
+ *
  * Turbine pom.xml has folder conf/docker-resources enabled as test-resource, you may put the files there.
  * You may need to copy machines/&lt;docker-machine-name&gt;/certs from DOCKER_CERT_PATH to local path ~/.docker/machine/certs
  *
@@ -48,10 +48,10 @@
  * <li>To get results from <code>docker images</code>, you have to set the environment variables, see output from <code>docker-machine env <vmname></code>.
  *
  * Lookup of repository:
- * 
- * Testcontainers checks 
+ *
+ * Testcontainers checks
  * <li>~/.testcontainers.properties, then <code>classpath/testcontainers.properties</code>
- * <li>~/.docker-java.properties, then docker-java.properties -> set DOCKER_* properties, 
+ * <li>~/.docker-java.properties, then docker-java.properties -> set DOCKER_* properties,
  * may set DOCKER_CERT_PATHalways with forward slashes.
  * <li>At last also ~/.docker/config.json is checked for username/password for docker.io
  * Additional
@@ -59,7 +59,7 @@
  * <li>https://www.testcontainers.org/modules/databases/mysql/
  * <li>https://www.testcontainers.org/modules/databases/#using-an-init-script-from-a-file
  *
- * Bugs: docker virtualbox vm seems to auto pause. 
+ * Bugs: docker virtualbox vm seems to auto pause.
  * Check your docker vm with <code>docker-machine ls</code> and <code>docker-machine start <vmname></code>.
  *
  * @author gkallidis
@@ -69,28 +69,28 @@
 @Testcontainers
 @Tag("docker")
 class BuildContainerWithDockerfileTest {
-    
-  
+
+
    public static final String DOCKERFILE = "conf/docker-resources/db/Dockerfile";
-   
+
    private static Logger log = LogManager.getLogger();
-   
+
    public static int SERVICE_PORT = 3306;
 
    public static String DATABASE_NAME = "default";
 
    Connection connection;
-   
+
    @Container
    //@ClassRule
    public static GenericContainer MY_SQL_CONTAINER =   new GenericContainer<>(
            new ImageFromDockerfile()
 //           .withFileFromPath(
-//               ".", 
+//               ".",
 //               new File("./conf/docker-resources/db/mysql/initdb.d").toPath())
-//           .withDockerfileFromBuilder( 
+//           .withDockerfileFromBuilder(
 //                builder -> builder.from( "mysql:5.7.26" )
-//                .add( "data.sql","/docker-entrypoint-initdb.d" ) 
+//                .add( "data.sql","/docker-entrypoint-initdb.d" )
 //            )
             .withDockerfile(new File(DOCKERFILE).toPath())
         ).withExposedPorts( SERVICE_PORT ) //.withStartupAttempts( 2 )
@@ -98,13 +98,13 @@
          .withEnv( "MYSQL_USER", "userdb"  )
          .withEnv( "MYSQL_PASSWORD", "test1234" )
          .withEnv( "MYSQL_ROOT_PASSWORD","test1234" );
-   
+
 // reduce dependencies, but might use for debugging
 //    MY_SQL_CONTAINER = new MySQLContainer<>()
 //   .withDatabaseName( DATABASE_NAME).withUsername( "userdb" ).withPassword( "test1234" )
 //   .withInitScript( "./db/mysql/initdb.d/data.sql" )
 //   .withExposedPorts( SERVICEPORT )
-   
+
    @BeforeAll
    public static void init() {
 
@@ -148,7 +148,7 @@
          resultSet.close();
       }
    }
-   
+
    @Test
    @Order(3)
    void selectNewUser() throws SQLException {
@@ -173,7 +173,7 @@
          .getConnection(jdbcStr, "userdb", "test1234");
    }
 
-   // https://www.testcontainers.org/modules/databases/   
+   // https://www.testcontainers.org/modules/databases/
    // String.format("jdbc:tc:mysql:5.7.22://%s/%s", "dummy_host",
    // "test"); this will use database test, but allows e.g. custom cfg: ?TC_MY_CNF=x.cfg
    // TODO inform torque about mapped port, use overriding configuration in torque 4.1
@@ -182,22 +182,22 @@
       if (!MY_SQL_CONTAINER.isRunning()) {
           MY_SQL_CONTAINER.start();
       }
-      
+
       String serviceHost = MY_SQL_CONTAINER.getContainerIpAddress();
       Integer mappedPort = MY_SQL_CONTAINER.getMappedPort(SERVICE_PORT);// e.g. 32811
       log.info("generate jdbc url from {}, mapped Port: {}, bounded port: {}", serviceHost, mappedPort, MY_SQL_CONTAINER.getBoundPortNumbers());
 
 //      if (MY_SQL_CONTAINER instanceof MySQLContainer) {
 //          String genJDBC = ((MySQLContainer)MY_SQL_CONTAINER).getJdbcUrl();
-//          log.info( "generated connect url: {}", genJDBC);   
+//          log.info( "generated connect url: {}", genJDBC);
 //      }
-      String targetJDBC = 
+      String targetJDBC =
       String.format("jdbc:mysql://%s:%d/%s?loggerLevel=OFF", serviceHost,
                     mappedPort, DATABASE_NAME);
-      // changing the jdbc string prefix to  jdbc:tc:mysql does handle the test database setup, 
+      // changing the jdbc string prefix to  jdbc:tc:mysql does handle the test database setup,
       // https://www.testcontainers.org/modules/databases/jdbc/
       log.info( "used connect url: {}", targetJDBC);
       return targetJDBC;
    }
-   
+
 }
diff --git a/src/test/org/apache/turbine/testcontainer/UserManagerWithContainerTest.java b/src/test/org/apache/turbine/testcontainer/UserManagerWithContainerTest.java
index a583eb2..8714d91 100644
--- a/src/test/org/apache/turbine/testcontainer/UserManagerWithContainerTest.java
+++ b/src/test/org/apache/turbine/testcontainer/UserManagerWithContainerTest.java
@@ -33,7 +33,7 @@
  *
  * TODO
  * This test might be more useful in a running turbine environment,
- * e.g. created by archetypes or in torque-test testing databases. 
+ * e.g. created by archetypes or in torque-test testing databases.
  *
  * @author gkallidis
  *
@@ -41,7 +41,7 @@
 @TestMethodOrder(OrderAnnotation.class)
 @Testcontainers
 @Tag("docker")
-// requires manual port mapping in docker-manager/TorqueTest.properties, 
+// requires manual port mapping in docker-manager/TorqueTest.properties,
 //@Disabled
 class UserManagerWithContainerTest {
 
@@ -51,12 +51,12 @@
    static TurbineConfig tc;
 
    boolean onDeleteCascade = true;
-   
+
    private static Logger log = LogManager.getLogger();
-   
+
    @Container
    private static GenericContainer MY_SQL_CONTAINER = BuildContainerWithDockerfileTest.MY_SQL_CONTAINER;
-   
+
    @BeforeAll
    public static void init() {
 
@@ -67,7 +67,7 @@
          // get Torque component configuration and override torque.dsfactory.default.connection.url with url containing mapped port.
          //Connection c = BuildContainerWithDockerfileTest.getConnection();
          //MY_SQL_CONTAINER.getMappedPort( BuildContainerWithDockerfileTest.SERVICE_PORT );
-          
+
          String jdbcConnectionString = BuildContainerWithDockerfileTest.generateJdbcUrl();
          String customUrl = "torque.dsfactory.default.connection.url="+ jdbcConnectionString;
          // override and set mapped port in url, which is known only at runtime.
@@ -110,7 +110,7 @@
       assertTrue( turbineSecurityService.accountExists( user ) );
       //assertTrue( turbineSecurityService.getUserManager().checkExists( user ) );
    }
-   
+
    @Test
    @Order(2)
    @Tag("docker")
@@ -120,9 +120,9 @@
       try {
          ringo = turbineSecurityService.getUser("ringo");
          assertEquals("ringo", ringo.getFirstName());
-         
+
          deleteUser(ringo);
-         
+
       } catch (Exception sqle) {
           log.error( "new user error",sqle);
           fail();
diff --git a/src/test/org/apache/turbine/util/template/HtmlPageAttributesTest.java b/src/test/org/apache/turbine/util/template/HtmlPageAttributesTest.java
index bf0a928..4ef87a9 100644
--- a/src/test/org/apache/turbine/util/template/HtmlPageAttributesTest.java
+++ b/src/test/org/apache/turbine/util/template/HtmlPageAttributesTest.java
@@ -40,7 +40,7 @@
  */
 public class HtmlPageAttributesTest extends BaseTestCase
 {
-    
+
     @TurbineConfiguration( TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_KEY )
     private String defaultHtmlDoctypeRootElement = TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_DEFAULT;
 
@@ -49,7 +49,7 @@
 
     @TurbineConfiguration( TurbineConstants.DEFAULT_HTML_DOCTYPE_URI_KEY )
     private String defaultHtmlDoctypeUri;
-    
+
     private static TurbineConfig tc = null;
 
     @BeforeAll
@@ -71,14 +71,14 @@
     {
         // do nothing
     }
-    
+
     @Test public void testBuildDoctype() throws TurbineException
     {
         HtmlPageAttributes page = new HtmlPageAttributes();
         assertEquals("<!DOCTYPE html>", page.getDoctype("html", null, null));
         assertEquals("<!DOCTYPE html>", page.getDoctype("html", "", ""));
         assertEquals("<!DOCTYPE html SYSTEM \"bla\">", page.getDoctype("html", "", "bla"));
-        
+
        // by default empty in HTML 5
         assertEquals("<!DOCTYPE HTML>",
                 page.getDoctype(TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_DEFAULT,
diff --git a/src/test/org/apache/turbine/util/uri/TurbineURITest.java b/src/test/org/apache/turbine/util/uri/TurbineURITest.java
index db45a86..23d7ac2 100644
--- a/src/test/org/apache/turbine/util/uri/TurbineURITest.java
+++ b/src/test/org/apache/turbine/util/uri/TurbineURITest.java
@@ -171,7 +171,7 @@
         // added values.
         assertEquals("/context/servlet/turbine?test=null",
         turi.getRelativeLink());
-        
+
         turi.removeQueryData("test");
         assertEquals("/context/servlet/turbine", turi.getRelativeLink());