+ // TODO is it possible to get more than one setter here in case the subclass overrides
+ // the baseclass method?
+ _setters.put(methods.get(0), createParameterValues(methods.get(0)));
+ return this;
+ }
+
+ /**
+ * Adds a given setter identified by the type it accepts to the list of
+ * setters.N
+ *
+ * @param aType
+ * Type to look for. Note that this must be the exact type as
+ * autoboxing and autounboxing is not used.
+ * @return Reference to the current object to allow call chaining.
+ * @throws IllegalArgumentException
+ * In case no setter is found or multiple setters are found.
+ */
+ public SetterConfiguration add(final Class aType) {
+ List<Method> result = new ArrayList<Method>();
+ CollectionFilter.filter(getAllSetters(_class, _publicOnly), result,
+ new Condition<Method>() {
+ @Override
+ public boolean matches(Method aObject) {
+ Class type = aObject.getParameterTypes()[0];
+ return type.equals(aType);
+ }
+
+ });
+ if (result.size() == 0) {
+ throw new IllegalArgumentException("No setter found in class '"
+ + _class.getName()
+ + "' that has a setter with argument type '"
+ + aType.getName() + "'");
+ }
+ if (result.size() > 1) {
+ String setters = "";
+ for (Method method : result) {
+ setters += method.getName() + " ";
+ }
+ throw new IllegalArgumentException(
+ "Multiple setters found in class '" + _class.getName()
+ + " that accept type '" + aType.getName() + "': "
+ + setters);
+ }
+ Method method = result.get(0);
+ _setters.put(method, createParameterValues(method));