1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.spi;
20
21 import java.security.AccessController;
22 import java.security.PrivilegedActionException;
23
24 import javax.faces.FacesException;
25 import javax.faces.context.ExternalContext;
26
27 import org.apache.myfaces.spi.impl.DefaultWebConfigProviderFactory;
28 import org.apache.myfaces.spi.impl.SpiUtils;
29
30
31
32
33
34
35
36
37
38 public abstract class WebConfigProviderFactory
39 {
40
41 protected static final String FACTORY_DEFAULT = DefaultWebConfigProviderFactory.class.getName();
42
43 private static final String FACTORY_KEY = WebConfigProviderFactory.class.getName();
44
45 public static WebConfigProviderFactory getWebConfigProviderFactory(ExternalContext ctx)
46 {
47 WebConfigProviderFactory factory = (WebConfigProviderFactory) ctx.getApplicationMap().get(FACTORY_KEY);
48 if (factory != null)
49 {
50
51 return factory;
52 }
53
54
55 try
56 {
57
58 if (System.getSecurityManager() != null)
59 {
60 final ExternalContext ectx = ctx;
61 factory = (WebConfigProviderFactory) AccessController.doPrivileged(
62 new java.security.PrivilegedExceptionAction<Object>()
63 {
64 public Object run() throws PrivilegedActionException
65 {
66
67 return SpiUtils.build(ectx,
68 WebConfigProviderFactory.class,
69 FACTORY_DEFAULT);
70 }
71 });
72 }
73 else
74 {
75 factory = (WebConfigProviderFactory)
76 SpiUtils.build(ctx, WebConfigProviderFactory.class, FACTORY_DEFAULT);
77 }
78 }
79 catch (PrivilegedActionException pae)
80 {
81 throw new FacesException(pae);
82 }
83
84 if (factory != null)
85 {
86
87 setWebConfigProviderFactory(ctx, factory);
88 }
89
90 return factory;
91 }
92
93 public static void setWebConfigProviderFactory(ExternalContext ctx, WebConfigProviderFactory factory)
94 {
95 ctx.getApplicationMap().put(FACTORY_KEY, factory);
96 }
97
98 public abstract WebConfigProvider getWebConfigProvider(ExternalContext externalContext);
99
100 }