View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.spi.impl;
20  
21  import javax.faces.context.ExternalContext;
22  import org.apache.myfaces.shared.util.ClassUtils;
23  import org.apache.myfaces.spi.InjectionProvider;
24  import org.apache.myfaces.spi.InjectionProviderException;
25  import org.apache.myfaces.util.ExternalSpecifications;
26  
27  /**
28   * Delegation pattern to avoid direct instantiation
29   */
30  public class CDIAnnotationDelegateInjectionProvider extends InjectionProvider
31  {
32      private InjectionProvider delegate;
33      private final boolean available;
34      
35      public CDIAnnotationDelegateInjectionProvider(ExternalContext externalContext)
36      {
37          if (ExternalSpecifications.isCDIAvailable(externalContext))
38          {
39              try
40              {
41                  Class clazz = ClassUtils.simpleClassForName(
42                      "org.apache.myfaces.cdi.impl.CDIAnnotationInjectionProvider");
43                  delegate = (InjectionProvider) clazz.getConstructor(
44                      ExternalContext.class).newInstance(externalContext);
45              }
46              catch(Exception e)
47              {
48                  //Ignore
49              }
50          }
51          available = (delegate != null);
52      }
53  
54      @Override
55      public Object inject(Object instance) throws InjectionProviderException
56      {
57          if (available)
58          {
59              return delegate.inject(instance);
60          }
61          return null;
62      }
63  
64      @Override
65      public void postConstruct(Object instance, Object creationMetaData) throws InjectionProviderException
66      {
67          if (available)
68          {
69              delegate.postConstruct(instance, creationMetaData);
70          }
71      }
72  
73      @Override
74      public void preDestroy(Object instance, Object creationMetaData) throws InjectionProviderException
75      {
76          if (available)
77          {
78              delegate.preDestroy(instance, creationMetaData);
79          }
80      }
81  
82      @Override
83      public boolean isAvailable()
84      {
85          return available;
86      }
87  }