1 8 9 package org.picocontainer.gems.constraints; 10 11 import org.picocontainer.ComponentAdapter; 12 import org.picocontainer.PicoContainer; 13 import org.picocontainer.PicoIntrospectionException; 14 import org.picocontainer.defaults.AmbiguousComponentResolutionException; 15 import org.picocontainer.defaults.CollectionComponentParameter; 16 17 import java.lang.reflect.Array ; 18 import java.util.Map ; 19 20 26 public abstract class AbstractConstraint extends CollectionComponentParameter implements Constraint { 27 28 31 protected AbstractConstraint() { 32 super(false); 33 } 34 35 public Object resolveInstance(PicoContainer container, ComponentAdapter adapter, Class expectedType) throws PicoIntrospectionException { 36 final Object [] array = (Object []) super.resolveInstance(container, adapter, getArrayType(expectedType)); 37 if (array.length == 1) { 38 return array[0]; 39 } 40 return null; 41 } 42 43 public boolean isResolvable(PicoContainer container, ComponentAdapter adapter, Class expectedType) throws PicoIntrospectionException { 44 return super.isResolvable(container, adapter, getArrayType(expectedType)); 45 } 46 47 public void verify(PicoContainer container, ComponentAdapter adapter, Class expectedType) throws PicoIntrospectionException { 48 super.verify(container, adapter, getArrayType(expectedType)); 49 } 50 51 public abstract boolean evaluate(ComponentAdapter adapter); 52 53 protected Map getMatchingComponentAdapters(PicoContainer container, ComponentAdapter adapter, Class keyType, Class valueType) { 54 final Map map = super.getMatchingComponentAdapters(container, adapter, keyType, valueType); 55 if (map.size() > 1) { 56 throw new AmbiguousComponentResolutionException(valueType, map.keySet().toArray(new Object [map.size()])); 57 } 58 return map; 59 } 60 61 private Class getArrayType(Class expectedType) { 62 return Array.newInstance(expectedType, 0).getClass(); 63 } 64 } 65
| Popular Tags
|