1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.application;
20
21 import java.util.logging.Level;
22 import java.util.logging.Logger;
23
24 import javax.faces.application.Application;
25 import javax.faces.application.ApplicationFactory;
26 import javax.faces.context.ExternalContext;
27 import javax.faces.context.FacesContext;
28
29
30
31
32
33
34 public class ApplicationFactoryImpl extends ApplicationFactory
35 {
36
37 private static final Logger log = Logger.getLogger(ApplicationFactoryImpl.class.getName());
38
39
40
41
42
43
44 private Application _application;
45
46 private boolean _myfacesInstanceAddedToApplicationMap = false;
47
48 public ApplicationFactoryImpl()
49 {
50 createAndLogNewApplication();
51 }
52
53 private void createAndLogNewApplication()
54 {
55 _application = new ApplicationImpl();
56 putApplicationOnMap();
57 if (log.isLoggable(Level.FINEST))
58 {
59 log.finest("New ApplicationFactory instance created");
60 }
61 }
62
63 public void purgeApplication()
64 {
65 createAndLogNewApplication();
66 }
67
68 @Override
69 public Application getApplication()
70 {
71
72
73
74 if (_application != null && !_myfacesInstanceAddedToApplicationMap)
75 {
76 putApplicationOnMap();
77 }
78
79 return _application;
80 }
81
82 @Override
83 public void setApplication(Application application)
84 {
85 if (application == null)
86 {
87 throw new NullPointerException("Cannot set a null application in the ApplicationFactory");
88 }
89 _application = application;
90 putApplicationOnMap();
91 }
92
93 private void putApplicationOnMap()
94 {
95 FacesContext facesContext = FacesContext.getCurrentInstance();
96 if (facesContext != null)
97 {
98 ExternalContext externalContext = facesContext.getExternalContext();
99 if (externalContext != null)
100 {
101 externalContext.
102 getApplicationMap().put("org.apache.myfaces.application.ApplicationImpl", _application);
103 _myfacesInstanceAddedToApplicationMap = true;
104 }
105 }
106 }
107
108 }