package vroom.common.utilities.params; /** * <code>ClassParameterKey</code> is an extension of {@link ParameterKey} dedicated to the parameters which values are * of type {@link Class} * <p> * Creation date: Apr 15, 2010 - 2:14:38 PM * * @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a * href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a * href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a> * @version 1.0 * @param <T> * the type of a supertype against which parameter values will be checked */ @SuppressWarnings("rawtypes") public class ClassParameterKey<T> extends ParameterKey<Class> { private final Class<T> mSupertype; /** * Creates a new <code>ClassParameterKey</code> * * @param name * a name for this key * @param supertype * a supertype of the classes that can be set as values for this parameter * @param defaultValue * a default value for this parameter * @see ParameterKey#ParameterKey(String, Class, Object) */ public ClassParameterKey(String name, Class<T> supertype, Class defaultValue) { super(name, Class.class, defaultValue); if (supertype == null) { throw new IllegalArgumentException("Argument supertype cannot be null"); } mSupertype = supertype; } /** * Creates a new <code>ClassParameterKey</code> * * @param name * @param supertype * @see #ClassParameterKey(String, Class, Class) */ public ClassParameterKey(String name, Class<T> supertype) { this(name, supertype, null); } @Override public boolean isValueValid(Object value) { return super.isValueValid(value) && (value == null || mSupertype.isAssignableFrom((Class) value)); } /* (non-Javadoc) * @see vroom.common.utilities.params.ParameterKey#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { return obj instanceof ClassParameterKey && mSupertype == ((ClassParameterKey) obj).mSupertype && super.equals(obj); } }