/*
* Copyright 2000-2001,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.jetspeed.util.servlet;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import org.apache.turbine.util.RunData;
import org.apache.ecs.ConcreteElement;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
/**
* NOTE: The use of Ecs for aggregating portlet content is deprecated!
* This utility class will be removed once we don't have the ecs
* dependency any more.
*
* EcsServletElement encapsulates a servlet/JSP within the context of ECS
* HTML-generation.
*
* This is a workaround to allow invoking servlets from JetSpeed Portlets.
* The servlet will be invoked when traversal of an ECS tree during writing
* reaches the EcsServlet element.
*/
public class EcsServletElement extends ConcreteElement
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(EcsServletElement.class.getName());
/** RunData object to obtain HttpServletRequest/Response from. */
private RunData rundata;
/** URL of servlet to include */
private String url;
/**
* Construct an ECS element from a given rundata object and URL.
*
* @param rundata Rundata object that holds the HttpServletRequest/Response
* objects to be used for servlet invocation.
* @param url The URL of the servlet to invoke.
*/
public EcsServletElement(RunData rundata, String urlString)
{
this.url = urlString;
this.rundata = rundata;
}
/** Builds the content of this element and output it in the
* passed OutputStream
*
* @param out the OutputStream to use for generating content
*/
public void output(OutputStream out)
{
output(new PrintWriter(out));
}
/** Builds the content of this element and output it in the
* passed PrintWriter
*
* @param out the PrintWriter to use for generating content
*/
public void output(PrintWriter out) {
ServletContext ctx = rundata.getServletContext();
RequestDispatcher dispatcher = ctx.getRequestDispatcher(url);
try
{
// try to flush any data before dispatching request
// rundata.getResponse().flushBuffer();
// call the servlet/JSP
dispatcher.include(
rundata.getRequest(),
rundata.getResponse() );
}
catch (Exception e)
{
String message = "EcsServletElement: Could not include the following URL: "
+ url + " : " + e.getMessage();
logger.error( message, e );
out.print(message);
}
}
}