added setter injection to the class adapter.
[utils] / system / general / src / main / java / org / wamblee / system / adapters / ClassConfiguration.java
index 96d976d32972642de93a1d840f265fc9e20be796..a4114175340495ca81740a6073851df7aed2aec7 100644 (file)
@@ -15,6 +15,9 @@
  */
 package org.wamblee.system.adapters;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.wamblee.system.core.DefaultProvidedInterface;
 import org.wamblee.system.core.ProvidedInterface;
 import org.wamblee.system.core.RequiredInterface;
@@ -29,7 +32,8 @@ import org.wamblee.system.core.Scope;
 public class ClassConfiguration {
 
        private Class _class; 
-       private ConstructorConfiguration _constructorConfig; 
+       private ConstructorConfiguration _constructorConfig;
+       private SetterConfiguration _setterConfig; 
        
        /**
         * Constructs the configuration. By default no constructor is selected and 
@@ -39,12 +43,17 @@ public class ClassConfiguration {
         */
        public ClassConfiguration(Class aClass) {
                _class = aClass; 
-               _constructorConfig = new ConstructorConfiguration(aClass);  
+               _constructorConfig = new ConstructorConfiguration(aClass);
+               _setterConfig = new SetterConfiguration(aClass);
        }
        
        public ConstructorConfiguration getConstructorConfig() {
                return _constructorConfig;
        }
+       
+       public SetterConfiguration getSetterConfiguration() { 
+           return _setterConfig; 
+       }
 
        /**
         * Creates the object in the given scope. 
@@ -55,13 +64,25 @@ public class ClassConfiguration {
                return _constructorConfig.create(aScope);
        }
        
-       public ProvidedInterface[] getProvidedInterfaces() { 
-               return new ProvidedInterface[] { 
-                       new DefaultProvidedInterface("provided", _class)        
-               };
+       /**
+        * Injects required interfaces through the setters 
+        * @param aObject Object to inject into. 
+        * @param aScope Scope in which injection takes place. 
+        */
+       public void inject(Scope aScope, Object aObject) { 
+           _setterConfig.invoke(aScope, aObject);
+       }
+       
+       public List<ProvidedInterface> getProvidedInterfaces() {
+           List<ProvidedInterface> result = new ArrayList<ProvidedInterface>();
+           result.add(new DefaultProvidedInterface("provided", _class));       
+           return result;
        }
        
-       public RequiredInterface[] getRequiredInterface() { 
-               return _constructorConfig.getRequiredInterfaces().toArray(new RequiredInterface[0]);
+       public List<RequiredInterface> getRequiredInterfaces() { 
+           List<RequiredInterface> result = new ArrayList<RequiredInterface>();
+           result.addAll(_constructorConfig.getRequiredInterfaces());
+           result.addAll(_setterConfig.getRequiredInterfaces());
+           return result; 
        }
 }