KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > alfresco > web > ui > repo > tag > SystemErrorTag


1 /*
2  * Copyright (C) 2005 Alfresco, Inc.
3  *
4  * Licensed under the Mozilla Public License version 1.1
5  * with a permitted attribution clause. You may obtain a
6  * copy of the License at
7  *
8  * http://www.alfresco.org/legal/license.txt
9  *
10  * Unless required by applicable law or agreed to in writing,
11  * software distributed under the License is distributed on an
12  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific
14  * language governing permissions and limitations under the
15  * License.
16  */

17 package org.alfresco.web.ui.repo.tag;
18
19 import java.io.IOException JavaDoc;
20 import java.io.Writer JavaDoc;
21 import java.util.ResourceBundle JavaDoc;
22
23 import javax.portlet.PortletSession;
24 import javax.portlet.PortletURL;
25 import javax.portlet.RenderRequest;
26 import javax.portlet.RenderResponse;
27 import javax.servlet.http.HttpServletRequest JavaDoc;
28 import javax.servlet.jsp.JspException JavaDoc;
29 import javax.servlet.jsp.tagext.TagSupport JavaDoc;
30
31 import org.alfresco.web.app.Application;
32 import org.alfresco.web.app.servlet.ExternalAccessServlet;
33 import org.alfresco.web.bean.ErrorBean;
34
35 /**
36  * A non-JSF tag library that displays the currently stored system error
37  *
38  * @author gavinc
39  */

40 public class SystemErrorTag extends TagSupport JavaDoc
41 {
42    private static final String JavaDoc MSG_RETURN_TO_APP = "return_to_application";
43    private static final String JavaDoc MSG_HIDE_DETAILS = "hide_details";
44    private static final String JavaDoc MSG_SHOW_DETAILS = "show_details";
45    private static final String JavaDoc MSG_LOGOUT = "logout";
46    
47    private String JavaDoc styleClass;
48    private String JavaDoc detailsStyleClass;
49    private boolean showDetails = false;
50    
51    
52    /**
53     * @return Returns the showDetails.
54     */

55    public boolean isShowDetails()
56    {
57       return showDetails;
58    }
59    
60    /**
61     * @param showDetails The showDetails to set.
62     */

63    public void setShowDetails(boolean showDetails)
64    {
65       this.showDetails = showDetails;
66    }
67    
68    /**
69     * @return Returns the styleClass.
70     */

71    public String JavaDoc getStyleClass()
72    {
73       return styleClass;
74    }
75    
76    /**
77     * @param styleClass The styleClass to set.
78     */

79    public void setStyleClass(String JavaDoc styleClass)
80    {
81       this.styleClass = styleClass;
82    }
83    
84    /**
85     * @return Returns the detailsStyleClass.
86     */

87    public String JavaDoc getDetailsStyleClass()
88    {
89       return detailsStyleClass;
90    }
91
92    /**
93     * @param detailsStyleClass The detailsStyleClass to set.
94     */

95    public void setDetailsStyleClass(String JavaDoc detailsStyleClass)
96    {
97       this.detailsStyleClass = detailsStyleClass;
98    }
99
100    /**
101     * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
102     */

103    public int doStartTag() throws JspException JavaDoc
104    {
105       String JavaDoc errorMessage = "No error currently stored";
106       String JavaDoc errorDetails = "No details";
107       
108       // get the error details from the bean, this may be in a portlet
109
// session or a normal servlet session.
110
ErrorBean errorBean = null;
111       RenderRequest renderReq = (RenderRequest)pageContext.getRequest().
112                                    getAttribute("javax.portlet.request");
113       if (renderReq != null)
114       {
115          PortletSession session = renderReq.getPortletSession();
116          errorBean = (ErrorBean)session.getAttribute(ErrorBean.ERROR_BEAN_NAME);
117       }
118       else
119       {
120          errorBean = (ErrorBean)pageContext.getSession().
121                         getAttribute(ErrorBean.ERROR_BEAN_NAME);
122       }
123
124       if (errorBean != null)
125       {
126          errorMessage = errorBean.getLastErrorMessage();
127          errorDetails = errorBean.getStackTrace();
128       }
129       
130       try
131       {
132          Writer JavaDoc out = pageContext.getOut();
133          
134          ResourceBundle JavaDoc bundle = Application.getBundle(pageContext.getSession());
135          
136          out.write("<div");
137          
138          if (this.styleClass != null)
139          {
140             out.write(" class='");
141             out.write(this.styleClass);
142             out.write("'");
143          }
144          
145          out.write(">");
146          out.write(errorMessage);
147          out.write("</div>");
148          
149          // work out initial state
150
boolean hidden = !this.showDetails;
151          String JavaDoc display = "inline";
152          String JavaDoc toggleTitle = "Hide";
153          if (hidden)
154          {
155             display = "none";
156             toggleTitle = "Show";
157          }
158          
159          // output the script to handle toggling of details
160
out.write("<script language='JavaScript'>\n");
161          out.write("var hidden = ");
162          out.write(Boolean.toString(hidden));
163          out.write(";\n");
164          out.write("function toggleDetails() {\n");
165          out.write("if (hidden) {\n");
166          out.write("document.getElementById('detailsTitle').innerHTML = '");
167          out.write(bundle.getString(MSG_HIDE_DETAILS));
168          out.write("<br/><br/>';\n");
169          out.write("document.getElementById('details').style.display = 'inline';\n");
170          out.write("hidden = false;\n");
171          out.write("} else {\n");
172          out.write("document.getElementById('detailsTitle').innerHTML = '");
173          out.write(bundle.getString(MSG_SHOW_DETAILS));
174          out.write("';\n");
175          out.write("document.getElementById('details').style.display = 'none';\n");
176          out.write("hidden = true;\n");
177          out.write("} } </script>\n");
178          
179          // output the initial toggle state
180
out.write("<br/>");
181          out.write("<a id='detailsTitle' HREF='javascript:toggleDetails();'>");
182          out.write(toggleTitle);
183          out.write(" Details</a>");
184          
185          out.write("<div style='padding-top:5px;display:");
186          out.write(display);
187          out.write("' id='details'");
188          
189          if (this.detailsStyleClass != null)
190          {
191             out.write(" class='");
192             out.write(this.detailsStyleClass);
193             out.write("'");
194          }
195          
196          out.write(">");
197          out.write(errorDetails);
198          out.write("</div>");
199          
200          // output a link to return to the application
201
out.write("\n<div style='padding-top:16px;'><a HREF='");
202       
203          if (Application.inPortalServer())
204          {
205             RenderResponse renderResp = (RenderResponse)pageContext.getRequest().getAttribute(
206                   "javax.portlet.response");
207             if (renderResp == null)
208             {
209                throw new IllegalStateException JavaDoc("RenderResponse object is null");
210             }
211             
212             PortletURL url = renderResp.createRenderURL();
213             // NOTE: we don't have to specify the page for the portlet, just the VIEW_ID parameter
214
// being present will cause the current JSF view to be re-displayed
215
url.setParameter("org.apache.myfaces.portlet.MyFacesGenericPortlet.VIEW_ID", "current-view");
216             out.write(url.toString());
217          }
218          else
219          {
220             String JavaDoc returnPage = null;
221             
222             if (errorBean != null)
223             {
224                returnPage = errorBean.getReturnPage();
225             }
226             
227             if (returnPage == null)
228             {
229                out.write("javascript:history.back();");
230             }
231             else
232             {
233                out.write(returnPage);
234             }
235          }
236          
237          out.write("'>");
238          out.write(bundle.getString(MSG_RETURN_TO_APP));
239          out.write("</a></div>");
240                    
241          // use External Access Servlet to generate a URL to relogin again
242
// this can be used by the user if the app has got into a total mess
243
if (Application.inPortalServer() == false)
244          {
245             out.write("\n<div style='padding-top:16px;'><a HREF='");
246             out.write(((HttpServletRequest JavaDoc)pageContext.getRequest()).getContextPath());
247             out.write(ExternalAccessServlet.generateExternalURL("logout", null));
248             out.write("'>");
249             out.write(bundle.getString(MSG_LOGOUT));
250             out.write("</a></div>");
251          }
252       }
253       catch (IOException JavaDoc ioe)
254       {
255          throw new JspException JavaDoc(ioe);
256       }
257       
258       return SKIP_BODY;
259    }
260    
261    /**
262     * @see javax.servlet.jsp.tagext.TagSupport#release()
263     */

264    public void release()
265    {
266       this.styleClass = null;
267       
268       super.release();
269    }
270 }
271
Popular Tags