1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.portals.bridges.jsf;
17
18 import java.io.IOException;
19 import java.util.Locale;
20
21 import javax.faces.FacesException;
22 import javax.faces.application.ViewHandler;
23 import javax.faces.component.UIViewRoot;
24 import javax.faces.context.FacesContext;
25
26 import javax.portlet.PortletURL;
27 import javax.portlet.RenderResponse;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31
32 /***
33 * <p>
34 * View handler for JSF portlet bridge.
35 * </p>
36 *
37 * @author <a href="mailto:dlestrat@apache.org">David Le Strat </a>
38 */
39 public class PortletViewHandlerImpl extends ViewHandler
40 {
41 /*** The Log instance for this class. */
42 private static final Log log = LogFactory.getLog(PortletViewHandlerImpl.class);
43
44 /*** The ViewHandler. */
45 private ViewHandler handler;
46
47 /***
48 * <p>
49 * Construct a new <code>ViewHandler</code> instance that delegates
50 * non-portlet-specific behavior to the specified implementation.
51 *
52 * @param handler The <code>ViewHandler</code> instance
53 */
54 public PortletViewHandlerImpl(ViewHandler handler)
55 {
56 if (log.isInfoEnabled())
57 {
58 log.info("Delegating to " + handler + "");
59 }
60 this.handler = handler;
61 }
62
63 /***
64 * @see javax.faces.application.ViewHandler#calculateLocale(javax.faces.context.FacesContext)
65 */
66 public Locale calculateLocale(FacesContext facesContext)
67 {
68 return handler.calculateLocale(facesContext);
69 }
70
71 /***
72 * @see javax.faces.application.ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)
73 */
74 public String calculateRenderKitId(FacesContext facesContext)
75 {
76 return handler.calculateRenderKitId(facesContext);
77 }
78
79 /***
80 * @see javax.faces.application.ViewHandler#createView(javax.faces.context.FacesContext,
81 * java.lang.String)
82 */
83 public UIViewRoot createView(FacesContext facesContext, String viewId)
84 {
85 UIViewRoot root = handler.createView(facesContext, viewId);
86 if (root != null)
87 {
88 facesContext.setViewRoot(root);
89 }
90
91 return root;
92 }
93
94 /***
95 * @see javax.faces.application.ViewHandler#getActionURL(javax.faces.context.FacesContext,
96 * java.lang.String)
97 */
98 public String getActionURL(FacesContext facesContext, String viewId)
99 {
100 Object response = facesContext.getExternalContext().getResponse();
101 if (!(response instanceof RenderResponse))
102 {
103 throw new IllegalStateException("Must be a RenderResponse");
104 }
105 RenderResponse renderResponse = (RenderResponse) response;
106 PortletURL actionURL = renderResponse.createActionURL();
107 return (actionURL.toString());
108 }
109
110 /***
111 * @see javax.faces.application.ViewHandler#getResourceURL(javax.faces.context.FacesContext,
112 * java.lang.String)
113 */
114 public String getResourceURL(FacesContext facesContext, String path)
115 {
116 return handler.getResourceURL(facesContext, path);
117 }
118
119 /***
120 * @see javax.faces.application.ViewHandler#renderView(javax.faces.context.FacesContext,
121 * javax.faces.component.UIViewRoot)
122 */
123 public void renderView(FacesContext facesContext, UIViewRoot viewToRender) throws IOException, FacesException
124 {
125 handler.renderView(facesContext, viewToRender);
126 }
127
128 /***
129 * @see javax.faces.application.ViewHandler#restoreView(javax.faces.context.FacesContext,
130 * java.lang.String)
131 */
132 public UIViewRoot restoreView(FacesContext facesContext, String viewId)
133 {
134 UIViewRoot root = handler.restoreView(facesContext, viewId);
135 if (root != null)
136 {
137 facesContext.setViewRoot(root);
138 }
139 return root;
140 }
141
142 /***
143 * @see javax.faces.application.ViewHandler#writeState(javax.faces.context.FacesContext)
144 */
145 public void writeState(FacesContext facesContext) throws IOException
146 {
147 handler.writeState(facesContext);
148 }
149
150 }