jford       2005/04/02 09:24:04

  Modified:    src/java/org/apache/jetspeed/portal/portlets/viewprocessor
                        ViewProcessorFactory.java
  Added:       src/java/org/apache/jetspeed/portal/portlets/viewprocessor
                        BufferedVelocityViewProcessor.java
                        BufferedJSPViewProcessor.java
  Log:
  Added new buffered view processors
  
  PR: JS1-541
  
  Revision  Changes    Path
  1.4       +10 -0     
jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/viewprocessor/ViewProcessorFactory.java
  
  Index: ViewProcessorFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/viewprocessor/ViewProcessorFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ViewProcessorFactory.java 23 Feb 2004 03:27:18 -0000      1.3
  +++ ViewProcessorFactory.java 2 Apr 2005 17:24:04 -0000       1.4
  @@ -61,11 +61,21 @@
               logger.info("ViewProcessorFactory - creating Velocity 
processor");
               viewProcessor = new VelocityViewProcessor();
             }
  +        else if (viewType.equals("BufferedVelocity"))
  +        {
  +          logger.info("ViewProcessorFactory - creating Velocity processor");
  +          viewProcessor = new BufferedVelocityViewProcessor();
  +        }
           else if (viewType.equals("JSP"))
             {
               logger.info("ViewProcessorFactory - creating JSP processor");
               viewProcessor = new JSPViewProcessor();
             }
  +        else if (viewType.equals("BufferedJSP"))
  +        {
  +          logger.info("ViewProcessorFactory - creating JSP processor");
  +          viewProcessor = new BufferedJSPViewProcessor();
  +        }
           else if (viewType.equals("XSL"))
             {
               logger.info("ViewProcessorFactory - creating XSL processor");
  
  
  
  1.1                  
jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/viewprocessor/BufferedVelocityViewProcessor.java
  
  Index: BufferedVelocityViewProcessor.java
  ===================================================================
  /*
   * Copyright 2005 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.jetspeed.portal.portlets.viewprocessor;
  
  import org.apache.jetspeed.portal.Portlet;
  import org.apache.jetspeed.portal.PortletException;
  import org.apache.jetspeed.portal.portlets.*;
  import org.apache.jetspeed.portal.portlets.GenericMVCContext;
  import org.apache.jetspeed.services.TemplateLocator;
  import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
  import org.apache.jetspeed.services.logging.JetspeedLogger;
  import org.apache.jetspeed.util.JetspeedClearElement;
  
  import org.apache.turbine.services.velocity.TurbineVelocity;
  import org.apache.turbine.util.RunData;
  
  
  /**
   * Version of the VelocityViewProcess that buffers its content
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Tod Kuebler</a>
   * @author <a href="mailto:[EMAIL PROTECTED]">Jeremy Ford</a>
   */
  public class BufferedVelocityViewProcessor implements ViewProcessor
  {
  
      /**
       * Static initialization of the logger for this class
       */    
      private static final JetspeedLogger logger = 
JetspeedLogFactoryService.getLogger(BufferedVelocityViewProcessor.class.getName());
      
      /** Creates a new instance of VelocityViewProcessor */
      public BufferedVelocityViewProcessor()
        {
        }
  
      public void init(Portlet portlet)
                throws PortletException
        {
        }
  
      /** Process the template passed in the context
       * (context.get("template")).  Invoked by the GenericMVCPortlet
       * after action handling to process the template type
       * in question.
       *
       */
      public Object processView(GenericMVCContext context)
        {
  
          // generate the content
          JetspeedClearElement element = null;
          String template = (String) context.get("template");
          logger.info("VelocityViewProcessor - processing " + template);
  
          try
            {
  
              if (-1 == template.indexOf(".vm"))
                {
                  template = template + ".vm";
                }
  
              logger.info("VelocityViewProcessor - locating template - " + 
                       ((RunData) context.get("data")).toString() + template);
  
              String templatePath = TemplateLocator.locatePortletTemplate(
                                            (RunData) context.get("data"), 
                                            template);
  
              // need to add cache support
              Portlet portlet = (Portlet) context.get("portlet");
              RunData rundata = (RunData) context.get("data");
              long cachePeriod = -1;
              AbstractPortlet abstractPortlet = null;
              // STW: Safety net ;)
              if(portlet instanceof AbstractPortlet)
              {
                abstractPortlet =(AbstractPortlet) portlet;
                if(abstractPortlet.getExpirationMillis() != null)
                {
                        cachePeriod = 
abstractPortlet.getExpirationMillis().longValue();
                }
              }
             
                        if (cachePeriod > 0 && abstractPortlet != null)
                        {
                                String s = 
TurbineVelocity.handleRequest(context, templatePath);
                                abstractPortlet.setExpirationMillis(
                                        cachePeriod + 
System.currentTimeMillis());
                                element = new JetspeedClearElement(s);
  
                        }
                        else
                        {
                                String s = TurbineVelocity.handleRequest(
                                        context, templatePath);
                                element = new JetspeedClearElement(s);
                        }
              
              
            }
          catch (Exception e)
            {
              element = new JetspeedClearElement(e.toString());
              logger.error("VelocityViewProcessor - had problems handling 
request - " + e);
              e.printStackTrace();
            }
  
          TurbineVelocity.requestFinished(context);
  
          if (element == null)
            {
              element = new JetspeedClearElement("");
            }
  
          return element;
        }
    }
  
  
  
  1.1                  
jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/viewprocessor/BufferedJSPViewProcessor.java
  
  Index: BufferedJSPViewProcessor.java
  ===================================================================
  /*
   * Copyright 2005 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.jetspeed.portal.portlets.viewprocessor;
  
  // Ecs
  import org.apache.ecs.StringElement;
  
  // Jetspeed portal
  import org.apache.jetspeed.portal.Portlet;
  import org.apache.jetspeed.portal.portlets.GenericMVCContext;
  import org.apache.jetspeed.services.TemplateLocator;
  import org.apache.jetspeed.services.Registry;
  import org.apache.jetspeed.services.jsp.HttpBufferedResponse;
  import org.apache.jetspeed.services.jsp.JetspeedJspService;
  import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
  import org.apache.jetspeed.services.logging.JetspeedLogger;
  import org.apache.jetspeed.om.registry.PortletEntry;
  import org.apache.jetspeed.util.JetspeedClearElement;
  import org.apache.jetspeed.util.ServiceUtil;
  
  // Turbine stuff
  import org.apache.turbine.services.jsp.JspService;
  
  // Turbine util
  import org.apache.turbine.util.RunData;
  
  //java stuff
  import java.io.PrintWriter;
  import java.io.StringWriter;
  import java.util.Iterator;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.RequestDispatcher;
  
  /**
   * Version of the JSPViewProcess that buffers its content
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Tod Kuebler</a>
   * @author <a href="mailto:[EMAIL PROTECTED]">Scott Weaver</a>
   * @author <a href="mailto:[EMAIL PROTECTED]">Mark Orciuch</a>
   * @author <a href="mailto:[EMAIL PROTECTED]">Jeremy Ford</a>
   * @version $Id: BufferedJSPViewProcessor.java,v 1.1 2005/04/02 17:24:04 
jford Exp $
   */
  public class BufferedJSPViewProcessor
  implements ViewProcessor
  {
  
      /**
       * Static initialization of the logger for this class
       */    
      private static final JetspeedLogger logger = 
JetspeedLogFactoryService.getLogger(BufferedJSPViewProcessor.class.getName());
      
      /** Creates a new instance of JSPViewProcessor */
      public BufferedJSPViewProcessor()
      {
      }
  
      public Object processView(GenericMVCContext context)
      {
        String result = "";
        
          Portlet portlet = (Portlet) context.get("portlet");
          RunData data = (RunData) context.get("data");
          HttpServletRequest request = data.getRequest();
          String template = (String) context.get("template");
          logger.info("JSPViewProcessor - processing template " + template);
  
          try
          {
  
              // Allow access to portlet from .jsp template
              request.setAttribute("portlet", portlet);
  
              // put context in attribute so you can get to it from .jsp 
template
              request.setAttribute("context", context);
  
              // Add js_peid out of convenience
              request.setAttribute("js_peid", portlet.getID());
  
              // Add rundata out of convenience (JspService.RUNDATA differs 
from GenericMVCPortlet.RUNDATA)
              request.setAttribute(JspService.RUNDATA, data);
  
              // Retrieve the URL. For backward compatibility, use the URL 
first 
              // and then fallback to "template" parameter
              PortletEntry pe = (PortletEntry) 
Registry.getEntry(Registry.PORTLET, portlet.getName());
  
              // Files referenced from default templates folder will be 
processed
              // using JspService. Otherwise, they will be loaded using 
EcsServletElement
              // from where ever they came from.
              if (pe.getURL() == null || pe.getURL().trim().length() == 0)
              {
  
                  if (template != null && -1 == template.indexOf(".jsp"))
                  {
                      template = template + ".jsp";
                  }
  
                  logger.info("JSPViewProcessor - locating template - " + 
data.toString() 
                           + " - " + template);
  
                  //we use the template locator to translate the template
                  String locatedTemplate = 
TemplateLocator.locatePortletTemplate(data, template);
                  logger.info("JSPViewProcessor - located template: " + 
locatedTemplate);
  
                  /*if (locatedTemplate == null)
                  {
                      locatedTemplate = 
TemplateLocator.locateScreenTemplate(data, template);
                      if (locatedTemplate != null)
                      {
                          locatedTemplate = "/screens" + locatedTemplate;
                      }
                      logger.debug("JSPViewProcessor - located screen template: 
" + locatedTemplate);
                  } */
  
                  JetspeedJspService service = (JetspeedJspService) 
ServiceUtil.getServiceByName(JspService.SERVICE_NAME);
  
                  // this is only necessary if we don't run in a JSP page 
environment
                  // but better be safe than sorry...
                  service.addDefaultObjects(data);
  
                  // handle request
                  result = service.handleBufferedRequest(data, locatedTemplate, 
false);
  
              }
              else
              {
                  // Build parameter list to be passed with the jsp
                  Iterator names = 
portlet.getPortletConfig().getInitParameterNames();
                  while (names.hasNext()) 
                  {
                      String name = (String) names.next();
                      String value = (String) 
portlet.getPortletConfig().getInitParameter(name);
                      data.getParameters().setString(name, value);
                  }
  
                  template = pe.getURL();
  
                  if (logger.isDebugEnabled())
                  {
                      logger.debug("JSPViewProcessor - serving jsp directly 
using: " + template);
                  }
  
                  // get the RequestDispatcher for the JSP
                  StringWriter writer = new StringWriter();
                HttpBufferedResponse response = new 
HttpBufferedResponse(data.getResponse(), new PrintWriter(writer));
                
                  RequestDispatcher dispatcher = 
data.getServletContext().getRequestDispatcher(template);
                  data.getOut().flush();
                  dispatcher.include(data.getRequest(), response);
                  
                  result = writer.toString();
              }
  
          }
          catch (Exception e)
          {
  
              String message = "JSPViewProcessor: Could not include the 
following JSP Page:  [" + template + "] :\n\t" 
                               + e.getMessage();
              logger.error(message, e);
  
              return new StringElement(message);
          }
  
          return new JetspeedClearElement(result);
      }
  
      /** Process the template passed in the context
       * (context.get("template")).  Invoked by the GenericMVCPortlet
       * after action handling to process the template type
       * in question.
       *
       */
      public void init(Portlet portlet)
      {
      }
  }
  
  
  

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

Reply via email to