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.*");


Reply via email to