[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