You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2006/06/07 22:54:49 UTC

svn commit: r412537 - /portals/jetspeed-2/trunk/applications/gems/src/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java

Author: taylor
Date: Wed Jun  7 13:54:49 2006
New Revision: 412537

URL: http://svn.apache.org/viewvc?rev=412537&view=rev
Log:
basic functionality for dojo/velocity portlets

Added:
    portals/jetspeed-2/trunk/applications/gems/src/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java

Added: portals/jetspeed-2/trunk/applications/gems/src/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/gems/src/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java?rev=412537&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/gems/src/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java (added)
+++ portals/jetspeed-2/trunk/applications/gems/src/java/org/apache/portals/gems/dojo/AbstractDojoVelocityPortlet.java Wed Jun  7 13:54:49 2006
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+package org.apache.portals.gems.dojo;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.CommonPortletServices;
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.headerresource.HeaderResource;
+import org.apache.jetspeed.headerresource.HeaderResourceFactory;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+import org.apache.velocity.context.Context;
+
+/**
+ * Abstract DOJO portlet for inserting in cross context dojo widget includes
+ * 
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public abstract class AbstractDojoVelocityPortlet extends GenericVelocityPortlet 
+{
+    protected abstract void includeDojoRequires(StringBuffer headerInfo);    
+    
+    /*
+     * Class specific logger.
+     */
+    private final static Log log = LogFactory.getLog(AbstractDojoVelocityPortlet.class);
+
+    /*
+     * Jetspeed header resource component
+     */
+    protected HeaderResourceFactory headerResourceFactoryComponent;
+
+    /*
+     * Portlet constructor.
+     */
+    public AbstractDojoVelocityPortlet() 
+    {
+        super();
+    }
+
+    /*
+     * Portlet lifecycle method.
+     */
+    public void init() throws PortletException 
+    {
+        super.init();
+
+        // access jetspeed heaader resource component
+        synchronized (this) 
+        {
+            if (headerResourceFactoryComponent == null) 
+            {
+                headerResourceFactoryComponent = (HeaderResourceFactory) 
+                    getPortletContext().getAttribute(CommonPortletServices.CPS_HEADER_RESOURCE_FACTORY);
+            }
+            if (headerResourceFactoryComponent == null) 
+            {
+                throw new PortletException("Failed to find the HeaderResourceFactoryComponent instance.");
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see javax.portlet.GenericPortlet#doDispatch(javax.portlet.RenderRequest, javax.portlet.RenderResponse)
+     */
+    protected void doDispatch(RenderRequest request, RenderResponse response) throws PortletException, IOException 
+    {
+        // include header content
+        includeHeaderContent(request,response);
+
+        // dispatch normally
+        super.doDispatch(request, response);
+    }
+
+    /*
+     * Include Dojo and Turbo header content using header resource component.
+     *
+     * @param request render request
+     * @param response render response
+     */
+    protected void includeHeaderContent(RenderRequest request, RenderResponse response) 
+    {
+        // get portal context path
+        RequestContext requestContext = (RequestContext) request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
+        String portalContextPath = requestContext.getRequest().getContextPath();
+
+        // use header resource component to ensure header logic is included only once
+        HeaderResource headerResource = headerResourceFactoryComponent.getHeaderResouce(request);
+        StringBuffer headerInfoText = new StringBuffer();
+        Map headerInfoMap = null;
+
+        // detect jetspeed-desktop
+        String requestEncoder = (String)requestContext.getRequest().getParameter("encoder");
+
+        boolean isJetspeedDesktop = ((requestEncoder == null) || !requestEncoder.equals("desktop")) ? false : true;
+        Context velocityContext = getContext(request);
+        velocityContext.put("isJetspeedDesktop", new Boolean( isJetspeedDesktop ) );
+
+        // add dojo if not already in use as desktop
+        if (!isJetspeedDesktop) 
+        {
+            // dojo configuration
+            headerInfoText.setLength(0);
+            headerInfoText.append("\r\n");
+            headerInfoText.append("var djConfig = {isDebug: true, debugAtAllCosts: true, baseScriptUri: '" + portalContextPath + "/javascript/dojo/'};\r\n");
+            headerInfoMap = new HashMap(8);
+            headerInfoMap.put("type", "text/javascript");
+            headerInfoMap.put("language", "JavaScript");
+            headerResource.addHeaderInfo("script", headerInfoMap, headerInfoText.toString());
+    
+            // dojo script
+            headerInfoMap = new HashMap(8);
+            headerInfoMap.put("language", "JavaScript");
+            headerInfoMap.put("type", "text/javascript");
+            headerInfoMap.put("src", portalContextPath + "/javascript/dojo/dojo.js");
+            headerResource.addHeaderInfo("script", headerInfoMap, "");
+            
+            // dojo includes
+            headerInfoText.setLength(0);
+            headerInfoText.append("\r\n");
+            includeDojoRequires(headerInfoText);
+            
+            headerInfoText.append("dojo.hostenv.setModulePrefix('jetspeed.desktop', '../desktop/core');\r\n");
+            headerInfoText.append("dojo.require('jetspeed.desktop.compatibility');\r\n");
+
+            headerInfoMap = new HashMap(8);
+            headerInfoMap.put("language", "JavaScript");
+            headerInfoMap.put("type", "text/javascript");
+            headerResource.addHeaderInfo("script", headerInfoMap, headerInfoText.toString());
+        }
+        
+        // close DOJO if not already in use as desktop
+        if (!isJetspeedDesktop) 
+        {
+            // complete DoJo includes
+            headerInfoText.setLength(0);
+            headerInfoText.append("\r\n");
+            headerInfoText.append("dojo.hostenv.writeIncludes();\r\n");
+            headerInfoMap = new HashMap(8);
+            headerInfoMap.put("language", "JavaScript");
+            headerInfoMap.put("type", "text/javascript");
+            headerResource.addHeaderInfo("script", headerInfoMap, headerInfoText.toString());
+        }
+
+    }
+    
+    protected void appendHeaderText(StringBuffer headerInfoText, String header)
+    {
+        headerInfoText.append("dojo.require('" + header + "');\r\n");
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org