[jboss-svn-commits] JBL Code SVN: r7008 - in labs/reportingservices/trunk/dev/modules/engine/birtreport: . src src/main src/main/java src/main/java/org src/main/java/org/jboss src/main/java/org/jboss/reporting src/main/java/org/jboss/reporting/server src/main/java/org/jboss/reporting/server/engine
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Oct 22 12:08:19 EDT 2006
Author: romainguinot at gmail.com
Date: 2006-10-22 12:08:17 -0400 (Sun, 22 Oct 2006)
New Revision: 7008
Added:
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReport.java
labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReportMBean.java
Log:
initial BIRT engine implementation , recursive :)
Added: labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReport.java
===================================================================
--- labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReport.java 2006-10-22 16:06:10 UTC (rev 7007)
+++ labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReport.java 2006-10-22 16:08:17 UTC (rev 7008)
@@ -0,0 +1,228 @@
+package org.jboss.reporting.server.engine;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.logging.Level;
+
+import org.eclipse.birt.core.exception.BirtException;
+import org.eclipse.birt.core.framework.Platform;
+import org.eclipse.birt.report.engine.api.EngineConfig;
+import org.eclipse.birt.report.engine.api.EngineException;
+import org.eclipse.birt.report.engine.api.HTMLRenderOption;
+import org.eclipse.birt.report.engine.api.IRenderOption;
+import org.eclipse.birt.report.engine.api.IRenderTask;
+import org.eclipse.birt.report.engine.api.IReportDocument;
+import org.eclipse.birt.report.engine.api.IReportEngine;
+import org.eclipse.birt.report.engine.api.IReportEngineFactory;
+import org.eclipse.birt.report.engine.api.IReportRunnable;
+import org.eclipse.birt.report.engine.api.IRunTask;
+import org.eclipse.birt.report.engine.api.RenderOptionBase;
+import org.jboss.logging.Logger;
+import org.jboss.mx.util.MBeanProxyExt;
+import org.jboss.reporting.api.ReportData;
+import org.jboss.system.ServiceMBeanSupport;
+import org.jboss.system.server.ServerConfigImplMBean;
+
+public class BirtReport extends ServiceMBeanSupport implements ReportEngineModule
+{
+
+ private final Logger log = Logger.getLogger(BirtReport.class);// provide logging
+ private final String BIRT_TEMP_DIR_NAME = "jrs_birt"; // tmp dir name for birt to work
+ /**
+ * The target file name
+ */
+ //protected String targetFile = null;
+ /**
+ /**
+ * the output locale.
+ */
+ protected String locale = "en";
+ /**
+ * the default output format, used in Render and RunAndRender.
+ */
+ protected String format = "html"; // The output format, defaults to HTML
+ /**
+ * used to decorate the HTML output, used in Render and RunAndRender mode.
+ */
+ protected String htmlType = "HTML"; // The type of html
+ /**
+ * the output encoding, used in html format in Render and RunAndRender
+ * modes.
+ */
+ protected String encoding = "utf-8"; // the targe encoding
+ /**
+ * parameters used to execute the report, used in Run and RunAndRender modes.
+ */
+ protected HashMap params = new HashMap( ); // the input params
+ /**
+ * output page number, used in Render mode.
+ */
+ protected long pageNumber = -1;
+
+ /**
+ * engine used to execute the tasks.
+ */
+ private IReportEngine engine;
+
+ private final String COMPILED_EXTENSION = ".rptdocument";
+
+ public Object compileReport(InputStream in_stream) throws Exception
+ {
+ try
+ {
+ IReportRunnable runnable = engine.openReportDesign( in_stream );// parse the source to get the report runnable
+ IRunTask task = engine.createRunTask( runnable );// create the report task
+ //HashMap inputValues = evaluateParameterValues( runnable );// set the paramter values
+ //task.setParameterValues( inputValues );
+
+ task.setAppContext( new HashMap( ) );// set the application context
+ String tmpDoc = System.getProperty("birt.reports.compile.temp")+Long.toString(System.currentTimeMillis())+COMPILED_EXTENSION;
+ task.run( tmpDoc );// run the task to create the report document
+ task.close( );// close the task.
+ IReportDocument rptdoc = engine.openReportDocument(tmpDoc);
+
+ return rptdoc;
+ }
+ catch ( EngineException e )
+ {
+ log.error( e.getMessage( ), e );
+ return null;
+ }
+ }
+
+ public byte[] runReportToPdf(String in_reportName, Object in_report, Map in_parameters, String in_datasource_jndi_name) throws Exception
+ {
+ try
+ {
+ IReportDocument document=(IReportDocument)in_report;
+ IRenderTask task = engine.createRenderTask( document );// create the render task
+ IRenderOption options;// set report render options
+ options = new RenderOptionBase();
+
+ options.setOutputFormat( format );// set the output format
+ options.getOutputSetting( ).put( HTMLRenderOption.URL_ENCODING,encoding );// setup the output encoding
+
+ task.setRenderOption( options );// set the render options
+
+ task.setLocale( getLocale( locale ) );// setup the locale
+ /** @TODO : decide whether to store the reports on the filesystem or keep it in memory **/
+ String tmpReport = System.getProperty("birt.reports.compile.temp")+Long.toString(System.currentTimeMillis())+in_reportName;
+ //OutputStream os = new ByteArrayOutputStream();
+ if ( pageNumber <= 0 )// setup the output file
+ {
+ options.setOutputFileName( in_reportName );
+ //options.setOutputStream(os);
+ task.render();
+ }
+ else
+ {
+ options.setOutputFileName( in_reportName );
+ //options.setOutputStream(os);
+ task.setPageNumber(pageNumber);
+ task.render();
+ }
+ task.close( );
+ File tmpReportFile = new File(tmpReport);
+ /** @TODO : DELETE TEMP FILES !!! **/
+
+ return getBytesFromFile(tmpReportFile);
+
+ }
+ catch ( org.eclipse.birt.report.engine.api.EngineException e )
+ {
+ log.error(e.getMessage( ), e );
+ return null;
+ }
+ }
+
+ public byte[] runReportToPdf(String in_reportName, Object in_report, Map in_parameters, ReportData in_data) throws Exception
+ {
+ // temporary
+ return runReportToPdf(in_reportName,in_report,null,"");
+ }
+
+ /**
+ * Configure required properties from server config info
+ */
+ public void startService()
+ {
+ File birt_temp_dir=null;
+
+ ServerConfigImplMBean serverConfig = (ServerConfigImplMBean)
+ MBeanProxyExt.create(ServerConfigImplMBean.class,ServerConfigImplMBean.OBJECT_NAME, server);
+ birt_temp_dir = new File(serverConfig.getServerTempDir(),BIRT_TEMP_DIR_NAME);
+ if ( ! birt_temp_dir.exists()) birt_temp_dir.mkdir();
+ System.setProperty("birt.reports.compile.temp", birt_temp_dir.getAbsolutePath());
+
+ if ( engine == null )
+ {
+ EngineConfig config = new EngineConfig( );
+ config.setEngineHome(serverConfig.getServerHomeDir().getAbsolutePath()+"/deploy/reporting-services.sar/");
+ try
+ {
+ log.info("Attempting to start platform");
+ Platform.startup( config );
+ }
+ catch (BirtException e)
+ {
+ e.printStackTrace();
+ }
+ log.info("Platform started");
+ IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
+ engine = factory.createReportEngine( config );
+ engine.changeLogLevel( Level.WARNING );
+ }
+ }
+ /**
+ * Private function to convert a locale name string to a locale object
+ *
+ * @param locale -locale name string
+ * @return A locale object
+ */
+ private Locale getLocale( String locale )
+ {
+ int index = locale.indexOf( '_' );
+ if ( index != -1 )
+ {
+ // e.g, zh_CN (language_country)
+ String language = locale.substring( 0, index );
+ String country = locale.substring( index + 1 );
+ return new Locale( language, country );
+ }
+
+ // e.g, en (language)
+ return new Locale( locale );
+ }
+
+ public byte[] getBytesFromFile(File file) throws IOException
+ {
+ InputStream is = new FileInputStream(file);
+
+ long length = file.length();
+ // You cannot create an array using a long type.
+ // It needs to be an int type.Before converting to an int type, check to ensure that file is not larger than Integer.MAX_VALUE.
+ if (length > Integer.MAX_VALUE) return null;
+ byte[] bytes = new byte[(int)length];// Create the byte array to hold the data
+
+ // Read in the bytes
+ int offset = 0;
+ int numRead = 0;
+ while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) offset += numRead;
+
+ // Ensure all the bytes have been read in
+ if (offset < bytes.length)
+ throw new IOException("Could not completely read file "+file.getName());
+
+ // Close the input stream and return bytes
+ is.close();
+ return bytes;
+ }
+
+
+
+}
Added: labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReportMBean.java
===================================================================
--- labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReportMBean.java 2006-10-22 16:06:10 UTC (rev 7007)
+++ labs/reportingservices/trunk/dev/modules/engine/birtreport/src/main/java/org/jboss/reporting/server/engine/BirtReportMBean.java 2006-10-22 16:08:17 UTC (rev 7008)
@@ -0,0 +1,20 @@
+/*
+ * Generated file - Do not edit!
+ */
+package org.jboss.reporting.server.engine;
+
+/**
+ * MBean interface.
+ */
+public interface BirtReportMBean extends org.jboss.system.ServiceMBean {
+
+ //default object name
+ public static final javax.management.ObjectName OBJECT_NAME = org.jboss.mx.util.ObjectNameFactory.create("reporting:service=ReportEngine,type=RPTDESIGN");
+
+ java.lang.Object compileReport(java.io.InputStream in_stream) throws java.lang.Exception;
+
+ byte[] runReportToPdf(java.lang.String in_reportName,java.lang.Object in_report,java.util.Map in_parameters,java.lang.String in_datasource_jndi_name) throws java.lang.Exception;
+
+ byte[] runReportToPdf(java.lang.String in_reportName,java.lang.Object in_report,java.util.Map in_parameters,org.jboss.reporting.api.ReportData in_data) throws java.lang.Exception;
+
+}
More information about the jboss-svn-commits
mailing list