[jboss-svn-commits] JBoss Portal SVN: r5369 - in trunk: core/src/main/org/jboss/portal/core/controller/ajax core/src/main/org/jboss/portal/core/controller/command core/src/resources/portal-core-sar/META-INF theme/src/bin/portal-ajax-war/js/portal theme/src/main/org/jboss/portal/test/theme/servlet theme/src/main/org/jboss/portal/theme theme/src/main/org/jboss/portal/theme/impl/render/dynamic

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 9 05:14:23 EDT 2006


Author: julien at jboss.com
Date: 2006-10-09 05:14:15 -0400 (Mon, 09 Oct 2006)
New Revision: 5369

Added:
   trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java
Modified:
   trunk/core/src/main/org/jboss/portal/core/controller/command/RenderPageCommand.java
   trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
   trunk/theme/src/bin/portal-ajax-war/js/portal/event.js
   trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java
   trunk/theme/src/main/org/jboss/portal/theme/ThemeConstants.java
   trunk/theme/src/main/org/jboss/portal/theme/impl/render/dynamic/DynaRegionRenderer.java
Log:
make ajax controller handle callbacks / make ajax callback url and script base configurable through page properties

Added: trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java	2006-10-09 09:14:15 UTC (rev 5369)
@@ -0,0 +1,74 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.portal.core.controller.ajax;
+
+import org.jboss.portal.core.controller.ControllerInterceptor;
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.controller.command.RenderPageCommand;
+import org.jboss.portal.common.invocation.InvocationException;
+import org.jboss.portal.theme.PageRendition;
+import org.jboss.portal.theme.ThemeConstants;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class AjaxInterceptor extends ControllerInterceptor
+{
+
+   public void invoke(ControllerCommand cmd) throws Exception, InvocationException
+   {
+      cmd.invokeNext();
+
+      //
+      if (cmd instanceof RenderPageCommand)
+      {
+         RenderPageCommand rpc = (RenderPageCommand)cmd;
+         PageRendition rendition = rpc.getResult();
+
+         // Configure ajax
+         if (rendition != null)
+         {
+            Map pageProps = rendition.getPageResult().getPageProperties();
+
+            //
+            pageProps.put(ThemeConstants.PORTAL_AJAX_JAVASCRIPT_BASE, "/portal-ajax");
+
+            // Compute the url for the ajax servlet
+            HttpServletRequest req = cmd.getControllerContext().getServerInvocation().getServerContext().getClientRequest();
+            StringBuffer url = new StringBuffer();
+            url.append(req.getScheme()).append("://");
+            url.append(req.getServerName());
+            if (("http".equals(req.getScheme()) && req.getServerPort() != 80) || ("https".equals(req.getScheme()) && req.getServerPort() != 443))
+            {
+               url.append(':').append(req.getServerPort());
+            }
+            url.append(req.getContextPath()).append("/ajax");
+
+            pageProps.put(ThemeConstants.PORTAL_AJAX_REMOTE_URL, url.toString());
+         }
+      }
+   }
+}

Modified: trunk/core/src/main/org/jboss/portal/core/controller/command/RenderPageCommand.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/controller/command/RenderPageCommand.java	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/core/src/main/org/jboss/portal/core/controller/command/RenderPageCommand.java	2006-10-09 09:14:15 UTC (rev 5369)
@@ -286,7 +286,7 @@
    private ModifiablePageResult renderFragments(ServerConfig cfg, AttributeResolver navCtx) throws ControllerException
    {
       PageNavigationalState pageNavState = (PageNavigationalState)navCtx.getAttribute(getPage().getId());
-      ModifiablePageResult pageResult = new ModifiablePageResult(getPage().getName(), getPage().getDeclaredProperties(), getPage().getPortal().getDeclaredProperties());
+      ModifiablePageResult pageResult = new ModifiablePageResult(getPage().getName(), new HashMap(getPage().getDeclaredProperties()), new HashMap(getPage().getPortal().getDeclaredProperties()));
 
       // Render
       for (Iterator i = windows.iterator(); i.hasNext();)

Modified: trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml	2006-10-09 09:14:15 UTC (rev 5369)
@@ -99,15 +99,15 @@
 
    <!-- Command stack -->
    <mbean
-      code="org.jboss.portal.core.aspects.controller.PageNavigationInterceptor"
-      name="portal:service=Interceptor,type=Command,name=PageNavigation"
+      code="org.jboss.portal.core.aspects.controller.node.PortalNodeInterceptor"
+      name="portal:service=Interceptor,type=Command,name=PortalNode"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
    </mbean>
    <mbean
-      code="org.jboss.portal.core.aspects.controller.PageCustomizerInterceptor"
-      name="portal:service=Interceptor,type=Command,name=PageCustomizer"
+      code="org.jboss.portal.core.aspects.controller.PolicyEnforcementInterceptor"
+      name="portal:service=Interceptor,type=Command,name=PolicyEnforcement"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
@@ -116,15 +116,15 @@
          proxy-type="attribute">portal:service=PortalAuthorizationManagerFactory</depends>
    </mbean>
    <mbean
-      code="org.jboss.portal.core.aspects.controller.node.PortalNodeInterceptor"
-      name="portal:service=Interceptor,type=Command,name=PortalNode"
+      code="org.jboss.portal.core.aspects.controller.PageNavigationInterceptor"
+      name="portal:service=Interceptor,type=Command,name=PageNavigation"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
    </mbean>
    <mbean
-      code="org.jboss.portal.core.aspects.controller.PolicyEnforcementInterceptor"
-      name="portal:service=Interceptor,type=Command,name=PolicyEnforcement"
+      code="org.jboss.portal.core.aspects.controller.PageCustomizerInterceptor"
+      name="portal:service=Interceptor,type=Command,name=PageCustomizer"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
@@ -133,6 +133,13 @@
          proxy-type="attribute">portal:service=PortalAuthorizationManagerFactory</depends>
    </mbean>
    <mbean
+      code="org.jboss.portal.core.controller.ajax.AjaxInterceptor"
+      name="portal:service=Interceptor,type=Command,name=Ajax"
+      xmbean-dd=""
+      xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+      <xmbean/>
+   </mbean>
+   <mbean
       code="org.jboss.portal.core.aspects.controller.node.EventBroadcasterInterceptor"
       name="portal:service=Interceptor,type=Command,name=EventBroadcaster"
       xmbean-dd=""
@@ -160,6 +167,7 @@
          <depends-list-element>portal:service=Interceptor,type=Command,name=PolicyEnforcement</depends-list-element>
          <depends-list-element>portal:service=Interceptor,type=Command,name=PageNavigation</depends-list-element>
          <depends-list-element>portal:service=Interceptor,type=Command,name=PageCustomizer</depends-list-element>
+         <depends-list-element>portal:service=Interceptor,type=Command,name=Ajax</depends-list-element>
          <depends-list-element>portal:service=Interceptor,type=Command,name=EventBroadcaster</depends-list-element>
          <depends-list-element>portal:service=Interceptor,type=Command,name=WindowCache</depends-list-element>
       </depends-list>

Modified: trunk/theme/src/bin/portal-ajax-war/js/portal/event.js
===================================================================
--- trunk/theme/src/bin/portal-ajax-war/js/portal/event.js	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/theme/src/bin/portal-ajax-war/js/portal/event.js	2006-10-09 09:14:15 UTC (rev 5369)
@@ -60,8 +60,7 @@
       }
    }
 
-   var url = "http://localhost:8080/portal-ajax/ajax";
-   new Ajax.Request(url, options);
+   new Ajax.Request(remote_server_url, options);
 
 /*
    a = document.createElement("div");

Modified: trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java	2006-10-09 09:14:15 UTC (rev 5369)
@@ -73,8 +73,6 @@
    private PortalRenderSet renderSet;
    private PortalLayout layout;
    private PortalTheme theme;
-   private Map portalProps = new HashMap();
-   private Map pageProps = new HashMap();
 
    private static final String TEST_PAGE_NAME = "TestPage";
 
@@ -149,8 +147,17 @@
     */
    public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException
    {
+      //
+      Map pageProps = new HashMap();
+      pageProps.put(ThemeConstants.PORTAL_AJAX_JAVASCRIPT_BASE, "/portal-ajax");
+      pageProps.put(ThemeConstants.PORTAL_AJAX_REMOTE_URL, "http://localhost:8080/portal-ajax/ajax");
+
+      //
+      Map portalProps = new HashMap();
+      portalProps.put(ThemeConstants.PORTAL_PROP_RENDERSET, renderSet.getName());
+
+      //
       HTTPStreamInfo streamInfo = new HTTPStreamInfo(MediaType.HTML, "utf-8");
-      portalProps.put(ThemeConstants.PORTAL_PROP_RENDERSET, renderSet.getName());
       ServerRequest serverRequest = new ServerRequest();
 
       // pageresult obj
@@ -163,13 +170,13 @@
       {
          WindowContext wCtx = new WindowContext("WindowA_" + i, "WindowA_"+i, "left", i);
          pageResult.addWindowContext(wCtx);
-         pageResult.addWindowResult(wCtx.getId(), createWindowMarkup("WindowA_" + i + " Title", "<p>WindowA_" + i + " Content</p>", wCtx));
+         pageResult.addWindowResult(wCtx.getId(), createWindowMarkup("WindowA_" + i + " Title", "<p>WindowA_" + i + " Content</p>", wCtx, portalProps, pageProps));
       }
       for (int i = 0; i < CENTER_WINDOWS; i++)
       {
          WindowContext wCtx = new WindowContext("WindowB_" + i, "WindowB_"+i, "center", i);
          pageResult.addWindowContext(wCtx);
-         pageResult.addWindowResult(wCtx.getId(), createWindowMarkup("WindowB_" + i + " Title", "<p>WindowB_" + i + " Content</p>", wCtx));
+         pageResult.addWindowResult(wCtx.getId(), createWindowMarkup("WindowB_" + i + " Title", "<p>WindowB_" + i + " Content</p>", wCtx, portalProps, pageProps));
       }
 
       // set the renderctx and req/res attr
@@ -203,7 +210,7 @@
     * @param wCtx
     * @return window markup result
     */
-   private ModifiableWindowResult createWindowMarkup(String sTitle, String sContent, WindowContext wCtx)
+   private ModifiableWindowResult createWindowMarkup(String sTitle, String sContent, WindowContext wCtx, Map portalProps, Map pageProps)
    {
       ModifiableWindowResult markupResult = new ModifiableWindowResult(sTitle, sContent, Collections.EMPTY_MAP, new HashMap(), null, null, null, null);
       markupResult.addWindowContext(wCtx);

Modified: trunk/theme/src/main/org/jboss/portal/theme/ThemeConstants.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/ThemeConstants.java	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/theme/src/main/org/jboss/portal/theme/ThemeConstants.java	2006-10-09 09:14:15 UTC (rev 5369)
@@ -96,4 +96,13 @@
     */
    public static final String PORTAL_PROP_REGION = "theme.region";
 
+   /**
+    *
+    */
+   public static final String PORTAL_AJAX_JAVASCRIPT_BASE = "theme.ajax.js_base";
+
+   /**
+    *
+    */
+   public static final String PORTAL_AJAX_REMOTE_URL = "theme.ajax.remove_url";
 }

Modified: trunk/theme/src/main/org/jboss/portal/theme/impl/render/dynamic/DynaRegionRenderer.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/impl/render/dynamic/DynaRegionRenderer.java	2006-10-09 08:20:10 UTC (rev 5368)
+++ trunk/theme/src/main/org/jboss/portal/theme/impl/render/dynamic/DynaRegionRenderer.java	2006-10-09 09:14:15 UTC (rev 5369)
@@ -27,6 +27,7 @@
 import org.jboss.portal.theme.render.RegionRenderer;
 import org.jboss.portal.theme.render.RenderContext;
 import org.jboss.portal.theme.render.RenderException;
+import org.jboss.portal.theme.ThemeConstants;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -61,22 +62,30 @@
    public void render(RenderContext renderContext, Region region,
                       Map portletContexts, Map windowResults) throws RenderException
    {
+      Map pageProps = renderContext.getPageProperties();
+
+
+      StringBuffer markup = renderContext.getMarkupFragment();
+      String jsBase = (String)pageProps.get(ThemeConstants.PORTAL_AJAX_JAVASCRIPT_BASE);
+      String remoteURL = (String)pageProps.get(ThemeConstants.PORTAL_AJAX_REMOTE_URL);
+
       // Handle special ajax region here
       if ("AJAXFooter".equals(region.getId()))
       {
-         StringBuffer markup = renderContext.getMarkupFragment();
-         String ctx = "/portal-ajax";
-         markup.append("\n\n<script type='text/javascript' src='").append(ctx).append("/js/portal/event.js'></script>\n\n");
+         markup.append("\n\n<script type='text/javascript' src='").append(jsBase).append("/js/portal/event.js'></script>\n\n");
       }
       else if ("AJAXScripts".equals(region.getId()))
       {
-         StringBuffer markup = renderContext.getMarkupFragment();
-         String ctx = "/portal-ajax";
          markup.append("\n\n\n");
-         markup.append("<script type='text/javascript' src='").append(ctx).append("/js/portal/prototype.js'></script>\n");
-         markup.append("<script type='text/javascript' src='").append(ctx).append("/js/portal/scriptaculous.js'></script>\n");
-         markup.append("<script type='text/javascript' src='").append(ctx).append("/js/portal/effects.js'></script>\n");
-         markup.append("<script type='text/javascript' src='").append(ctx).append("/js/portal/dragdrop.js'></script>\n");
+         markup.append("<script type='text/javascript'>\n");
+         markup.append("remote_server_url=\"");
+         markup.append(remoteURL);
+         markup.append(";\"\n");
+         markup.append("</script>\n");
+         markup.append("<script type='text/javascript' src='").append(jsBase).append("/js/portal/prototype.js'></script>\n");
+         markup.append("<script type='text/javascript' src='").append(jsBase).append("/js/portal/scriptaculous.js'></script>\n");
+         markup.append("<script type='text/javascript' src='").append(jsBase).append("/js/portal/effects.js'></script>\n");
+         markup.append("<script type='text/javascript' src='").append(jsBase).append("/js/portal/dragdrop.js'></script>\n");
          markup.append("\n\n\n");
       }
       




More information about the jboss-svn-commits mailing list