You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by cd...@apache.org on 2006/12/03 17:38:34 UTC
svn commit: r481802 -
/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletUiMessageTag.java
Author: cdoremus
Date: Sun Dec 3 08:38:34 2006
New Revision: 481802
URL: http://svn.apache.org/viewvc?view=rev&rev=481802
Log:
New addition to support PLUTO-215.
Added:
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletUiMessageTag.java
Added: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletUiMessageTag.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletUiMessageTag.java?view=auto&rev=481802
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletUiMessageTag.java (added)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletUiMessageTag.java Sun Dec 3 08:38:34 2006
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pluto.driver.tags;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletSession;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pluto.Constants;
+import org.apache.pluto.driver.AttributeKeys;
+import org.apache.pluto.util.ui.PortletUiMessage;
+
+/**
+ * Tag to print an error, info, alert, status or success message in a portlet
+ * as defined by Cascading Syle Sheet classes in Appendix PLT C of the
+ * Java Portlet Specification (JSR-168) version 1.0 (pg 116).
+ * <p>
+ * This class uses the PortletUiMessage to encapsulates message information.
+ * Messages are wrapped in a <div> element containing a 'class' attribute with a
+ * spec-defined CSS value, which assumes these are defined in a CSS style
+ * sheet used by the JSP page. Right now this class can only handle one
+ * message per JSP page. Error information can be found in the
+ * Throwable member of the PortletUiMessage class. If this is non-null,
+ * the stack trace will be displayed in an HTML comment.
+ * </p>
+ * <p>
+ * There are two ways a message can be displayed using this tag:<br/>
+ * 1. Use the tag's message attribute on the JSP page to set the message
+ * as a String or expression that evaluates to a String. Optionally, the
+ * message can be a key to a value in a ResourceBundle. If so, the
+ * bundle attribute must be set to the ResourceBundle where the message
+ * can be found.<br/>
+ * 2. Put a message in the portlet session encapsulated in a PortletMessage
+ * object with a AttributeKeys.PORTLET_MSG key ("protlet_msg"). This class
+ * takes care of getting the attribute from the session.<br/>
+ * </p>
+ *
+ * @author <a href=mailto:cdoremus@apache.org>Craig Doremus</a>
+ *
+ * @see PortletUiMessage
+ * @see PortletUiMessageType
+ */
+public class PortletUiMessageTag extends TagSupport {
+ private static final Log LOG = LogFactory.getLog(PortletUiMessage.class);
+ private String message = null;
+ /* User-defined CSS class */
+ private String cssClass = "portlet-msg-info";
+ private String bundle = "AdminDeploymentPortlet";
+
+ /************ JSR-168 defined CSS classes for messages ************/
+ /** CSS class for Error messages. Example: Portlet not available*/
+ public static final String MSG_ERROR_CSS_CLASS = "portlet-msg-error";
+ /** CSS class for Help messages, general additional information, etc. Example: Info about */
+ public static final String MSG_INFO_CSS_CLASS = "portlet-msg-info";
+ /** CSS class for Status of the current operation. Example: Progress: 80% */
+ public static final String MSG_STATUS_CSS_CLASS = "portlet-msg-status";
+ /** CSS class for Warning messages. Example: Timeout occurred, try again later */
+ public static final String MSG_ALERT_CSS_CLASS = "portlet-msg-alert";
+ /** CSS class for Verification of the successful completion of a task. Example: Operation completed successfully */
+ public static final String MSG_SUCCESS_CSS_CLASS = "portlet-msg-success";
+ /* ************************************************************* */
+
+ /**
+ * Does the work of the tag.
+ */
+ public int doStartTag() throws JspException {
+
+ PortletRequest request = (PortletRequest)pageContext.getRequest().getAttribute(Constants.PORTLET_REQUEST);
+ PortletSession session = request.getPortletSession();
+ PortletUiMessage oMsg = (PortletUiMessage)session.getAttribute(AttributeKeys.PORTLET_MSG);
+ session.removeAttribute(AttributeKeys.PORTLET_MSG);
+ Throwable error = null;
+ if (oMsg != null) {
+ error = oMsg.getException();
+ }
+
+ try {
+ final String NL = System.getProperty("line.separator");
+ JspWriter out = pageContext.getOut();
+ if (oMsg != null) {
+ message = oMsg.getMessage();
+ }
+ //print out message
+ if (message != null ) {
+ //First, check resource bundle using 'message' as the key
+ boolean bundleFound = false;
+ try {
+ ResourceBundle rb = ResourceBundle.getBundle(bundle);
+ bundleFound = true;
+ message = rb.getString(message);
+ } catch (MissingResourceException e) {
+ if (bundleFound) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Missing resource from ResourceBundle '" + bundle + "'. Key used: " + message);
+ }
+ } else {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Missing ResourceBundle '" + bundle + "'.");
+ }
+ }
+ }
+ //Get css class
+ if (oMsg != null && oMsg.getCssClass() != null) {
+ cssClass = oMsg.getCssClass();
+ }
+ out.print(wrapHtml(message, cssClass));
+ }
+ //print out error info if present
+ if (error != null ) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(error.getMessage());
+ if (error.getCause() != null) {
+ sb.append("<br>Underlying Exception cause: ");
+ sb.append(error.getCause().getMessage());
+ }
+ out.print(wrapHtml(sb.toString(), MSG_ERROR_CSS_CLASS));
+ //print out the stack trace in an HTML comment
+ out.println("<!-- " + NL);
+ PrintWriter writer = new PrintWriter(out, true);
+ error.printStackTrace(writer);
+ out.print(NL + "-->");
+ }
+ } catch (IOException e) {
+ String msg = "Problem in PortletUiMessageTag";
+ LOG.error(msg, e);
+ JspTagException jte = new JspTagException(msg);
+ jte.initCause(e);
+ throw jte;
+ }
+ return SKIP_BODY;
+ }
+
+ private String wrapHtml(String msg, String css){
+ StringBuffer sb = new StringBuffer();
+ sb.append("<div class=\"" + css + "\">");
+ sb.append(msg);
+ sb.append("</div>");
+ return sb.toString();
+ }
+
+ /**
+ * @param message The error message
+ */
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ /**
+ * @param cssClass The cssClass to set.
+ */
+ public void setCssClass(String cssClass) {
+ this.cssClass = cssClass;
+ }
+
+ public void setBundle(String bundle) {
+ this.bundle = bundle;
+ }
+}
\ No newline at end of file