Author: tv
Date: Fri Jan  8 11:22:24 2016
New Revision: 1723692

URL: http://svn.apache.org/viewvc?rev=1723692&view=rev
Log:
Refactor annotation processing into separate methods

Modified:
    
turbine/core/trunk/src/java/org/apache/turbine/annotation/AnnotationProcessor.java

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/annotation/AnnotationProcessor.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/annotation/AnnotationProcessor.java?rev=1723692&r1=1723691&r2=1723692&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/annotation/AnnotationProcessor.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/annotation/AnnotationProcessor.java
 Fri Jan  8 11:22:24 2016
@@ -31,7 +31,7 @@ import org.apache.turbine.Turbine;
 import org.apache.turbine.modules.Loader;
 import org.apache.turbine.services.ServiceManager;
 import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
+import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
 import org.apache.turbine.util.TurbineException;
 
 /**
@@ -44,8 +44,7 @@ import org.apache.turbine.util.TurbineEx
 public class AnnotationProcessor
 {
     /** Logging */
-    private static Log log
-            = LogFactory.getLog(AnnotationProcessor.class);
+    private static Log log = LogFactory.getLog(AnnotationProcessor.class);
 
     /**
      * Search for annotated fields of the object and provide them with the
@@ -57,6 +56,7 @@ public class AnnotationProcessor
     public static void process(Object object) throws TurbineException
     {
         ServiceManager manager = TurbineServices.getInstance();
+        AssemblerBrokerService assembler = 
(AssemblerBrokerService)manager.getService(AssemblerBrokerService.SERVICE_NAME);
         Class<?> clazz = object.getClass();
 
         while (clazz != null)
@@ -67,146 +67,187 @@ public class AnnotationProcessor
             {
                 if (field.isAnnotationPresent(TurbineService.class))
                 {
-                    TurbineService sa = 
field.getAnnotation(TurbineService.class);
-                    String serviceName = null;
-                    // Check for annotation value
-                    if (StringUtils.isNotEmpty(sa.value()))
-                    {
-                        serviceName = sa.value();
-                    }
-                    // Check for fields SERVICE_NAME and ROLE
-                    else
-                    {
-                        Field[] typeFields = field.getType().getFields();
-                        for (Field f : typeFields)
-                        {
-                            if 
(TurbineService.SERVICE_NAME.equals(f.getName()))
-                            {
-                                try
-                                {
-                                    serviceName = (String)f.get(null);
-                                }
-                                catch (Exception e)
-                                {
-                                    continue;
-                                }
-                                break;
-                            }
-                            else if (TurbineService.ROLE.equals(f.getName()))
-                            {
-                                try
-                                {
-                                    serviceName = (String)f.get(null);
-                                }
-                                catch (Exception e)
-                                {
-                                    continue;
-                                }
-                                break;
-                            }
-                        }
-                    }
+                    injectTurbineService(object, manager, field);
+                }
+                else if (field.isAnnotationPresent(TurbineConfiguration.class))
+                {
+                    injectTurbineConfiguration(object, field);
+                }
+                else if (field.isAnnotationPresent(TurbineLoader.class))
+                {
+                    injectTurbineLoader(object, assembler, field);
+                }
+            }
 
-                    if (StringUtils.isEmpty(serviceName))
-                    {
-                        // Try interface class name
-                        serviceName = field.getType().getName();
-                    }
+            clazz = clazz.getSuperclass();
+        }
+    }
 
-                    if (log.isDebugEnabled())
-                    {
-                        log.debug("Looking up service for injection: " + 
serviceName + " for object " + object);
-                    }
+    /**
+     * Inject Turbine configuration into field of object
+     *
+     * @param object the object to process
+     * @param assembler AssemblerBrokerService, provides the loader
+     * @param field the field
+     *
+     * @throws TurbineException if loader cannot be set
+     */
+    private static void injectTurbineLoader(Object object, 
AssemblerBrokerService assembler, Field field) throws TurbineException
+    {
+        TurbineLoader la = field.getAnnotation(TurbineLoader.class);
+        Loader<?> loader = assembler.getLoader(la.value());
+        field.setAccessible(true);
 
-                    Object service = manager.getService(serviceName); // 
throws Exception on unknown service
-                    field.setAccessible(true);
+        try
+        {
+            if (log.isDebugEnabled())
+            {
+                log.debug("Injection of " + loader + " into object " + object);
+            }
 
-                    try
-                    {
-                        if (log.isDebugEnabled())
-                        {
-                            log.debug("Injection of " + serviceName + " into 
object " + object);
-                        }
+            field.set(object, loader);
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new TurbineException("Could not inject loader "
+                    + loader + " into object " + object, e);
+        }
+        catch (IllegalAccessException e)
+        {
+            throw new TurbineException("Could not inject loader "
+                    + loader + " into object " + object, e);
+        }
+    }
 
-                        field.set(object, service);
-                    }
-                    catch (IllegalArgumentException e)
-                    {
-                        throw new TurbineException("Could not inject service "
-                                + serviceName + " into object " + object, e);
-                    }
-                    catch (IllegalAccessException e)
-                    {
-                        throw new TurbineException("Could not inject service "
-                                + serviceName + " into object " + object, e);
-                    }
-                }
-                else if (field.isAnnotationPresent(TurbineConfiguration.class))
-                {
-                    TurbineConfiguration ca = 
field.getAnnotation(TurbineConfiguration.class);
-                    Configuration conf = null;
+    /**
+     * Inject Turbine configuration into field of object
+     *
+     * @param object the object to process
+     * @param field the field
+     *
+     * @throws TurbineException if configuration cannot be set
+     */
+    private static void injectTurbineConfiguration(Object object, Field field) 
throws TurbineException
+    {
+        TurbineConfiguration ca = 
field.getAnnotation(TurbineConfiguration.class);
+        Configuration conf = null;
 
-                    // Check for annotation value
-                    if (StringUtils.isNotEmpty(ca.value()))
-                    {
-                        conf = Turbine.getConfiguration().subset(ca.value());
-                    }
-                    else
-                    {
-                        conf = Turbine.getConfiguration();
-                    }
+        // Check for annotation value
+        if (StringUtils.isNotEmpty(ca.value()))
+        {
+            conf = Turbine.getConfiguration().subset(ca.value());
+        }
+        else
+        {
+            conf = Turbine.getConfiguration();
+        }
 
-                    field.setAccessible(true);
+        field.setAccessible(true);
 
-                    try
-                    {
-                        if (log.isDebugEnabled())
-                        {
-                            log.debug("Injection of " + conf + " into object " 
+ object);
-                        }
+        try
+        {
+            if (log.isDebugEnabled())
+            {
+                log.debug("Injection of " + conf + " into object " + object);
+            }
 
-                        field.set(object, conf);
-                    }
-                    catch (IllegalArgumentException e)
+            field.set(object, conf);
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new TurbineException("Could not inject configuration "
+                    + conf + " into object " + object, e);
+        }
+        catch (IllegalAccessException e)
+        {
+            throw new TurbineException("Could not inject configuration "
+                    + conf + " into object " + object, e);
+        }
+    }
+
+    /**
+     * Inject Turbine service into field of object
+     *
+     * @param object the object to process
+     * @param manager the service manager
+     * @param field the field
+     *
+     * @throws TurbineException if service is not available
+     */
+    private static void injectTurbineService(Object object, ServiceManager 
manager, Field field) throws TurbineException
+    {
+        TurbineService sa = field.getAnnotation(TurbineService.class);
+        String serviceName = null;
+        // Check for annotation value
+        if (StringUtils.isNotEmpty(sa.value()))
+        {
+            serviceName = sa.value();
+        }
+        // Check for fields SERVICE_NAME and ROLE
+        else
+        {
+            Field[] typeFields = field.getType().getFields();
+            for (Field f : typeFields)
+            {
+                if (TurbineService.SERVICE_NAME.equals(f.getName()))
+                {
+                    try
                     {
-                        throw new TurbineException("Could not inject 
configuration "
-                                + conf + " into object " + object, e);
+                        serviceName = (String)f.get(null);
                     }
-                    catch (IllegalAccessException e)
+                    catch (Exception e)
                     {
-                        throw new TurbineException("Could not inject 
configuration "
-                                + conf + " into object " + object, e);
+                        continue;
                     }
+                    break;
                 }
-                else if (field.isAnnotationPresent(TurbineLoader.class))
+                else if (TurbineService.ROLE.equals(f.getName()))
                 {
-                    TurbineLoader la = 
field.getAnnotation(TurbineLoader.class);
-                    Loader<?> loader = 
TurbineAssemblerBroker.getLoader(la.value());
-                    field.setAccessible(true);
-
                     try
                     {
-                        if (log.isDebugEnabled())
-                        {
-                            log.debug("Injection of " + loader + " into object 
" + object);
-                        }
-
-                        field.set(object, loader);
+                        serviceName = (String)f.get(null);
                     }
-                    catch (IllegalArgumentException e)
+                    catch (Exception e)
                     {
-                        throw new TurbineException("Could not inject loader "
-                                + loader + " into object " + object, e);
-                    }
-                    catch (IllegalAccessException e)
-                    {
-                        throw new TurbineException("Could not inject loader "
-                                + loader + " into object " + object, e);
+                        continue;
                     }
+                    break;
                 }
             }
+        }
 
-            clazz = clazz.getSuperclass();
+        if (StringUtils.isEmpty(serviceName))
+        {
+            // Try interface class name
+            serviceName = field.getType().getName();
+        }
+
+        if (log.isDebugEnabled())
+        {
+            log.debug("Looking up service for injection: " + serviceName + " 
for object " + object);
+        }
+
+        Object service = manager.getService(serviceName); // throws Exception 
on unknown service
+        field.setAccessible(true);
+
+        try
+        {
+            if (log.isDebugEnabled())
+            {
+                log.debug("Injection of " + serviceName + " into object " + 
object);
+            }
+
+            field.set(object, service);
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new TurbineException("Could not inject service "
+                    + serviceName + " into object " + object, e);
+        }
+        catch (IllegalAccessException e)
+        {
+            throw new TurbineException("Could not inject service "
+                    + serviceName + " into object " + object, e);
         }
     }
 }


Reply via email to