webwork/src/main/webwork/view/jasperreports ValueStackDataSource.java,NONE,1.1 JasperReportViewServlet.java,NONE,1.1

[email protected] Sun, 14 Jul 2002 21:21:01 -0700
Newsgroups gmane.comp.java.webwork.cvs
Message-ID <[email protected]>
Update of /cvsroot/webwork/webwork/src/main/webwork/view/jasperreports
In directory usw-pr-cvs1:/tmp/cvs-serv25884/src/main/webwork/view/jasperreports

Added Files:
	ValueStackDataSource.java JasperReportViewServlet.java 
Log Message:
added preliminary support for JasperReports

--- NEW FILE: ValueStackDataSource.java ---
package webwork.view.jasperreports;

import java.io.Serializable;
import java.util.Iterator;
import java.util.Map;

import webwork.util.MakeIterator;
import webwork.util.ValueStack;

import dori.jasper.engine.JRDataSource;
import dori.jasper.engine.JRException;
import dori.jasper.engine.JRField;

public class ValueStackDataSource implements JRDataSource
{

	ValueStack valueStack;
	Iterator iterator;
	boolean firstTimeThrough = true;

	public ValueStackDataSource(ValueStack valueStack, String dataSource)
	{
		this.valueStack = valueStack;
		Object dataSourceValue = valueStack.findValue(dataSource);
		if (dataSourceValue != null)
		{
			iterator = MakeIterator.convert(dataSourceValue);
		}
	}

	public boolean next() throws JRException
	{
		if (firstTimeThrough)
		{
			firstTimeThrough = false;
		} else
		{
			valueStack.popValue();
		}

		if (iterator.hasNext())
		{
			valueStack.pushValue(iterator.next());
			return true;
		} else
		{
			return false;
		}
	}

	public Object getFieldValue(JRField field) throws JRException
	{
		Object value = valueStack.findValue(field.getName());
//		System.out.println("field: " + field.getName() + "/" + value.toString());
		return value;
	}

}
--- NEW FILE: JasperReportViewServlet.java ---
/*
 * WebWork, Web Application Framework
 *
 * Distributable under Apache license.
 * See terms of license at opensource.org
 */
package webwork.view.jasperreports;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import webwork.util.ValueStack;

import dori.jasper.engine.JREmptyDataSource;
import dori.jasper.engine.JRException;
import dori.jasper.engine.JasperManager;
import dori.jasper.engine.JasperPrint;
import dori.jasper.engine.JasperReport;
import dori.jasper.engine.JasperRunManager;

public class JasperReportViewServlet extends HttpServlet
{

	private final String SAX_DRIVER = "org.xml.sax.driver";
	private final String SAX_PARSER = "org.apache.xerces.parsers.SAXParser";

	public void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException
	{

		ValueStack stack = ValueStack.getStack(request);
		String dataSource = request.getParameter("dataSource");
		ValueStackDataSource stackDataSource = new ValueStackDataSource(stack, dataSource);

		String systemId = getServletContext().getRealPath(request.getServletPath());
		String jasperRequest = systemId.substring(0, systemId.lastIndexOf(".jr"));

		Map parameters = new HashMap();
		parameters.put("ReportTitle", "JasperReports Project Description");
		File directory = new File(systemId.substring(0, systemId.lastIndexOf('/')));
		parameters.put("reportDirectory", directory);

		if (System.getProperty(SAX_DRIVER) == null)
		{
			System.setProperty(SAX_DRIVER, SAX_PARSER);
		}

		byte[] pdf;
		try
		{
			JasperReport jasperReport = JasperManager.compileReport(jasperRequest + ".xml");
			pdf = JasperRunManager.runReportToPdf(jasperReport, parameters, stackDataSource);
		} catch (JRException e)
		{
			e.printStackTrace();
			throw new ServletException(e.getMessage());
		}

		response.setContentType("application/pdf");
		response.setContentLength(pdf.length);
		ServletOutputStream ouputStream;
		try
		{
			ouputStream = response.getOutputStream();
			ouputStream.write(pdf);
			ouputStream.flush();
			ouputStream.close();
		} catch (IOException e)
		{
			e.printStackTrace();
			throw new ServletException(e.getMessage());
		}

	}

}




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf