cdi project in initial revision
[utils] / support / cdi / src / main / java / org / wamblee / cdi / CdiInjector.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.cdi;
17
18 import javax.enterprise.context.spi.CreationalContext;
19 import javax.enterprise.inject.spi.AnnotatedType;
20 import javax.enterprise.inject.spi.BeanManager;
21 import javax.enterprise.inject.spi.InjectionTarget;
22
23 /**
24  * Class encapsulating bean injection into a specific non-contextual object of a
25  * given class.
26  * 
27  * @author Erik Brakkee
28  */
29 public class CdiInjector implements Injector {
30     private Class clazz;
31     private InjectionTarget target;
32     private CreationalContext ctx;
33
34     /**
35      * Constructs the injector.
36      * 
37      * @param aMgr
38      *            Bean manager.
39      * @param aClass
40      *            Class to analyse for injection.
41      */
42     public CdiInjector(BeanManager aMgr, Class<?> aClass) {
43         clazz = aClass;
44         AnnotatedType<?> type = aMgr.createAnnotatedType(aClass);
45         target = aMgr.createInjectionTarget(type);
46         ctx = aMgr.createCreationalContext(null);
47     }
48
49     /*
50      * (non-Javadoc)
51      * 
52      * @see org.wamblee.cdi.Injector#inject(java.lang.Object)
53      */
54     public void inject(Object aComponent) {
55         if (aComponent != null) {
56             if (!clazz.isInstance(aComponent)) {
57                 throw new RuntimeException("Object '" + aComponent +
58                     "' is of type " + aComponent.getClass().getName() +
59                     " but expected " + clazz.getName());
60             }
61             target.inject(aComponent, ctx);
62         }
63     }
64
65 }