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]