X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fadapters%2FSetterConfiguration.java;h=18fde542b0050ede0ea92acbdde55093ccfc8cda;hb=49ce7cb8387601982d5e6ef186ce206d38f6e3d7;hp=d9c83bb45b5b50249c88648ce16a8eada013f795;hpb=ddd261f331280640c5b53c7128230b629ebcd268;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 d9c83bb4..18fde542 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 @@ -1,12 +1,12 @@ /* - * 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. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,79 +15,54 @@ */ package org.wamblee.system.adapters; -import org.wamblee.collections.CollectionFilter; - -import org.wamblee.conditions.Condition; -import org.wamblee.conditions.FixedCondition; - -import org.wamblee.general.Pair; - -import org.wamblee.reflection.ReflectionUtils; - -import org.wamblee.system.core.DefaultProvidedInterface; -import org.wamblee.system.core.DefaultRequiredInterface; -import org.wamblee.system.core.ProvidedInterface; -import org.wamblee.system.core.RequiredInterface; -import org.wamblee.system.core.Scope; -import org.wamblee.system.core.SystemAssemblyException; - -import java.awt.CompositeContext; - import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; - import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; +import org.wamblee.collections.CollectionFilter; +import org.wamblee.conditions.Condition; +import org.wamblee.reflection.ReflectionUtils; +import org.wamblee.system.core.RequiredInterface; +import org.wamblee.system.core.Scope; +import org.wamblee.system.core.SystemAssemblyException; /** - * Represents the configuration for exposing the setters of a class as - * required interfaces. - * + * Represents the configuration for exposing the setters of a class as required + * interfaces. + * * @author Erik Brakkee */ public class SetterConfiguration { - /** - * DOCUMENT ME! - */ - private Class _class; + private Class clazz; - /** - * DOCUMENT ME! - */ private boolean publicOnly; - /** - * DOCUMENT ME! - */ private Map setters; -/** - * Constructs the setter configuration. By default no setters are added. - * - * @param aClass - * Class which is being configured. - */ + /** + * Constructs the setter configuration. By default no setters are added. + * + * @param aClass + * Class which is being configured. + */ public SetterConfiguration(Class aClass) { - _class = aClass; - publicOnly = true; - setters = new HashMap(); + clazz = aClass; + publicOnly = true; + setters = new HashMap(); } /** * Makes sure that all available setters are used. - * - * @return DOCUMENT ME! + * */ public SetterConfiguration initAllSetters() { setters.clear(); - for (Method method : getAllSetters(_class, publicOnly)) { + for (Method method : getAllSetters(clazz, publicOnly)) { setters.put(method, createParameterValues(method)); } @@ -95,13 +70,12 @@ public class SetterConfiguration { } /** - * Called to set whether non-public setters are also used. By - * default only public setters are used. The currently selected setters - * remain chosen. - * - * @param aIsNonPublic Non public flag. - * - * @return DOCUMENT ME! + * Called to set whether non-public setters are also used. By default only + * public setters are used. The currently selected setters remain chosen. + * + * @param aIsNonPublic + * Non public flag. + * */ public SetterConfiguration setNonPublic(boolean aIsNonPublic) { publicOnly = !aIsNonPublic; @@ -111,7 +85,7 @@ public class SetterConfiguration { /** * Removes all setters. - * + * * @return Reference to the current object to allow call chaining. */ public SetterConfiguration clear() { @@ -122,12 +96,12 @@ public class SetterConfiguration { /** * Removes a setter from the set of methods. - * - * @param aName Name of the setter to remove. - * + * + * @param aName + * Name of the setter to remove. + * * @return Reference to the current object to allow call chaining. - * - * @throws IllegalArgumentException DOCUMENT ME! + * */ public SetterConfiguration remove(String aName) { for (Method method : setters.keySet()) { @@ -144,18 +118,17 @@ public class SetterConfiguration { /** * Removes the method from the set of methods. - * - * @param aMethod Method to remove. - * + * + * @param aMethod + * Method to remove. + * * @return - * - * @throws RuntimeException DOCUMENT ME! - * @throws IllegalArgumentException DOCUMENT ME! + * */ public SetterConfiguration remove(Method aMethod) { - if (!aMethod.getDeclaringClass().isAssignableFrom(_class)) { - throw new RuntimeException("Method " + aMethod - + " not found in class " + _class + " or its superclasses"); + if (!aMethod.getDeclaringClass().isAssignableFrom(clazz)) { + throw new RuntimeException("Method " + aMethod + + " not found in class " + clazz + " or its superclasses"); } for (Method method : setters.keySet()) { @@ -166,23 +139,22 @@ public class SetterConfiguration { } } - throw new IllegalArgumentException("Method '" + aMethod - + "' was not configured. "); + throw new IllegalArgumentException("Method '" + aMethod + + "' was not configured. "); } /** * Adds a given setter name to the setters. - * - * @param aName Name of a setter method. - * + * + * @param aName + * Name of a setter method. + * * @return Reference to the current object to allow call chaining. - * - * @throws IllegalArgumentException DOCUMENT ME! + * */ public SetterConfiguration add(final String aName) { - int oldlen = setters.size(); List methods = new ArrayList(); - CollectionFilter.filter(getAllSetters(_class, publicOnly), methods, + CollectionFilter.filter(getAllSetters(clazz, publicOnly), methods, new Condition() { @Override public boolean matches(Method aObject) { @@ -191,32 +163,34 @@ public class SetterConfiguration { }); if (methods.size() == 0) { - throw new IllegalArgumentException("Method '" + aName - + "' not found in " + _class.getName()); + throw new IllegalArgumentException("Method '" + aName + + "' not found in " + clazz.getName()); } - // TODO is it possible to get more than one setter here in case the subclass overrides - // the baseclass method? + // 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. - * + * 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. + * + * @throws IllegalArgumentException + * In case no setter is found or multiple setters are found. */ public SetterConfiguration addSetter(final Class aType) { List result = new ArrayList(); - CollectionFilter.filter(getAllSetters(_class, publicOnly), result, + CollectionFilter.filter(getAllSetters(clazz, publicOnly), result, new Condition() { @Override public boolean matches(Method aObject) { @@ -227,21 +201,22 @@ public class SetterConfiguration { }); if (result.size() == 0) { - throw new IllegalArgumentException("No setter found in class '" - + _class.getName() + "' that has a setter with argument type '" - + aType.getName() + "'"); + throw new IllegalArgumentException("No setter found in class '" + + clazz.getName() + "' that has a setter with argument type '" + + aType.getName() + "'"); } if (result.size() > 1) { - String setters = ""; + StringBuffer settersString = new StringBuffer(); for (Method method : result) { - setters += (method.getName() + " "); + settersString.append((method.getName() + " ")); } throw new IllegalArgumentException( - "Multiple setters found in class '" + _class.getName() - + " that accept type '" + aType.getName() + "': " + setters); + "Multiple setters found in class '" + clazz.getName() + + " that accept type '" + aType.getName() + "': " + + settersString); } Method method = result.get(0); @@ -252,10 +227,8 @@ public class SetterConfiguration { /** * Gets all setters for the current class. - * - * @param aClass DOCUMENT ME! - * @param aPublicOnly DOCUMENT ME! - * + * + * * @return List of all setters. */ public static List getAllSetters(Class aClass, boolean aPublicOnly) { @@ -263,8 +236,8 @@ public class SetterConfiguration { for (Method method : getAllMethods(aClass)) { if (!aPublicOnly || Modifier.isPublic(method.getModifiers())) { - if (method.getName().startsWith("set") - && (method.getParameterTypes().length == 1)) { + if (method.getName().startsWith("set") && + (method.getParameterTypes().length == 1)) { method.setAccessible(true); result.add(method); } @@ -274,15 +247,8 @@ public class SetterConfiguration { return result; } - /** - * DOCUMENT ME! - * - * @param aMethod DOCUMENT ME! - * - * @return DOCUMENT ME! - */ private static ParameterValues createParameterValues(Method aMethod) { - Class[] paramTypes = aMethod.getParameterTypes(); + Class[] paramTypes = aMethod.getParameterTypes(); String[] paramNames = new String[paramTypes.length]; for (int i = 0; i < paramTypes.length; i++) { @@ -292,20 +258,13 @@ public class SetterConfiguration { return new ParameterValues(paramNames, paramTypes); } - /** - * DOCUMENT ME! - * - * @param aClass DOCUMENT ME! - * - * @return DOCUMENT ME! - */ private static final List getAllMethods(Class aClass) { return ReflectionUtils.getAllMethods(aClass); } /** * Gets the required interfaces based on the configured setteres. - * + * * @return List of required interfaces. */ public List getRequiredInterfaces() { @@ -320,17 +279,17 @@ public class SetterConfiguration { /** * Invokes all configured setters with the appropriate values. - * - * @param aScope Scope within which invocation takes place. - * @param aObject Object on which the invocation takes place. - * - * @throws IllegalArgumentException DOCUMENT ME! - * @throws SystemAssemblyException DOCUMENT ME! + * + * @param aScope + * Scope within which invocation takes place. + * @param aObject + * Object on which the invocation takes place. + * */ public void inject(Scope aScope, Object aObject) { - if (!_class.isInstance(aObject)) { - throw new IllegalArgumentException("Object '" + aObject - + "' is not an instance of " + _class.getName()); + if (!clazz.isInstance(aObject)) { + throw new IllegalArgumentException("Object '" + aObject + + "' is not an instance of " + clazz.getName()); } for (Method method : setters.keySet()) { @@ -339,25 +298,25 @@ public class SetterConfiguration { try { method.invoke(aObject, values.values(aScope)); } catch (IllegalAccessException e) { - throw new SystemAssemblyException("Problem invoking " + method - + " with " + values, e); + throw new SystemAssemblyException("Problem invoking " + method + + " with " + values, e); } catch (InvocationTargetException e) { - throw new SystemAssemblyException("Problem invoking " + method - + " with " + values, e); + throw new SystemAssemblyException("Problem invoking " + method + + " with " + values, e); } } } /** - * Returns the parameter values for allowing detailed configuration - * of how parameter values are set. - * - * @param aMethod Setter name without the "set" prefix with the first - * character converted to lower case. - * + * Returns the parameter values for allowing detailed configuration of how + * parameter values are set. + * + * @param aMethod + * Setter name without the "set" prefix with the first character + * converted to lower case. + * * @return Parameter values. - * - * @throws IllegalArgumentException DOCUMENT ME! + * */ public ParameterValues values(String aMethod) { for (Method method : setters.keySet()) { @@ -366,15 +325,10 @@ public class SetterConfiguration { } } - throw new IllegalArgumentException("No setter method '" + aMethod - + "' found"); + throw new IllegalArgumentException("No setter method '" + aMethod + + "' found"); } - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ public List getSetters() { return new ArrayList(setters.keySet()); }