1 17 package org.alfresco.web.ui.repo.tag; 18 19 import java.io.IOException ; 20 import java.io.Writer ; 21 import java.util.ResourceBundle ; 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 ; 28 import javax.servlet.jsp.JspException ; 29 import javax.servlet.jsp.tagext.TagSupport ; 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 40 public class SystemErrorTag extends TagSupport 41 { 42 private static final String MSG_RETURN_TO_APP = "return_to_application"; 43 private static final String MSG_HIDE_DETAILS = "hide_details"; 44 private static final String MSG_SHOW_DETAILS = "show_details"; 45 private static final String MSG_LOGOUT = "logout"; 46 47 private String styleClass; 48 private String detailsStyleClass; 49 private boolean showDetails = false; 50 51 52 55 public boolean isShowDetails() 56 { 57 return showDetails; 58 } 59 60 63 public void setShowDetails(boolean showDetails) 64 { 65 this.showDetails = showDetails; 66 } 67 68 71 public String getStyleClass() 72 { 73 return styleClass; 74 } 75 76 79 public void setStyleClass(String styleClass) 80 { 81 this.styleClass = styleClass; 82 } 83 84 87 public String getDetailsStyleClass() 88 { 89 return detailsStyleClass; 90 } 91 92 95 public void setDetailsStyleClass(String detailsStyleClass) 96 { 97 this.detailsStyleClass = detailsStyleClass; 98 } 99 100 103 public int doStartTag() throws JspException 104 { 105 String errorMessage = "No error currently stored"; 106 String errorDetails = "No details"; 107 108 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 out = pageContext.getOut(); 133 134 ResourceBundle 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 boolean hidden = !this.showDetails; 151 String display = "inline"; 152 String toggleTitle = "Hide"; 153 if (hidden) 154 { 155 display = "none"; 156 toggleTitle = "Show"; 157 } 158 159 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 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 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 ("RenderResponse object is null"); 210 } 211 212 PortletURL url = renderResp.createRenderURL(); 213 url.setParameter("org.apache.myfaces.portlet.MyFacesGenericPortlet.VIEW_ID", "current-view"); 216 out.write(url.toString()); 217 } 218 else 219 { 220 String 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 if (Application.inPortalServer() == false) 244 { 245 out.write("\n<div style='padding-top:16px;'><a HREF='"); 246 out.write(((HttpServletRequest )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 ioe) 254 { 255 throw new JspException (ioe); 256 } 257 258 return SKIP_BODY; 259 } 260 261 264 public void release() 265 { 266 this.styleClass = null; 267 268 super.release(); 269 } 270 } 271 | Popular Tags |