You are viewing a plain text version of this content. The canonical link for it is here.
Posted to portalapps-dev@portals.apache.org by wo...@apache.org on 2009/04/14 11:51:09 UTC

svn commit: r764726 - in /portals/applications/gems/src/main/java/org/apache/portals/gems: dojo/AbstractDojoVelocityPortlet.java dojo/DojoPortletHelper.java dojo/DojoSpringMVCPortlet.java googlemaps/GoogleMapsPortlet.java

Author: woonsan
Date: Tue Apr 14 09:51:09 2009
New Revision: 764726

URL: http://svn.apache.org/viewvc?rev=764726&view=rev
Log:
JS2-961: Completing dojo support in the portlet side.
Still remaining problems: (1) GoogleMaps portlet is not working under desktop mode because google maps javascript is using document.writeln method, while each portlet retrieved from the portlet aggregator tries to add head element dynamically. (2) Portal should optimize the contributed head element by merging each elements with same merging hint key.

Modified:
    portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java
    portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoPortletHelper.java
    portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoSpringMVCPortlet.java
    portals/applications/gems/src/main/java/org/apache/portals/gems/googlemaps/GoogleMapsPortlet.java

Modified: portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java?rev=764726&r1=764725&r2=764726&view=diff
==============================================================================
--- portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java (original)
+++ portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java Tue Apr 14 09:51:09 2009
@@ -24,6 +24,7 @@
 import javax.portlet.RenderResponse;
 
 import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+import org.apache.portals.gems.dojo.DojoPortletHelper;
 
 /**
  * Abstract DOJO portlet for inserting in cross context dojo widget includes
@@ -34,9 +35,11 @@
 public abstract class AbstractDojoVelocityPortlet extends GenericVelocityPortlet
 {
     
+    protected static final String DOJO_JS_URL_INIT_PARAM = "dojo.js.url";
     protected static final String DOJO_REQUIRES_CORE_INIT_PARAM = "dojo.requires.core";
     protected static final String DOJO_REQUIRES_MODULES_INIT_PARAM = "dojo.requires.modules";
     
+    private String dojoJsUrl;
     private String dojoRequiresCoreList;
     private String dojoRequiresAddOnList;
     
@@ -53,14 +56,17 @@
     public void init(PortletConfig config) throws PortletException
     {
         super.init(config);
-        this.dojoRequiresCoreList = this.getInitParameter( DOJO_REQUIRES_CORE_INIT_PARAM );
-        this.dojoRequiresAddOnList = this.getInitParameter( DOJO_REQUIRES_MODULES_INIT_PARAM );
-        this.headerPage = this.getInitParameter("HeaderPage");
+        this.dojoJsUrl = getInitParameter(DOJO_JS_URL_INIT_PARAM);
+        this.dojoRequiresCoreList = getInitParameter( DOJO_REQUIRES_CORE_INIT_PARAM );
+        this.dojoRequiresAddOnList = getInitParameter( DOJO_REQUIRES_MODULES_INIT_PARAM );
+        this.headerPage = getInitParameter("HeaderPage");
     }
     
     @Override
     protected void doHeaders(RenderRequest request, RenderResponse response)
     {
+        DojoPortletHelper.enableDojo(response, this.dojoJsUrl);
+        
         if (this.headerPage != null)
         {
             try

Modified: portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoPortletHelper.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoPortletHelper.java?rev=764726&r1=764725&r2=764726&view=diff
==============================================================================
--- portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoPortletHelper.java (original)
+++ portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoPortletHelper.java Tue Apr 14 09:51:09 2009
@@ -44,6 +44,11 @@
     /**
      * An attribute value for key hint which can be used in head elements merging by portal.  
      */
+    public static final String HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_KEY_DOJO_JS_INCLUDE = "dojo.js.include";
+    
+    /**
+     * An attribute value for key hint which can be used in head elements merging by portal.  
+     */
     public static final String HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_KEY_DOJO_REQUIRE = "dojo.require";
 
     
@@ -78,6 +83,16 @@
         response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, headElem);
     }
     
+    public static void enableDojo(RenderResponse response, String dojoJsUrl)
+    {
+        Element headElem = response.createElement("script");
+        headElem.setAttribute("language", "JavaScript");
+        headElem.setAttribute("type", "text/javascript");
+        headElem.setAttribute("src", dojoJsUrl == null ? "" : dojoJsUrl);
+        headElem.setAttribute(HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_ATTRIBUTE, HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_KEY_DOJO_JS_INCLUDE);
+        response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, headElem);
+    }
+    
     public static void contributeDojoRequire(RenderResponse response, String dojoRequire)
     {
         Element headElem = response.createElement("script");
@@ -90,6 +105,11 @@
 
     public static void contributeDojoRequires(RenderResponse response, String dojoRequires)
     {
+        if (dojoRequires == null)
+        {
+            throw new IllegalArgumentException("dojoRequires is null.");
+        }
+        
         String [] dojoRequireArray = StringUtils.split(dojoRequires, ';');
         
         if (dojoRequireArray != null)

Modified: portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoSpringMVCPortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoSpringMVCPortlet.java?rev=764726&r1=764725&r2=764726&view=diff
==============================================================================
--- portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoSpringMVCPortlet.java (original)
+++ portals/applications/gems/src/main/java/org/apache/portals/gems/dojo/DojoSpringMVCPortlet.java Tue Apr 14 09:51:09 2009
@@ -48,9 +48,11 @@
 
 	protected static final String CRLF = "\r\n";
     
+    protected static final String DOJO_JS_URL_INIT_PARAM = "dojo.js.url";
     protected static final String DOJO_REQUIRES_CORE_INIT_PARAM = "dojo.requires.core";
     protected static final String DOJO_REQUIRES_MODULES_INIT_PARAM = "dojo.requires.modules";
     
+    private String dojoJsUrl;
     private String dojoRequiresCoreList = null;
     private String dojoRequiresAddOnList = null;
     
@@ -75,6 +77,7 @@
         synchronized (this) 
         {
             this.headerPage = this.getInitParameter("HeaderPage");
+            this.dojoJsUrl = getInitParameter(DOJO_JS_URL_INIT_PARAM);
             this.dojoRequiresCoreList = this.getInitParameter( DOJO_REQUIRES_CORE_INIT_PARAM );
             this.dojoRequiresAddOnList = this.getInitParameter( DOJO_REQUIRES_MODULES_INIT_PARAM );
         }
@@ -92,6 +95,8 @@
     @Override
     protected void doHeaders(RenderRequest request, RenderResponse response)
     {
+        DojoPortletHelper.enableDojo(response, this.dojoJsUrl);
+        
         if (this.headerPage != null)
         {
             try

Modified: portals/applications/gems/src/main/java/org/apache/portals/gems/googlemaps/GoogleMapsPortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/main/java/org/apache/portals/gems/googlemaps/GoogleMapsPortlet.java?rev=764726&r1=764725&r2=764726&view=diff
==============================================================================
--- portals/applications/gems/src/main/java/org/apache/portals/gems/googlemaps/GoogleMapsPortlet.java (original)
+++ portals/applications/gems/src/main/java/org/apache/portals/gems/googlemaps/GoogleMapsPortlet.java Tue Apr 14 09:51:09 2009
@@ -27,15 +27,16 @@
 import javax.portlet.RenderResponse;
 
 import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+import org.apache.portals.gems.dojo.AbstractDojoVelocityPortlet;
 import org.apache.portals.gems.dojo.DojoPortletHelper;
 
 /**
  * This is a simple class used to override processAction
  * to save location form submission value to location preference
  *
- * @version $Id: GoogleMapsPortlet.java 393251 2006-04-22 15:50:52Z jdp $
+ * @version $Id$
  */
-public class GoogleMapsPortlet extends GenericVelocityPortlet
+public class GoogleMapsPortlet extends AbstractDojoVelocityPortlet
 {
 
     /**
@@ -81,6 +82,8 @@
     @Override
     protected void doHeaders(RenderRequest request, RenderResponse response)
     {
+        super.doHeaders(request, response);
+        
         String apiKey = request.getPreferences().getValue("APIKey", "");
         DojoPortletHelper.contributeScript(response, "JavaScript", "text/javascript", "http://maps.google.com/maps?file=api&v=2&key=" + apiKey, null);
         DojoPortletHelper.contributeDojoRequire(response, "dojo.lang.*");