1 31 32 package org.opencms.jsp.util; 33 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.i18n.CmsAcceptLanguageHeaderParser; 36 import org.opencms.i18n.CmsLocaleManager; 37 import org.opencms.i18n.CmsMessages; 38 import org.opencms.jsp.CmsJspActionElement; 39 import org.opencms.main.OpenCms; 40 import org.opencms.security.CmsRole; 41 import org.opencms.util.CmsStringUtil; 42 import org.opencms.workplace.CmsWorkplace; 43 44 import java.util.Date ; 45 import java.util.HashMap ; 46 import java.util.List ; 47 import java.util.Locale ; 48 import java.util.Map ; 49 50 import javax.servlet.http.HttpServletRequest ; 51 import javax.servlet.http.HttpServletResponse ; 52 import javax.servlet.jsp.JspException ; 53 import javax.servlet.jsp.PageContext ; 54 55 66 public class CmsJspStatusBean extends CmsJspActionElement { 67 68 69 public static final String ERROR_MESSAGE = "javax.servlet.error.message"; 70 71 72 public static final String ERROR_REQUEST_URI = "javax.servlet.error.request_uri"; 73 74 75 public static final String ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name"; 76 77 78 public static final String ERROR_STATUS_CODE = "javax.servlet.error.status_code"; 79 80 81 public static final String UNKKNOWN_STATUS_CODE = "unknown"; 82 83 84 public static final String VFS_FOLDER_HANDLER = CmsWorkplace.VFS_PATH_SYSTEM + "handler/"; 85 86 87 private String m_errorMessage; 88 89 90 private Throwable m_exception; 91 92 93 private Locale m_locale; 94 95 96 private Object [] m_localizeParameters; 97 98 99 private CmsMessages m_messages; 100 101 102 private String m_requestUri; 103 104 105 private String m_servletName; 106 107 108 private String m_siteRoot; 109 110 111 private Integer m_statusCode; 112 113 114 private String m_statusCodeMessage; 115 116 117 private String m_templateUri; 118 119 122 public CmsJspStatusBean() { 123 124 super(); 125 } 126 127 134 public CmsJspStatusBean(PageContext context, HttpServletRequest req, HttpServletResponse res) { 135 136 super(context, req, res); 137 initMembers(req, null); 138 } 139 140 148 public CmsJspStatusBean(PageContext context, HttpServletRequest req, HttpServletResponse res, Throwable t) { 149 150 super(context, req, res); 151 initMembers(req, t); 152 } 153 154 159 public String getErrorMessage() { 160 161 return m_errorMessage; 162 } 163 164 169 public Throwable getException() { 170 171 return m_exception; 172 } 173 174 179 public Locale getLocale() { 180 181 return m_locale; 182 } 183 184 196 public String getPageContent(String element) { 197 198 String contentFolder = property(CmsPropertyDefinition.PROPERTY_TEMPLATE_ELEMENTS, "search", ""); 200 if (CmsStringUtil.isEmpty(contentFolder)) { 201 contentFolder = VFS_FOLDER_HANDLER + "contents/"; 202 } 203 204 String fileName = "content" + getStatusCodeMessage() + ".html"; 206 if (!getCmsObject().existsResource(contentFolder + fileName)) { 207 fileName = "content" + UNKKNOWN_STATUS_CODE + ".html"; 209 } 210 211 return getContent(contentFolder + fileName, element, getLocale()); 213 } 214 215 220 public String getRequestResourceName() { 221 222 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(getRequestUri()) 223 && getRequestUri().startsWith(OpenCms.getSystemInfo().getOpenCmsContext())) { 224 return getRequestUri().substring(OpenCms.getSystemInfo().getOpenCmsContext().length()); 225 } 226 return getRequestUri(); 227 } 228 229 234 public String getRequestUri() { 235 236 return m_requestUri; 237 } 238 239 246 public String getResourceUri(String resourceName) { 247 248 return CmsWorkplace.getResourceUri(resourceName); 249 } 250 251 256 public String getServletName() { 257 258 return m_servletName; 259 } 260 261 266 public String getSiteRoot() { 267 268 return m_siteRoot; 269 } 270 271 276 public Integer getStatusCode() { 277 278 return m_statusCode; 279 } 280 281 286 public String getStatusCodeMessage() { 287 288 return m_statusCodeMessage; 289 } 290 291 296 public String getTemplateUri() { 297 298 if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_templateUri)) { 299 m_templateUri = "/"; 300 } 301 return m_templateUri; 302 } 303 304 312 public void includeTemplatePart(String target, String element) throws JspException { 313 314 includeTemplatePart(target, element, null); 315 } 316 317 326 public void includeTemplatePart(String target, String element, Map parameterMap) throws JspException { 327 328 String currentSiteRoot = getRequestContext().getSiteRoot(); 330 String currentUri = getRequestContext().getUri(); 331 332 if (parameterMap == null) { 334 parameterMap = new HashMap (1); 335 } 336 parameterMap.put(CmsLocaleManager.PARAMETER_LOCALE, getLocale().toString()); 337 338 try { 339 getRequestContext().setSiteRoot(getSiteRoot()); 341 getRequestContext().setUri(getTemplateUri()); 342 include(target, element, parameterMap); 344 } finally { 345 getRequestContext().setSiteRoot(currentSiteRoot); 347 getRequestContext().setUri(currentUri); 348 } 349 } 350 351 369 public String key(String keyName) { 370 371 return key(keyName, null); 372 } 373 374 383 public String key(String keyName, String defaultKeyName) { 384 385 String value = getMessages().key(keyName, getLocalizeParameters()); 386 if (value.startsWith(CmsMessages.UNKNOWN_KEY_EXTENSION) && CmsStringUtil.isNotEmpty(defaultKeyName)) { 387 value = getMessages().key(defaultKeyName, getLocalizeParameters()); 388 } 389 return CmsStringUtil.escapeHtml(value); 390 } 391 392 401 public String keyStatus(String keyName) { 402 403 keyName += "_"; 404 return key(keyName + getStatusCodeMessage(), keyName + UNKKNOWN_STATUS_CODE); 405 } 406 407 412 public void setTemplateUri(String templateUri) { 413 414 m_templateUri = templateUri; 415 } 416 417 422 public boolean showException() { 423 424 return getCmsObject().hasRole(CmsRole.DEVELOPER); 425 } 426 427 434 protected Object [] getLocalizeParameters() { 435 436 if (m_localizeParameters == null) { 437 m_localizeParameters = new Object [] { 438 getStatusCodeMessage(), 439 getRequestUri(), 440 getErrorMessage(), 441 getServletName(), 442 new Date (getRequestContext().getRequestTime())}; 443 } 444 return m_localizeParameters; 445 } 446 447 452 protected CmsMessages getMessages() { 453 454 if (m_messages == null) { 455 m_messages = new CmsMessages(Messages.get().getBundleName(), getLocale().toString()); 457 } 458 return m_messages; 459 } 460 461 467 protected void initMembers(HttpServletRequest req, Throwable t) { 468 469 m_servletName = (String )req.getAttribute(ERROR_SERVLET_NAME); 471 m_errorMessage = (String )req.getAttribute(ERROR_MESSAGE); 472 m_requestUri = (String )req.getAttribute(ERROR_REQUEST_URI); 473 m_statusCode = (Integer )req.getAttribute(ERROR_STATUS_CODE); 474 475 if (m_statusCode == null || m_requestUri == null) { 476 478 480 484 String jkUri = (String )req.getAttribute("REDIRECT_URL"); 485 String jkStatusCode = (String )req.getAttribute("REDIRECT_STATUS"); 486 String jkServletName = (String )req.getAttribute("REDIRECT_SERVLET_NAME"); 487 try { 488 if (!"none".equals(jkStatusCode) && !"none".equals(jkUri)) { 489 m_servletName = jkServletName; 490 m_requestUri = jkUri; 491 m_statusCode = new Integer (jkStatusCode); 492 } 493 } catch (NullPointerException e) { 494 } catch (NumberFormatException e) { 496 } 498 } 499 500 if (m_statusCode != null) { 502 m_statusCodeMessage = String.valueOf(m_statusCode.intValue()); 503 } else { 504 m_statusCodeMessage = UNKKNOWN_STATUS_CODE; 505 } 506 507 m_exception = t; 508 509 CmsAcceptLanguageHeaderParser parser = new CmsAcceptLanguageHeaderParser( 511 req, 512 OpenCms.getWorkplaceManager().getDefaultLocale()); 513 List acceptedLocales = parser.getAcceptedLocales(); 514 List workplaceLocales = OpenCms.getWorkplaceManager().getLocales(); 515 m_locale = OpenCms.getLocaleManager().getFirstMatchingLocale(acceptedLocales, workplaceLocales); 516 if (m_locale == null) { 517 m_locale = OpenCms.getWorkplaceManager().getDefaultLocale(); 519 } 520 521 m_siteRoot = OpenCms.getSiteManager().matchRequest(req).getSiteRoot(); 523 } 524 525 530 protected void setErrorMessage(String errorMessage) { 531 532 m_errorMessage = errorMessage; 533 } 534 535 540 protected void setException(Throwable exception) { 541 542 m_exception = exception; 543 } 544 545 550 protected void setLocale(Locale locale) { 551 552 m_locale = locale; 553 } 554 555 560 protected void setLocalizeParameters(Object [] localizeParameters) { 561 562 m_localizeParameters = localizeParameters; 563 } 564 565 570 protected void setMessages(CmsMessages messages) { 571 572 m_messages = messages; 573 } 574 575 580 protected void setRequestUri(String requestUri) { 581 582 m_requestUri = requestUri; 583 } 584 585 590 protected void setServletName(String servletName) { 591 592 m_servletName = servletName; 593 } 594 595 600 protected void setSiteRoot(String siteRoot) { 601 602 m_siteRoot = siteRoot; 603 } 604 605 610 protected void setStatusCode(Integer statusCode) { 611 612 m_statusCode = statusCode; 613 } 614 615 620 protected void setStatusCodeMessage(String statusCodeMessage) { 621 622 m_statusCodeMessage = statusCodeMessage; 623 } 624 } | Popular Tags |