(no commit message)
[utils] / system / general / src / main / java / org / wamblee / system / adapters / ParameterValues.java
index 609f9d2586dbbce17b143aad3254e3ab384fdfea..2f6f12de0c0f3d6da71f5512e54f44b138e28684 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 the original author or authors.
+ * Copyright 2005-2010 the original author or authors.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * 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.
- */ 
+ */
 package org.wamblee.system.adapters;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.wamblee.system.core.DefaultRequiredInterface;
 import org.wamblee.system.core.RequiredInterface;
 import org.wamblee.system.core.Scope;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 /**
- * Represents parameter values for a method or constructor and allows for the configuration
- * of how these values are retrieved. 
+ * Represents parameter values for a method or constructor and allows for the
+ * configuration of how these values are retrieved.
  * 
  * @author Erik Brakkee
  */
 public class ParameterValues {
-       private Class[] _types;
-       private ValueProvider[] _values;
-
-       /**
-        * Constructs the configuration. By default no constructor is selected and 
-        * one of {@link #select(Class...)} or 
-        * {@link #greedy()} must be called.  
-        * @param aClass Class to construct. 
-        */
-       public ParameterValues(Class[] aTypes) {
-               _types = aTypes; 
-               resetValues();   
-       }
-       
-       public Class[] getTypes() {
-               return _types;
-       }
-       
-       /**
-        * Sets argument i to be optional, meaning that null is allowed to be passed in.  
-        * @param aArg Argument to set.
-        */
-       public ParameterValues setOptional(int aArg) { 
-               _values[aArg] = new RequiredInterfaceProvider(new DefaultRequiredInterface(
-                               "arg" + aArg, _types[aArg], true));
-               return this; 
-       }
-       
-       /**
-        * Sets the argument i to a fixed value.  
-        * @param aArg Argument to set. 
-        * @param aValue Value. 
-        */
-       public ParameterValues setValue(int aArg, Object aValue) { 
-               _values[aArg] = new FixedValueProvider(aValue);
-               return this; 
-       }
-       
-       /**
-        * Resets the values. 
-        */
-       private void resetValues() { 
-               _values = new ValueProvider[_types.length];
-               for (int i = 0; i < _values.length; i++) { 
-                       _values[i] = new RequiredInterfaceProvider(new DefaultRequiredInterface(
-                                       "arg" + i, _types[i]));
-               }
-       }
-       
-       public List<RequiredInterface> getRequiredInterfaces() { 
-               List<RequiredInterface> result = new ArrayList<RequiredInterface>(); 
-               for (ValueProvider provider: _values) { 
-                       if ( provider instanceof RequiredInterfaceProvider) { 
-                               result.add( ((RequiredInterfaceProvider)provider).getRequiredInterface());
-                       }
-               }
-               return result; 
-       }
-
-       public Object[] values(Scope aScope) {
-               Object[] values = new Object[_values.length];
-               for (int i = 0; i < _values.length; i++) {
-                       values[i] = _values[i].getValue(aScope);
-               }
-               return values; 
-       }
-       
+    private String[] names;
+
+    private Class[] types;
+
+    private ValueProvider[] values;
+
+    /**
+     * Constructs the configuration. By default no constructor is selected and
+     * one of {@link #select(Class...)} or {@link #greedy()} must be called.
+     * 
+     * @param aClass
+     *            Class to construct.
+     */
+    public ParameterValues(Class[] aTypes) {
+        names = new String[aTypes.length];
+
+        for (int i = 0; i < aTypes.length; i++) {
+            names[i] = "arg" + i;
+        }
+
+        types = aTypes;
+        resetValues();
+    }
+
+    /**
+     * Constructs the configuration. By default no constructor is selected and
+     * one of {@link #select(Class...)} or {@link #greedy()} must be called.
+     * 
+     * @param aNames
+     *            Names of the arguments.
+     * @param aClass
+     *            Class to construct.
+     */
+    public ParameterValues(String[] aNames, Class[] aTypes) {
+        assert aNames.length == aTypes.length;
+        names = aNames;
+        types = Arrays.copyOf(aTypes, aTypes.length);
+        resetValues();
+    }
+
+    /**
+     * The types of the parameter values.
+     * 
+     * @return Types.
+     */
+    public Class[] getTypes() {
+        return Arrays.copyOf(types, types.length);
+    }
+
+    /**
+     * Sets argument i to be optional, meaning that null is allowed to be passed
+     * in.
+     * 
+     * @param aArg
+     *            Argument to set.
+     * 
+     */
+    public ParameterValues setOptional(int aArg) {
+        values[aArg] = new RequiredInterfaceProvider(
+            new DefaultRequiredInterface("arg" + aArg, types[aArg], true));
+
+        return this;
+    }
+
+    /**
+     * Sets the argument i to a fixed value.
+     * 
+     * @param aArg
+     *            Argument to set.
+     * @param aValue
+     *            Value.
+     * 
+     */
+    public ParameterValues setValue(int aArg, Object aValue) {
+        values[aArg] = new FixedValueProvider(aValue);
+
+        return this;
+    }
+
+    /**
+     * Resets the values.
+     */
+    private void resetValues() {
+        values = new ValueProvider[types.length];
+
+        for (int i = 0; i < values.length; i++) {
+            values[i] = new RequiredInterfaceProvider(
+                new DefaultRequiredInterface(names[i], types[i]));
+        }
+    }
+
+    /**
+     * Gets the required interfaces to provide values that are not provided in
+     * another way.
+     * 
+     * @return Required interfaces.
+     */
+    public List<RequiredInterface> getRequiredInterfaces() {
+        List<RequiredInterface> result = new ArrayList<RequiredInterface>();
+
+        for (ValueProvider provider : values) {
+            if (provider instanceof RequiredInterfaceProvider) {
+                result.add(((RequiredInterfaceProvider) provider)
+                    .getRequiredInterface());
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns the values to use in the given scope.
+     * 
+     * @param aScope
+     *            Scope within which to retrieve the values.
+     * 
+     * @return Values.
+     */
+    public Object[] values(Scope aScope) {
+        Object[] valueArray = new Object[values.length];
+
+        for (int i = 0; i < values.length; i++) {
+            valueArray[i] = values[i].getValue(aScope);
+        }
+
+        return valueArray;
+    }
 }