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);
}
}
}