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 at...@apache.org on 2010/04/07 23:31:28 UTC

svn commit: r931694 - in /portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags: PortletModeDropDownTag.java PortletRenderTag.java PortletTag.java PortletTitleTag.java

Author: ate
Date: Wed Apr  7 21:31:27 2010
New Revision: 931694

URL: http://svn.apache.org/viewvc?rev=931694&view=rev
Log:
PLUTO-567: Make Pluto work even if main portlets are not available.
Patch provided by Gonzalo Aguilar.
I only slightly modified it by adding debug logging to the PortletTag try-catch exception handling block.
Thanks for the patch Gonzalo.

Modified:
    portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletModeDropDownTag.java
    portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletRenderTag.java
    portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTag.java
    portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTitleTag.java

Modified: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletModeDropDownTag.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletModeDropDownTag.java?rev=931694&r1=931693&r2=931694&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletModeDropDownTag.java (original)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletModeDropDownTag.java Wed Apr  7 21:31:27 2010
@@ -108,47 +108,69 @@ public class PortletModeDropDownTag exte
                 servletContext.getAttribute(AttributeKeys.PORTLET_CONTAINER);
         
         // Create the portlet window to render.
-        PortletWindow window = new PortletWindowImpl(container, windowConfig, requestedPortalUrl);
+        PortletWindow window = null;
+        
+        
+        try
+        {
+        	// If this fails it means that the portlet will be not available.
+        	// Render Tag will take care of it.
+        	window = new PortletWindowImpl(container, windowConfig, requestedPortalUrl);
+        }
+        catch(RuntimeException ex) 
+        {
+        	  if (LOG.isDebugEnabled()) {
+                  LOG.debug("The portlet " + windowConfig.getPortletName() + " is not available. Is already deployed?");
+              }
+        }
 		
-		PortletMode currentMode = requestedPortalUrl.getPortletMode(window.getId().getStringId());
-
         //start the markup
         StringBuffer tag = new StringBuffer();
-//        String strCurrentMode = currentMode.toString();        
-//        tag.append("Current mode: " + currentMode.toString());
-        tag.append("<form action=\"\" name=\"modeSelectionForm\" style=\"display:inline\"><select onchange=\"self.location=this.options[this.selectedIndex].value\">");
-        Set<PortletMode> modeSet = null;
-		try {
-			modeSet = driverConfig.getSupportedPortletModes(evaluatedPortletId);
-		} catch (PortletContainerException e) {
-            throw new JspException(e);
-		}
-		
-		if (modeSet != null) {
-	        Iterator<PortletMode> i = modeSet.iterator();
-	        while (i.hasNext()) {
-	        	PortletMode mode = i.next();
-	
-	            PortalURL portalUrl =  portalEnv.createPortalURL();
-	            portalUrl.setPortletMode(evaluatedPortletId, mode);
-	
-	            // Build a string buffer containing the anchor tag
-	            tag.append("<option value=\"" + portalUrl.toString() + "\"");
-	            //Add 'selected' attribute for current mode.
-	            if (mode.equals(currentMode)) {
-	            	tag.append(" selected=\"true\"");
-	            }
-	            tag.append(">");
-	            if (driverConfig.isPortletManagedMode(evaluatedPortletId, mode.toString())) {
-		            tag.append(getCustomModeDecorationName(driverConfig, mode));	            	
-	            } else {
-	            	tag.append(mode.toString().toUpperCase());
-	            }
-//	            tag.append(mode.toString().toUpperCase());
-	            tag.append("</option>");
-	        }
-		}
-        tag.append("</select></form>");
+     
+        // Do not render if we don't have a window.
+        if(window!=null)
+        {
+        	PortletMode currentMode = requestedPortalUrl.getPortletMode(window.getId().getStringId());
+
+
+        	//        String strCurrentMode = currentMode.toString();        
+        	//        tag.append("Current mode: " + currentMode.toString());
+        	tag.append("<form action=\"\" name=\"modeSelectionForm\" style=\"display:inline\"><select onchange=\"self.location=this.options[this.selectedIndex].value\">");
+        	Set<PortletMode> modeSet = null;
+        	try {
+        		modeSet = driverConfig.getSupportedPortletModes(evaluatedPortletId);
+        	} catch (PortletContainerException e) {
+        		throw new JspException(e);
+        	}
+
+        	if (modeSet != null) {
+        		Iterator<PortletMode> i = modeSet.iterator();
+        		while (i.hasNext()) {
+        			PortletMode mode = i.next();
+
+        			PortalURL portalUrl =  portalEnv.createPortalURL();
+        			portalUrl.setPortletMode(evaluatedPortletId, mode);
+
+        			// Build a string buffer containing the anchor tag
+        			tag.append("<option value=\"" + portalUrl.toString() + "\"");
+        			//Add 'selected' attribute for current mode.
+        			if (mode.equals(currentMode)) {
+        				tag.append(" selected=\"true\"");
+        			}
+        			tag.append(">");
+        			if (driverConfig.isPortletManagedMode(evaluatedPortletId, mode.toString())) {
+        				tag.append(getCustomModeDecorationName(driverConfig, mode));	            	
+        			} else {
+        				tag.append(mode.toString().toUpperCase());
+        			}
+        			//	            tag.append(mode.toString().toUpperCase());
+        			tag.append("</option>");
+        		}
+        	}
+        	tag.append("</select></form>");
+
+        }
+        
         // Print the mode anchor tag.
         try {
             JspWriter out = pageContext.getOut();

Modified: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletRenderTag.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletRenderTag.java?rev=931694&r1=931693&r2=931694&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletRenderTag.java (original)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletRenderTag.java Wed Apr  7 21:31:27 2010
@@ -22,6 +22,8 @@ import java.io.PrintWriter;
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.tagext.TagSupport;
 
+import org.apache.pluto.driver.services.portal.PortletWindowConfig;
+
 /**
  * The portlet render tag is used to print portlet rendering result (or error
  * details) to the page.
@@ -60,7 +62,10 @@ public class PortletRenderTag extends Ta
         // Otherwise, print the error stack trace.
         else {
             try {
-                pageContext.getOut().print("Error rendering portlet.");
+            	PortletWindowConfig windowConfig =
+                    PortletWindowConfig.fromId(parentTag.getEvaluatedPortletId());
+            	
+                pageContext.getOut().print("Error rendering portlet " + windowConfig.getPortletName() + ".");
                 pageContext.getOut().print("<pre>");
                 parentTag.getThrowable().printStackTrace(
                 		new PrintWriter(pageContext.getOut()));

Modified: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTag.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTag.java?rev=931694&r1=931693&r2=931694&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTag.java (original)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTag.java Wed Apr  7 21:31:27 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.pluto.driver.tags;
 
+import java.io.StringWriter;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -125,23 +126,39 @@ public class PortletTag extends BodyTagS
                 servletContext.getAttribute(AttributeKeys.PORTLET_CONTAINER);
         
         // Create the portlet window to render.
-        PortletWindow window = new PortletWindowImpl(container, windowConfig, portalURL);
-        
-        // Check if someone else is maximized. If yes, don't show content.
-        Map windowStates = portalURL.getWindowStates();
-        for (Iterator it = windowStates.keySet().iterator(); it.hasNext(); ) {
-            String windowId = (String) it.next();
-            WindowState windowState = (WindowState) windowStates.get(windowId);
-            if (WindowState.MAXIMIZED.equals(windowState)
-            		&& !window.getId().getStringId().equals(windowId)) {
-                return SKIP_BODY;
-            }
+        PortletWindow window = null;
+
+
+        try {
+        	window = new PortletWindowImpl(container, windowConfig, portalURL);
+        } catch(RuntimeException e) // FIXME: Prose a change to anything else, handle it.
+        {
+      	  if (LOG.isDebugEnabled()) {
+              LOG.debug("The portlet " + windowConfig.getPortletName() + " is not available. Is already deployed?");
+          }
         }
-        
-        // Create portal servlet response to wrap the original
-        // HTTP servlet response.
-        PortalServletResponse portalResponse = new PortalServletResponse(
+
+    	// Create portal servlet response to wrap the original
+    	// HTTP servlet response.
+    	PortalServletResponse portalResponse = new PortalServletResponse(
                 (HttpServletResponse) pageContext.getResponse());
+    	
+    	
+        if(window!=null)
+        {
+        	// Check if someone else is maximized. If yes, don't show content.
+        	Map windowStates = portalURL.getWindowStates();
+        	for (Iterator it = windowStates.keySet().iterator(); it.hasNext(); ) {
+        		String windowId = (String) it.next();
+        		WindowState windowState = (WindowState) windowStates.get(windowId);
+        		if (WindowState.MAXIMIZED.equals(windowState)
+        				&& !window.getId().getStringId().equals(windowId)) {
+        			return SKIP_BODY;
+        		}
+        	}
+
+        
+        }
         
         // Render the portlet and cache the response.
         try {

Modified: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTitleTag.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTitleTag.java?rev=931694&r1=931693&r2=931694&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTitleTag.java (original)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/tags/PortletTitleTag.java Wed Apr  7 21:31:27 2010
@@ -24,6 +24,7 @@ import javax.servlet.jsp.tagext.TagSuppo
 
 import org.apache.pluto.container.PortletWindow;
 import org.apache.pluto.driver.AttributeKeys;
+import org.apache.pluto.driver.services.portal.PortletWindowConfig;
 
 /**
  * The portlet title tag is used to print the dynamic portlet title to the page.
@@ -57,8 +58,18 @@ public class PortletTitleTag extends Tag
         
         // Print out the portlet title to page.
         try {
-            pageContext.getOut().print(pageContext.getRequest().getAttribute(
-            		AttributeKeys.PORTLET_TITLE));
+        	String title = (String) pageContext.getRequest().getAttribute(
+            		AttributeKeys.PORTLET_TITLE);
+        	
+        	if(title == null)
+        	{
+        	 	PortletWindowConfig windowConfig =
+                    PortletWindowConfig.fromId(parentTag.getEvaluatedPortletId());
+        	 	
+        		title = "[ " + windowConfig.getPortletName() + " not ready ]";
+        	}
+        	
+            pageContext.getOut().print(title);
         } catch (IOException ex) {
             throw new JspException(ex);
         }