TAMAYA-160: Added support for autoijecting configuration on non annotated 
classes.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/66d21d56
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/66d21d56
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/66d21d56

Branch: refs/heads/master
Commit: 66d21d56f1a33756ed1e16c2b519a697996afdb2
Parents: 74f3aa4
Author: anatole <anat...@apache.org>
Authored: Wed May 11 03:47:20 2016 +0200
Committer: anatole <anat...@apache.org>
Committed: Wed May 11 03:47:20 2016 +0200

----------------------------------------------------------------------
 .../tamaya/inject/ConfigurationInjector.java    |  6 +++-
 .../inject/internal/ConfiguredTypeImpl.java     | 23 +++++++++-------
 .../internal/DefaultConfigurationInjector.java  | 29 +++++++++++++++++---
 3 files changed, 43 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/66d21d56/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
----------------------------------------------------------------------
diff --git 
a/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java 
b/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
index 9a3fe5c..563ae47 100644
--- 
a/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
+++ 
b/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
@@ -30,7 +30,9 @@ public interface ConfigurationInjector {
     /**
      * Configures the current instance and registers necessary listener to 
forward config change events as
      * defined by the current annotations in place.
-     * 
+     *
+     * Unannotated types are ignored.
+     *
      * @param <T> the type of the instance.
      * @param instance the instance to be configured
      * @return the configured instance (allows chaining of operations).
@@ -41,6 +43,8 @@ public interface ConfigurationInjector {
      * Configures the current instance and registers necessary listener to 
forward config change events as
      * defined by the current annotations in place.
      *
+     * Unannotated types are ignored.
+     *
      * @param <T> the type of the instance.
      * @param instance the instance to be configured
      * @param config the configuration to be used for injection.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/66d21d56/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java
----------------------------------------------------------------------
diff --git 
a/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java
 
b/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java
index ecb464c..b40f6c9 100644
--- 
a/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java
+++ 
b/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java
@@ -62,18 +62,21 @@ public class ConfiguredTypeImpl implements ConfiguredType{
      *
      * @param type the instance type.
      */
-
     public ConfiguredTypeImpl(Class type) {
         this.type = Objects.requireNonNull(type);
-        ConfigDefaultSections confType = (ConfigDefaultSections)
-                type.getAnnotation(ConfigDefaultSections.class);
-        ConfigAutoInject autoInject = 
(ConfigAutoInject)type.getAnnotation(ConfigAutoInject.class);
-        if(confType!=null){
-            initFields(type, autoInject!=null);
-            initMethods(type, autoInject!=null);
-        }else{
-            initFields(type, false);
-            initMethods(type, false);
+        if(!isConfigured(type)){
+            LOG.info("Auto-Configuring type: " + type.getName());
+            initFields(type, true);
+            initMethods(type, true);
+        }else {
+            ConfigAutoInject autoInject = (ConfigAutoInject) 
type.getAnnotation(ConfigAutoInject.class);
+            if (autoInject != null) {
+                initFields(type, autoInject != null);
+                initMethods(type, autoInject != null);
+            } else {
+                initFields(type, false);
+                initMethods(type, false);
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/66d21d56/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java
----------------------------------------------------------------------
diff --git 
a/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java
 
b/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java
index 0795d66..a3a7015 100644
--- 
a/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java
+++ 
b/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java
@@ -47,6 +47,8 @@ public final class DefaultConfigurationInjector implements 
ConfigurationInjector
 
     private static final Logger LOG = 
Logger.getLogger(DefaultConfigurationInjector.class.getName());
 
+    private boolean autoConfigureEnabled = true;
+
     /**
      * Extract the configuration annotation config and registers it per class, 
for later reuse.
      *
@@ -55,13 +57,32 @@ public final class DefaultConfigurationInjector implements 
ConfigurationInjector
      */
     public ConfiguredType registerType(Class<?> type) {
         ConfiguredType confType = configuredTypes.get(type);
-        if (confType == null && isConfigured(type)) {
+        if (confType == null) {
+            if(!isConfigAnnotated(type) && !autoConfigureEnabled){
+                return null;
+            }
             confType = new ConfiguredTypeImpl(type);
             configuredTypes.put(type, confType);
             InjectionHelper.sendConfigurationEvent(confType);
         }
         return confType;
-//        return configuredTypes.computeIfAbsent(type, 
ConfigDefaultSections::new);
+    }
+
+    /**
+     * If set also non annotated instances can be configured or created as 
templates.
+     * @return true, if autoConfigureEnabled.
+     */
+    public boolean isAutoConfigureEnabled(){
+        return autoConfigureEnabled;
+    }
+
+    /**
+     * Setting to true enables also configuration/templating of non annotated 
classes or
+     * interfaces.
+     * @param enabled true enables also configuration/templating of
+     */
+    public void setAutoConfigureEnabled(boolean enabled){
+        this.autoConfigureEnabled = enabled;
     }
 
     /**
@@ -69,7 +90,7 @@ public final class DefaultConfigurationInjector implements 
ConfigurationInjector
      * @param type the target type, not null.
      * @return true, if the type, a method or field has Tamaya config 
annotation on it.
      */
-    private boolean isConfigured(Class<?> type) {
+    private boolean isConfigAnnotated(Class<?> type) {
         if(type.getClass().isAnnotationPresent(ConfigDefaultSections.class)){
             return true;
         }
@@ -111,7 +132,7 @@ public final class DefaultConfigurationInjector implements 
ConfigurationInjector
         if(configuredType!=null){
             configuredType.configure(instance, config);
         }else{
-            LOG.info("Instance passed is not annotated for configuration: " + 
instance);
+            LOG.info("Instance passed is not configurable: " + instance);
         }
         return instance;
     }

Reply via email to