Author: woonsan
Date: Fri Apr 10 14:28:56 2009
New Revision: 763944

URL: http://svn.apache.org/viewvc?rev=763944&view=rev
Log:
JS2-961: Initially, modifies the GoogleMapsPortlet to use portlet 2.0 head 
contributions feature. Now this portlet works under Jetspeed-2.2-trunk.
Because some generic constants such as head contribution element hint and ajax 
support are not specified in the current portlet 2.0 specification, I think we 
need to define these commonalities in a project under apache portals umbrella.

Modified:
    portals/applications/demo/pom.xml
    portals/applications/gems/pom.xml
    
portals/applications/gems/src/main/java/org/apache/portals/gems/googlemaps/GoogleMapsPortlet.java

Modified: portals/applications/demo/pom.xml
URL: 
http://svn.apache.org/viewvc/portals/applications/demo/pom.xml?rev=763944&r1=763943&r2=763944&view=diff
==============================================================================
--- portals/applications/demo/pom.xml (original)
+++ portals/applications/demo/pom.xml Fri Apr 10 14:28:56 2009
@@ -41,6 +41,10 @@
         Demo Portlets Container
     </description>
 
+    <properties>
+      
<portals.applications.apa-gems.version>2.2-SNAPSHOT</portals.applications.apa-gems.version>
+    </properties>
+    
     <!-- Dependencies -->
 
     <dependencies>
@@ -67,7 +71,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.portals.applications</groupId>
-            <artifactId>portals-gems</artifactId>
+            <artifactId>apa-gems</artifactId>
+            <version>${portals.applications.apa-gems.version}</version>
             <scope>runtime</scope>
         </dependency>
         <dependency>

Modified: portals/applications/gems/pom.xml
URL: 
http://svn.apache.org/viewvc/portals/applications/gems/pom.xml?rev=763944&r1=763943&r2=763944&view=diff
==============================================================================
--- portals/applications/gems/pom.xml (original)
+++ portals/applications/gems/pom.xml Fri Apr 10 14:28:56 2009
@@ -1,106 +1,132 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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.
-
-  $Id:$
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-
-    <modelVersion>4.0.0</modelVersion>
-    <prerequisites>
-        <maven>2.0.4</maven>
-    </prerequisites>
-
-    <!-- POM Identification -->
-
-    <artifactId>portals-gems</artifactId>
-    <parent>
-        <groupId>org.apache.portals.applications</groupId>
-        <artifactId>applications</artifactId>
-        <version>2.2-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <packaging>jar</packaging>
-    <name>Apache Portals Gems</name>
-    <description>
-        Reusable Portlets (Gems) for your Portlet Applications.
-    </description>
-
-    <!-- Dependencies -->
-
-    <dependencies>
-
-        <!-- Build Dependencies -->
-        <dependency>
-            <groupId>org.apache.portals.jetspeed-2</groupId>
-            <artifactId>jetspeed-api</artifactId>
-            <version>2.2-SNAPSHOT</version>
-        </dependency>          
-        <dependency>
-            <groupId>org.apache.portals.jetspeed-2</groupId>
-            <artifactId>jetspeed-commons</artifactId>
-            <version>2.2-SNAPSHOT</version>
-            <scope>provided</scope>
-        </dependency>          
-        <dependency>
-            <groupId>commons-dbcp</groupId>
-            <artifactId>commons-dbcp</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>velocity</groupId>
-            <artifactId>velocity</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.portals.bridges</groupId>
-            <artifactId>portals-bridges-velocity</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
-        </dependency>
-   
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-portlet</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.poi</groupId>
-            <artifactId>poi</artifactId>
-            <version>3.0-FINAL</version>
-        </dependency>
-    </dependencies>
-
-    <scm>
-        
<connection>scm:svn:http://svn.apache.org/repos/asf/portals/jetspeed-2/trunk/applications/gems</connection>
-        
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/portals/jetspeed-2/trunk/applications/gems</developerConnection>
-        
<url>http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/applications/gems/</url>
-    </scm>
+  <!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements. See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You 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. $Id$
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+
+  <modelVersion>4.0.0</modelVersion>
+  <prerequisites>
+    <maven>2.0.4</maven>
+  </prerequisites>
+
+  <!-- POM Identification -->
+
+  <parent>
+    <groupId>org.apache.portals</groupId>
+    <artifactId>applications-pom</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  
+  <groupId>org.apache.portals.applications</groupId>
+  <artifactId>apa-gems</artifactId>
+  <version>2.2-SNAPSHOT</version>
+
+  <packaging>jar</packaging>
+  <name>Apache Portals Gems</name>
+  <description>
+    Reusable Portlets (Gems) for your Portlet Applications.
+  </description>
+
+  <properties>
+    <portlet-api.version>2.0</portlet-api.version>
+    <jetspeed.version>2.2-SNAPSHOT</jetspeed.version>
+    <velocity.version>1.5</velocity.version>
+    
<org.apache.portals.bridges.velocity.version>1.0.4</org.apache.portals.bridges.velocity.version>
+    <poi.version>3.0-FINAL</poi.version>
+    <commons-dbcp.version>1.2.2</commons-dbcp.version>
+    <commons-httpclient.version>3.0.1</commons-httpclient.version>
+    <commons-lang.version>2.1</commons-lang.version>
+    <commons-logging.version>1.1</commons-logging.version>
+    <spring.version>2.5.6</spring.version>
+  </properties>
+
+  <!-- Dependencies -->
+
+  <dependencies>
+
+    <!-- Build Dependencies -->
+    <dependency>
+      <groupId>javax.portlet</groupId>
+      <artifactId>portlet-api</artifactId>
+      <version>${portlet-api.version}</version>
+    <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.portals.jetspeed-2</groupId>
+      <artifactId>jetspeed-api</artifactId>
+      <version>${jetspeed.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.portals.jetspeed-2</groupId>
+      <artifactId>jetspeed-commons</artifactId>
+      <version>${jetspeed.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>velocity</groupId>
+      <artifactId>velocity</artifactId>
+      <version>${velocity.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.portals.bridges</groupId>
+      <artifactId>portals-bridges-velocity</artifactId>
+      <version>${org.apache.portals.bridges.velocity.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-dbcp</groupId>
+      <artifactId>commons-dbcp</artifactId>
+      <version>${commons-dbcp.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>${commons-lang.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>${commons-logging.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-httpclient</groupId>
+      <artifactId>commons-httpclient</artifactId>
+      <version>${commons-httpclient.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+      <version>${spring.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-webmvc-portlet</artifactId>
+      <version>${spring.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.poi</groupId>
+      <artifactId>poi</artifactId>
+      <version>${poi.version}</version>
+    </dependency>
+  </dependencies>
+
+  <scm>
+    
<connection>scm:svn:http://svn.apache.org/repos/asf/portals/jetspeed-2/trunk/applications/gems</connection>
+    
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/portals/jetspeed-2/trunk/applications/gems</developerConnection>
+    
<url>http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/applications/gems/</url>
+  </scm>
 
 </project>
\ No newline at end of file

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=763944&r1=763943&r2=763944&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
 Fri Apr 10 14:28:56 2009
@@ -18,27 +18,34 @@
 
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.HashMap;
 
+import javax.portlet.PortletException;
 import javax.portlet.ActionRequest;
+import javax.portlet.RenderRequest;
 import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
+import javax.portlet.MimeResponse;
+import javax.portlet.RenderResponse;
 import javax.portlet.PortletPreferences;
 
-import org.apache.jetspeed.headerresource.HeaderResource;
-import org.apache.jetspeed.portlet.PortletHeaderRequest;
-import org.apache.jetspeed.portlet.PortletHeaderResponse;
-import org.apache.portals.gems.dojo.AbstractDojoVelocityPortlet;
+import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+
+import org.w3c.dom.Element;
+
 /**
  * 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 $
  */
-public class GoogleMapsPortlet extends AbstractDojoVelocityPortlet
+public class GoogleMapsPortlet extends GenericVelocityPortlet
 {
     
+    private static final String HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_ATTRIBUTE 
= "org.apache.portals.portal.page.head.element.contribution.merge.hint";
+
+    private static final String 
HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_KEY_DOJO_REQUIRE = "dojo.require";
+
     /**
      * no change
      */
@@ -53,47 +60,81 @@
      * @see javax.portlet.GenericPortlet#processActions
      *
      */
-    public void processAction(ActionRequest request, ActionResponse 
actionResponse)
-    throws PortletException, IOException
+    public void processAction(ActionRequest request, ActionResponse 
actionResponse) throws PortletException, IOException
     {
         String location = request.getParameter( "location" );
         String mapHeight = request.getParameter( "mapheight" );
         String apiKey = request.getParameter( "apikey" );
+        
         PortletPreferences preferences = request.getPreferences();
+        
         if ( location != null )
+        {
             preferences.setValue( "Location", location );
+        }
+        
         if ( mapHeight != null )
+        {
             preferences.setValue( "MapHeight", mapHeight );
+        }
+        
         if ( apiKey != null )
+        {
             preferences.setValue( "APIKey", apiKey );
+        }
+        
         preferences.store();
     }
     
-    public void doHeader(PortletHeaderRequest request, PortletHeaderResponse 
response)
-    throws PortletException
+    @Override
+    protected void doHeaders(RenderRequest request, RenderResponse response)
+    {
+        String apiKey = request.getPreferences().getValue("APIKey", "");
+        contributeScript(response, "JavaScript", "text/javascript", 
"http://maps.google.com/maps?file=api&v=2&key="; + apiKey, null);
+        contributeDojoRequire(response, "dojo.lang.*");
+        contributeDojoRequire(response, "dojo.event.*");
+        contributeDojoRequire(response, "dojo.io.*");
+        contributeDojoRequire(response, "dojo.widget.*");
+        contributeDojoRequire(response, "dojo.widget.Button");
+    }
+    
+    private static void contributeScript(RenderResponse response, String 
language, String type, String src, String textContent)
     {
-        StringBuffer headerInfoText = new StringBuffer();
-        Map headerInfoMap = null;
+        Element headElem = response.createElement("script");
         
-        // add google maps api script tag
-        headerInfoText.setLength(0);
-        headerInfoMap = new HashMap(8);
-        headerInfoMap.put("language", "JavaScript");
-        headerInfoMap.put("src", 
"http://maps.google.com/maps?file=api&v=2&key="; + 
request.getPreferences().getValue("APIKey","") );
-        headerInfoMap.put("type", "text/javascript");
-        response.getHeaderResource().addHeaderInfo("script", headerInfoMap, 
headerInfoText.toString());
-
-        super.doHeader(request, response);
+        if (language != null)
+        {
+            headElem.setAttribute("language", language);
+        }
+        
+        if (src != null)
+        {
+            headElem.setAttribute("src", src);
+        }
+        
+        if (type != null)
+        {
+            headElem.setAttribute("type", type);
+        }
+        
+        if (textContent != null)
+        {
+            
headElem.appendChild(headElem.getOwnerDocument().createTextNode(textContent));
+        }
+        
+        response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, headElem);
     }
     
-    protected void includeHeaderContent( HeaderResource headerResource )
+    private static void contributeDojoRequire(RenderResponse response, String 
dojoRequire)
     {
-        headerResource.dojoAddCoreLibraryRequire( "dojo.lang.*" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.event.*" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.io.*" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.*" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.Button" );
+        Element headElem = response.createElement("script");
+        headElem.setAttribute("language", "JavaScript");
+        headElem.setAttribute("type", "text/javascript");
+        headElem.setAttribute(HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_ATTRIBUTE, 
HEAD_ELEMENT_CONTRIBUTION_MERGE_HINT_KEY_DOJO_REQUIRE);
+        
headElem.appendChild(headElem.getOwnerDocument().createTextNode("dojo.require(\""
 + dojoRequire + "\");"));
+        response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, headElem);
     }
+    
 }
 
 


Reply via email to