import org.wamblee.system.core.RequiredInterface;
import org.wamblee.system.core.Scope;
+/**
+ * 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;
+ private String[] names;
+ private Class[] types;
+ private ValueProvider[] values;
/**
* Constructs the configuration. By default no constructor is selected and
* @param aClass Class to construct.
*/
public ParameterValues(Class[] aTypes) {
- _types = 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 = aTypes;
+ resetValues();
+ }
+
+ /**
+ * The types of the parameter values.
+ * @return Types.
+ */
public Class[] getTypes() {
- return _types;
+ return types;
}
/**
* @param aArg Argument to set.
*/
public ParameterValues setOptional(int aArg) {
- _values[aArg] = new RequiredInterfaceProvider(new DefaultRequiredInterface(
- "arg" + aArg, _types[aArg], true));
+ values[aArg] = new RequiredInterfaceProvider(new DefaultRequiredInterface(
+ "arg" + aArg, types[aArg], true));
return this;
}
* @param aValue Value.
*/
public ParameterValues setValue(int aArg, Object aValue) {
- _values[aArg] = new FixedValueProvider(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]));
+ 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) {
+ 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[] values = new Object[_values.length];
- for (int i = 0; i < _values.length; i++) {
- values[i] = _values[i].getValue(aScope);
+ Object[] valueArray = new Object[values.length];
+ for (int i = 0; i < values.length; i++) {
+ valueArray[i] = values[i].getValue(aScope);
}
- return values;
+ return valueArray;
}
}