taylor      2004/10/28 18:29:50

  Modified:    portals-bridges/velocity/src/java/org/apache/portals/bridges/velocity
                        BridgesVelocityViewServlet.java
  Added:       portals-bridges/velocity/src/java/org/apache/portals/bridges/velocity
                        GenericVelocityPortlet.java
  Log:
  Phase I of Generic Velocity Portlet emulating basic functionality provided in the 
Portlet API (for JSPs)
   to Velocity portlets and templates. Provides the following Velocity context 
variables emulating
  PLT.22 JSP request variables:
  $renderRequest
  $renderResponse
  $portletConfig
  Constants:
     $MODE_EDIT, $MODE_HELP, $MODE_VIEW, $STATE_NORMAL, $STATE_MIN, $STATE_MAX
  
  Phase II will implement velocity action handling, form to bean conversion and 
validation, navigations (forwards)
  
  Revision  Changes    Path
  1.2       +16 -3     
jakarta-jetspeed-2/portals-bridges/velocity/src/java/org/apache/portals/bridges/velocity/BridgesVelocityViewServlet.java
  
  Index: BridgesVelocityViewServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/portals-bridges/velocity/src/java/org/apache/portals/bridges/velocity/BridgesVelocityViewServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BridgesVelocityViewServlet.java   24 Oct 2004 19:32:46 -0000      1.1
  +++ BridgesVelocityViewServlet.java   29 Oct 2004 01:29:50 -0000      1.2
  @@ -43,7 +43,7 @@
       public final static String PORTLET_REQUEST = "javax.portlet.request";
       public final static String PORTLET_RESPONSE = "javax.portlet.response";
       public final static String PORTLET_CONFIG = "javax.portlet.config";
  -     
  +    
        public static final String VELOCITY_WRITER_ATTR = 
"org.apache.velocity.io.VelocityWriter";
       /** Cache of writers */
       private static SimplePool writerPool = new SimplePool(40);
  @@ -63,12 +63,25 @@
           if (renderRequest != null)
           {
               renderRequest.setAttribute(VELOCITY_CONTEXT_ATTR, ctx);
  +            Context portletContext = 
(Context)renderRequest.getAttribute(GenericVelocityPortlet.PORTLET_BRIDGE_CONTEXT);
  +            if (portletContext != null)
  +            {
  +                // merge in portletContext
  +                Object[] keys = portletContext.getKeys();
  +                for (int ix = 0; ix < keys.length; ix++)
  +                {
  +                    // is this api f'd in the head or what
  +                    ctx.put((String)keys[ix], portletContext.get((String)keys[ix]));
  +                }                
  +            }
  +            
           }
   
  +        
           // standard render request and response also available in context
           ctx.put(PORTLET_REQUEST, renderRequest);
           ctx.put(PORTLET_RESPONSE, renderResponse);
  -        
  +                
           return super.handleRequest(request, response, ctx);
       }
   
  
  
  
  1.1                  
jakarta-jetspeed-2/portals-bridges/velocity/src/java/org/apache/portals/bridges/velocity/GenericVelocityPortlet.java
  
  Index: GenericVelocityPortlet.java
  ===================================================================
  /*
   * 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.bridges.velocity;
  
  import java.io.IOException;
  
  import javax.portlet.ActionRequest;
  import javax.portlet.ActionResponse;
  import javax.portlet.PortletConfig;
  import javax.portlet.PortletException;
  import javax.portlet.PortletMode;
  import javax.portlet.RenderRequest;
  import javax.portlet.RenderResponse;
  import javax.portlet.WindowState;
  
  import org.apache.portals.bridges.common.GenericServletPortlet;
  import org.apache.velocity.VelocityContext;
  import org.apache.velocity.context.Context;
  
  
  /**
   * <p>
   * Generic Velocity Portlet emulating basic functionality provided in the Portlet 
API (for JSPs) 
   * to Velocity portlets and templates. Provides the following Velocity context 
variables emulating
   * PLT.22 JSP request variables:
   * * <ul>
   * <li>$renderRequest
   * <li>$renderResponse
   * <li>$portletConfig
   * </ul>
   * </p>
   * <p>
   * PLT.22 Tags:
   * <ul>
   * <li>$actionURL -- use renderResponse.createActionURL()
   * <li>$renderURL -- use renderResponse.createRenderURL()
   * <li>$namespace -- use rennderResponse.getNamespace() (Namespace)
   * </ul>
   *  Beware that Param tags cannot be added incrementally i.e. 
$renderURL.setParameter("name","value").setParameter("name","value")
   *  since the portlet api returns void on setParameter (or setWindowState, 
setPortletMode)
   *  Thus it is required to set each param or state on a single line:
   * </p>
   * <p>   
   *    #set($max = $renderResponse.createRenderURL())
   *    $max.setWindowState($STATE_MAX)
   *    $max.setParameter("bush", "war")
   * </p>
   * <p>
   * Constants: 
   * $MODE_EDIT, $MODE_HELP, $MODE_VIEW, $STATE_NORMAL, $STATE_MIN, $STATE_MAX
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor</a>
   * @version $Id: GenericVelocityPortlet.java,v 1.1 2004/10/29 01:29:50 taylor Exp $
   */
  public class GenericVelocityPortlet extends GenericServletPortlet
  {
      public final static String PORTLET_BRIDGE_CONTEXT = 
"portals.bridges.velocity.context"; 
      
      public GenericVelocityPortlet()
      {
      }
  
      public void init(PortletConfig config)
      throws PortletException
      {
          super.init(config);
      }
      
      /**
       * Execute the servlet as define by the init parameter or preference 
PARAM_ACTION_PAGE.  The value
       * if the parameter is a relative URL, i.e. /actionPage.jsp will execute the
       * JSP editPage.jsp in the portlet application's web app.  The action should
       * not generate any content.  The content will be generate by doCustom(),
       * doHelp() , doEdit(), or doView().
       *
       * See section PLT.16.2 of the JSR 168 Portlet Spec for more information
       * around executing a servlet or JSP in processAction()
       *
       * @see javax.portlet.GenericPortlet#processAction
       *
       * @task Need to be able to execute a servlet for the action
       */
      public void processAction(ActionRequest request, ActionResponse actionResponse)
      throws PortletException, IOException
      {
          super.processAction(request, actionResponse);
      }
      
      /**
       * Execute the servlet as define by the init parameter or preference 
PARAM_EDIT_PAGE.  The value
       * if the parameter is a relative URL, i.e. /editPage.jsp will execute the
       * JSP editPage.jsp in the portlet application's web app.
       *
       * @see javax.portlet.GenericPortlet#doCustom
       */
      public void doCustom(RenderRequest request, RenderResponse response)
      throws PortletException, IOException
      {
          super.doCustom(request, response);
      }
      
      /**
       * Execute the servlet as define by the init parameter or preference 
PARAM_EDIT_PAGE.
       * The value if the parameter is a relative URL, i.e. /editPage.jsp will execute 
the
       * JSP editPage.jsp in the portlet application's web app.
       *
       * @see javax.portlet.GenericPortlet#doEdit
       */
      public void doEdit(RenderRequest request, RenderResponse response)
      throws PortletException, IOException
      {
          super.doEdit(request, response);
      }
      
      /**
       * Execute the servlet as define by the init parameter or preference 
PARAM_HELP_PAGE.
       * The value if the parameter is a relative URL, i.e. /helpPage.jsp will exeute 
the
       * JSP helpPage.jsp in the portlet application's web app.
       *
       * @see javax.portlet.GenericPortlet#doView
       */
      public void doHelp(RenderRequest request, RenderResponse response)
      throws PortletException, IOException
      {
          super.doHelp(request, response);
      }
  
      /**
       * Execute the servlet as define by the init parameter or preference 
PARAM_VIEW_PAGE.
       * The value if the parameter is a relative URL, i.e. /viewPage.jsp will execute 
the
       * JSP viewPage.jsp in the portlet application's web app.
       *
       * @see javax.portlet.GenericPortlet#doView
       */
      public void doView(RenderRequest request, RenderResponse response)
      throws PortletException, IOException
      {
          super.doView(request, response);
      }
      
      public void render(RenderRequest request, RenderResponse response)
      throws PortletException, java.io.IOException    
      {
          createPortletVelocityContext(request, response);
          super.render(request, response);
      }
      
      private Context createPortletVelocityContext(RenderRequest request, 
RenderResponse response)
      {
          Context ctx = new VelocityContext();
          request.setAttribute(PORTLET_BRIDGE_CONTEXT, ctx);
          // PLT.22
          ctx.put("renderRequest", request);
          ctx.put("renderResponse", response);
          ctx.put("portletConfig", getPortletConfig());
          // constants
          ctx.put("STATE_NORMAL", WindowState.NORMAL);
          ctx.put("STATE_MAX", WindowState.MAXIMIZED);
          ctx.put("STATE_MIN", WindowState.MINIMIZED);
          ctx.put("MODE_VIEW", PortletMode.VIEW);
          ctx.put("MODE_EDIT", PortletMode.EDIT);
          ctx.put("MODE_HELP", PortletMode.HELP);
          return ctx;
      }
      
      public Context getContext(RenderRequest request)
      {
          return (Context)request.getAttribute(PORTLET_BRIDGE_CONTEXT);
      }
      
      
      
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to