/*
* 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;
// Java classes
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.util.Map;
// SAX Classes
import org.xml.sax.InputSource;
// ECS classes
import org.apache.ecs.ConcreteElement;
// Jetspeed classes
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.util.SimpleTransform;
/**
* 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.
*
* EcsStylesheetElement encapsulates XML data, a stylesheet and the parameters for
* processing the XML data within the context of ECS markup.
*
* This is a workaround to allow invoking stylesheets from JetSpeed Portlets without
* buffering strings with the transformation results. Transformation is invoked when
* traversal of an ECS tree during writing reaches the EcsStylesheetElement.
*
* @author Thomas Schaeck (schaeck@de.ibm.com)
*/
public class EcsStylesheetElement extends ConcreteElement
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(EcsStylesheetElement.class.getName());
/**
* Processes the referenced XML content using the referenced XSLT stylesheet and
* parameters.
*
* @param out The output stream to which the result shall be written.
*/
public void output(OutputStream out)
{
output(new PrintWriter(out));
}
/**
* Processes the referenced XML content using the referenced XSLT stylesheet and
* parameters.
*
* @param out The print writer to be used for writing the result.
*/
public void output(PrintWriter out)
{
try {
StringReader rdr = new StringReader (SimpleTransform.transform( content_, stylesheet_, params_ ) );
int count = 0;
char buff[] = new char[1024];
while( (count = rdr.read( buff, 0, buff.length ) ) > 0 ) {
out.write( buff, 0, count );
}
/* // Get a new XSLT Processor
XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
// set the parameters for the stylesheet
if (params_ != null)
{
Enumeration keys = params_.keys();
while (keys.hasMoreElements())
{
String name = (String) keys.nextElement();
processor.setStylesheetParam(name, (String) params_.get(name));
}
}
// process the stylesheet
processor.process( content_, stylesheet_, new XSLTResultTarget(out) ); */
} catch (Exception e)
{
String message = "ECSStylesheetElement.output(PrintWriter): error processing stylesheet" + e.getMessage();
logger.error(message, e);
out.print(message);
e.printStackTrace(out);
}
}
/** XML content to be processed. */
private InputSource content_;
/** Parameters to be used by the stylesheet. */
private Map params_;
/** XSLT stylesheet to be used for rendering the content. */
private InputSource stylesheet_;
/**
* Construct an ECS element that will render a given XML dicument using a given
* stylesheet and parameters when one of its output methods is invoked.
*
* @param content XML content to be processed
* @param stylesheet XSLT stylesheet to be used for processing the content
* @param params parameters for the stylesheet
*/
public EcsStylesheetElement( InputSource content,
InputSource stylesheet,
Map params )
{
content_ = content;
stylesheet_ = stylesheet;
params_ = params;
}
}