KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > picocontainer > gems > constraints > AbstractConstraint


1 /*****************************************************************************
2  * Copyright (C) PicoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  *****************************************************************************/

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 JavaDoc;
18 import java.util.Map JavaDoc;
19
20 /**
21  * Base class for parameter constraints.
22  *
23  * @author Nick Sieger
24  * @version 1.1
25  */

26 public abstract class AbstractConstraint extends CollectionComponentParameter implements Constraint {
27
28     /**
29      * Construct an AbstractContraint.
30      */

31     protected AbstractConstraint() {
32         super(false);
33     }
34     
35     public Object JavaDoc resolveInstance(PicoContainer container, ComponentAdapter adapter, Class JavaDoc expectedType) throws PicoIntrospectionException {
36         final Object JavaDoc[] array = (Object JavaDoc[]) 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 JavaDoc expectedType) throws PicoIntrospectionException {
44         return super.isResolvable(container, adapter, getArrayType(expectedType));
45     }
46
47     public void verify(PicoContainer container, ComponentAdapter adapter, Class JavaDoc expectedType) throws PicoIntrospectionException {
48         super.verify(container, adapter, getArrayType(expectedType));
49     }
50     
51     public abstract boolean evaluate(ComponentAdapter adapter);
52
53     protected Map JavaDoc getMatchingComponentAdapters(PicoContainer container, ComponentAdapter adapter, Class JavaDoc keyType, Class JavaDoc valueType) {
54         final Map JavaDoc map = super.getMatchingComponentAdapters(container, adapter, keyType, valueType);
55         if (map.size() > 1) {
56             throw new AmbiguousComponentResolutionException(valueType, map.keySet().toArray(new Object JavaDoc[map.size()]));
57         }
58         return map;
59     }
60     
61     private Class JavaDoc getArrayType(Class JavaDoc expectedType) {
62         return Array.newInstance(expectedType, 0).getClass();
63     }
64 }
65
Popular Tags