1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.spi.impl;
20
21 import java.util.List;
22 import java.util.logging.Level;
23 import java.util.logging.Logger;
24
25 import javax.faces.context.ExternalContext;
26
27 import org.apache.myfaces.shared.util.ClassUtils;
28 import org.apache.myfaces.spi.ServiceProviderFinderFactory;
29
30
31
32
33
34
35
36 public final class SpiUtils
37 {
38
39 public static Object build(ExternalContext ectx, Class spiClass, String defaultImpl)
40 {
41 List<String> classList = ServiceProviderFinderFactory.getServiceProviderFinder(ectx).
42 getServiceProviderList(spiClass.getName());
43
44 if (classList != null && !classList.isEmpty())
45 {
46 if (classList.size() > 1)
47 {
48 getLogger().log(Level.WARNING, "More than one SPI interface for "+spiClass.getName()+
49 " found :" + classList.toString() + ". Setting up the first one found.");
50 }
51 return ClassUtils.newInstance(classList.get(0));
52 }
53 return ClassUtils.newInstance(defaultImpl);
54 }
55
56 private static Logger getLogger()
57 {
58 return Logger.getLogger(SpiUtils.class.getName());
59 }
60 }