X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fadapters%2FSetterConfiguration.java;h=57323a54b409531f53667e9d771c4f9d542a0060;hb=4759a6709085fa9426a1fc1842444d61f9f61e94;hp=649e008fae1f7f1ff0f17eff1b0c3923cd906db9;hpb=d4f4682056f4fdf0c74a174cd636f278423f6883;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/adapters/SetterConfiguration.java b/system/general/src/main/java/org/wamblee/system/adapters/SetterConfiguration.java index 649e008f..57323a54 100644 --- a/system/general/src/main/java/org/wamblee/system/adapters/SetterConfiguration.java +++ b/system/general/src/main/java/org/wamblee/system/adapters/SetterConfiguration.java @@ -100,55 +100,59 @@ public class SetterConfiguration { * Removes a setter from the set of methods. * * @param aName - * Name of the setter to remove (without the "set" prefix). + * Name of the setter to remove. * @return Reference to the current object to allow call chaining. */ public SetterConfiguration remove(String aName) { - final String name = createSetterName(aName); - Map setters = new HashMap(); for (Method method : _setters.keySet()) { - if (method.getName().equals(name)) { + if (method.getName().equals(aName)) { _setters.remove(method); return this; } } throw new IllegalArgumentException( - "No setter configured by the name of '" + aName + "'"); + "No method configured by the name of '" + aName + "'"); } - + /** - * Creates the name of a setter based on the name of the setter without the - * "set" prefix. - * - * @param aName - * Setter name. - * @return Setter name. + * Removes the method from the set of methods. + * @param aMethod Method to remove. + * @return */ - private String createSetterName(String aName) { - return "set" + aName.substring(0, 1).toUpperCase() + aName.substring(1); + public SetterConfiguration remove(Method aMethod) { + if ( !aMethod.getDeclaringClass().isAssignableFrom(_class) ) { + throw new RuntimeException("Method " + aMethod + " not found in class " + _class + " or its superclasses"); + } + for (Method method : _setters.keySet()) { + if (method.equals(aMethod)) { + _setters.remove(method); + return this; + } + } + throw new IllegalArgumentException( + "Method '" + aMethod + "' was not configured. "); } - + /** * Adds a given setter name to the setters. * - * @param aName + * @param aName Name of a setter method. * @return Reference to the current object to allow call chaining. */ - public SetterConfiguration add(String aName) { - final String name = createSetterName(aName); + public SetterConfiguration add(final String aName) { int oldlen = _setters.size(); List methods = new ArrayList(); CollectionFilter.filter(getAllSetters(_class, _publicOnly), methods, new Condition() { @Override public boolean matches(Method aObject) { - return aObject.getName().equals(name); + return aObject.getName().equals(aName); } }); if (methods.size() == 0 ) { - throw new IllegalArgumentException("No setter found for '" + aName - + "' in " + _class.getName()); + throw new IllegalArgumentException("Method '" + aName + + "' not found in " + _class.getName()); } // TODO is it possible to get more than one setter here in case the subclass overrides // the baseclass method? @@ -167,7 +171,7 @@ public class SetterConfiguration { * @throws IllegalArgumentException * In case no setter is found or multiple setters are found. */ - public SetterConfiguration add(final Class aType) { + public SetterConfiguration addSetter(final Class aType) { List result = new ArrayList(); CollectionFilter.filter(getAllSetters(_class, _publicOnly), result, new Condition() { @@ -219,10 +223,14 @@ public class SetterConfiguration { return result; } - private static ParameterValues createParameterValues(Method method) { - return new ParameterValues( - new String[] { getSetterName(method) }, new Class[] { method - .getParameterTypes()[0] }); + private static ParameterValues createParameterValues(Method aMethod) { + + Class[] paramTypes = aMethod.getParameterTypes(); + String[] paramNames = new String[paramTypes.length]; + for (int i = 0; i < paramTypes.length; i++) { + paramNames[i] = aMethod.getName() + "." + i; + } + return new ParameterValues(paramNames, paramTypes); } private static final List getAllMethods(Class aClass) { @@ -280,30 +288,15 @@ public class SetterConfiguration { * @return Parameter values. */ public ParameterValues values(String aMethod) { - String name = createSetterName(aMethod); for (Method method : _setters.keySet()) { - if (method.getName().equals(name)) { + if (method.getName().equals(aMethod)) { return _setters.get(method); } } - throw new IllegalArgumentException("No setter method '" + name + throw new IllegalArgumentException("No setter method '" + aMethod + "' found"); } - /** - * Gets the setter name for a given setter method. This is the name of the - * setter without the "set" prefix and with the first character converted to - * lowercase. - * - * @param aMethod - * Method. - * @return Setter name. - */ - private static String getSetterName(Method aMethod) { - String result = aMethod.getName().substring(3); - return result.substring(0, 1).toLowerCase() + result.substring(1); - } - public List getSetters() { return new ArrayList(_setters.keySet()); }