1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.orchestra.lib.jsf;
20
21 import org.aopalliance.intercept.MethodInvocation;
22 import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
23
24 import javax.faces.FacesException;
25 import javax.faces.application.Application;
26 import javax.faces.application.ApplicationFactory;
27 import javax.faces.convert.Converter;
28
29 /***
30 * Decorate the orignial application and provide an Orchestra enhanced version.
31 *
32 * @see OrchestraApplication
33 */
34 public class OrchestraApplicationFactory extends ApplicationFactory
35 {
36 private final ApplicationFactory original;
37
38 private Application application;
39
40 public OrchestraApplicationFactory(ApplicationFactory original)
41 {
42 this.original = original;
43 }
44
45 public Application getApplication()
46 {
47 if (application == null)
48 {
49 application = new OrchestraApplication(original.getApplication());
50 }
51
52 return application;
53 }
54
55 public void setApplication(Application application)
56 {
57 original.setApplication(application);
58 }
59
60 public Converter createConverter(String converterId, MethodInvocation methodInvocation) throws Throwable
61 {
62 try
63 {
64 return (Converter) methodInvocation.proceed();
65 }
66 catch (FacesException e)
67 {
68
69 Converter converter = (Converter) FrameworkAdapter.getCurrentInstance().getBean(converterId);
70 if (converter == null)
71 {
72
73 throw e;
74 }
75
76 return new SerializableConverter(converterId, converter);
77 }
78 }
79 }