[jbpm-commits] JBoss JBPM SVN: r5803 - in projects/report-server/trunk: core and 2 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Oct 26 13:16:26 EDT 2009
Author: heiko.braun at jboss.com
Date: 2009-10-26 13:16:25 -0400 (Mon, 26 Oct 2009)
New Revision: 5803
Modified:
projects/report-server/trunk/core/pom.xml
projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/BirtService.java
projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/IntegrationConfig.java
projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/RenderMetaData.java
projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/ReportFacade.java
projects/report-server/trunk/pom.xml
projects/report-server/trunk/report-server.iml
projects/report-server/trunk/server/pom.xml
Log:
Begin work on template extensions
Modified: projects/report-server/trunk/core/pom.xml
===================================================================
--- projects/report-server/trunk/core/pom.xml 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/core/pom.xml 2009-10-26 17:16:25 UTC (rev 5803)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.jboss.bpm</groupId>
<artifactId>report-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -180,6 +180,11 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ </dependency>
+
</dependencies>
Modified: projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/BirtService.java
===================================================================
--- projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/BirtService.java 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/BirtService.java 2009-10-26 17:16:25 UTC (rev 5803)
@@ -26,6 +26,15 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ConcurrentHashMap;
+import java.io.File;
+import java.io.FileFilter;
+
/**
* Core BIRT service component. Requires to step through the lifecycle
* before it can be used:
@@ -50,18 +59,87 @@
private enum State {NONE, CREATED, STARTED, STOPPED, DESTROYED};
private State currentState = State.NONE;
+ private Map<String, IReportRunnable> cache = new HashMap<String, IReportRunnable>();
+
+ private boolean keepWatching = true;
+
+ private List<String> reportNames = new ArrayList<String>();
+
public BirtService(IntegrationConfig iConfig)
{
this.iConfig = iConfig;
}
+ /* blocking call*/
public void create()
{
this.engine = BirtEngineFactory.newInstance(iConfig);
+
+ // scan for reports and initialize watchdog
+ Thread watchDog = new Thread(
+ new Runnable()
+ {
+ public void run()
+ {
+ while(keepWatching)
+ {
+ File reportdir = new File(iConfig.getReportDir());
+ assert reportdir.isDirectory();
+
+ File[] reportTemplates = reportdir.listFiles(
+ new FileFilter()
+ {
+ public boolean accept(File f)
+ {
+ return f.getName().endsWith(".rptdesign");
+ }
+ }
+ );
+
+ synchronized(reportNames)
+ {
+ reportNames.clear();
+ for(File f : reportTemplates)
+ reportNames.add(f.getName());
+ }
+
+ try
+ {
+ Thread.sleep(5*1000);
+ }
+ catch (InterruptedException e)
+ {
+ log.error(e);
+ }
+ }
+
+ }
+ }
+ );
+ watchDog.setName(BirtService.class.getName()+"-WatchDog");
+ watchDog.start();
+
log.info("Service created: " +this.engine);
currentState = State.CREATED;
}
+ /* non blocking init */
+ public void createAsync()
+ {
+ Thread t = new Thread(
+ new Runnable()
+ {
+ public void run()
+ {
+ log.info("Creating BIRT service in the background");
+ create();
+ }
+ }
+ );
+
+ t.start();
+ }
+
public void start()
{
if(currentState!=State.CREATED)
@@ -75,6 +153,8 @@
if(currentState!=State.STARTED)
throw new IllegalStateException("Please call start lifecylce before stopping the service");
+ keepWatching=false; // shutdown watchdog
+
currentState = State.STOPPED;
}
@@ -109,8 +189,15 @@
try
{
- //Open a report design
- IReportRunnable design = engine.openReportDesign(iConfig.getReportDir()+metaData.getReportName());
+ //Open a (cached) report design
+ IReportRunnable design = cache.get(metaData.getReportName());
+ if(null==design)
+ {
+ design = engine.openReportDesign(
+ iConfig.getReportDir()+metaData.getReportName()
+ );
+ cache.put(metaData.getReportName(), design);
+ }
//Create runRenderTask to run and render the report,
IRunAndRenderTask runRenderTask = engine.createRunAndRenderTask(design);
@@ -141,7 +228,7 @@
HTMLRenderOption htmlOptions = new HTMLRenderOption( options);
htmlOptions.setImageHandler(new HTMLServerImageHandler());
htmlOptions.setImageDirectory(iConfig.getImageDirectory());
- htmlOptions.setBaseImageURL(iConfig.getImageBaseUrl());
+ htmlOptions.setBaseImageURL(metaData.getImageBaseUrl());
htmlOptions.setHtmlPagination(false);
htmlOptions.setHtmlRtLFlag(false);
//Setting this to true removes html and body tags
@@ -185,4 +272,9 @@
{
return currentState;
}
+
+ public String[] getReportNames()
+ {
+ return reportNames.toArray(new String[] {});
+ }
}
Modified: projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/IntegrationConfig.java
===================================================================
--- projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/IntegrationConfig.java 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/IntegrationConfig.java 2009-10-26 17:16:25 UTC (rev 5803)
@@ -63,12 +63,6 @@
this.outputDir = ensureDirectoryName(outputDir);
}
-
- public String getImageBaseUrl()
- {
- return imageBaseUrl;
- }
-
public void setImageBaseUrl(String imageBaseUrl)
{
this.imageBaseUrl = ensureDirectoryName(imageBaseUrl);
Modified: projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/RenderMetaData.java
===================================================================
--- projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/RenderMetaData.java 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/RenderMetaData.java 2009-10-26 17:16:25 UTC (rev 5803)
@@ -26,67 +26,79 @@
/**
* Drives a {@link org.jboss.bpm.report.BirtService#render(RenderMetaData)} call.
- *
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class RenderMetaData
{
- public enum Format {HTML, PDF};
+ public enum Format {HTML, PDF};
- private ClassLoader classloader;
- private String reportName;
- private Format format;
- private Map parameters = new HashMap();
+ private ClassLoader classloader;
+ private String reportName;
+ private Format format;
+ private Map parameters = new HashMap();
+ private String imageBaseUrl;
- public RenderMetaData()
- {
- }
+ public RenderMetaData()
+ {
+ }
- public RenderMetaData(ClassLoader classloader, String reportName, Format format, String imageBaseUrl)
- {
- this.classloader = classloader;
- this.reportName = reportName;
- this.format = format;
- }
+ public RenderMetaData(ClassLoader classloader, String reportName, Format format, String imageBaseUrl)
+ {
+ this.classloader = classloader;
+ this.reportName = reportName;
+ this.format = format;
+ this.imageBaseUrl = imageBaseUrl;
+ }
- public ClassLoader getClassloader()
- {
- return classloader;
- }
+ public String getImageBaseUrl()
+ {
+ return imageBaseUrl;
+ }
- public void setClassloader(ClassLoader classloader)
- {
- this.classloader = classloader;
- }
+ public void setImageBaseUrl(String imageBaseUrl)
+ {
+ this.imageBaseUrl = imageBaseUrl;
+ }
- public String getReportName()
- {
- return reportName;
- }
+ public ClassLoader getClassloader()
+ {
+ return classloader;
+ }
- public void setReportName(String reportName)
- {
- this.reportName = reportName;
- }
+ public void setClassloader(ClassLoader classloader)
+ {
+ this.classloader = classloader;
+ }
- public Format getFormat()
- {
- return format;
- }
+ public String getReportName()
+ {
+ return reportName;
+ }
- public void setFormat(Format format)
- {
- this.format = format;
- }
+ public void setReportName(String reportName)
+ {
+ this.reportName = reportName;
+ }
+ public Format getFormat()
+ {
+ return format;
+ }
- public String toString()
- {
- return "RenderMetaData {reportName="+reportName+", format="+format+"}";
- }
+ public void setFormat(Format format)
+ {
+ this.format = format;
+ }
- public Map getParameters()
- {
- return parameters;
- }
+
+ public String toString()
+ {
+ return "RenderMetaData {reportName="+reportName+", format="+format+"}";
+ }
+
+ public Map getParameters()
+ {
+ return parameters;
+ }
}
Modified: projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/ReportFacade.java
===================================================================
--- projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/ReportFacade.java 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/core/src/main/java/org/jboss/bpm/report/ReportFacade.java 2009-10-26 17:16:25 UTC (rev 5803)
@@ -33,6 +33,9 @@
import java.util.Enumeration;
import java.util.Map;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
/**
* BIRT integration facade.<p>
*
@@ -58,7 +61,20 @@
private BirtService birtService;
private boolean isInitialized;
- public void lazyInitialize(HttpServletRequest request)
+
+ public ReportFacade()
+ {
+ try
+ {
+ initBirtService();
+ }
+ catch (BirtInitException e)
+ {
+ log.error("Failed to initialize BIRT service", e);
+ }
+ }
+
+ public void initBirtService()
throws BirtInitException
{
if(!isInitialized)
@@ -85,17 +101,7 @@
iConfig.setBirtHome(defaultBirtHome);
iConfig.setOutputDir( birtOutputDir );
iConfig.setReportDir( birtDataDir );
-
- StringBuffer sb = new StringBuffer();
- sb.append("http://");
- sb.append(request.getServerName()).append(":");
- sb.append(request.getServerPort());
- sb.append(request.getContextPath());
- sb.append(request.getServletPath());
- sb.append("/report/view/image");
-
- iConfig.setImageBaseUrl(sb.toString());
-
+
log.info("BIRT home: " +iConfig.getBirtHome());
log.info("Output dir: " +iConfig.getOutputDir());
log.info("Report dir: " +iConfig.getReportDir());
@@ -103,7 +109,7 @@
try
{
this.birtService = new BirtService(iConfig);
- this.birtService.create();
+ this.birtService.createAsync();
}
catch (Throwable t)
{
@@ -114,6 +120,18 @@
}
}
+ private String buildImageUrl(HttpServletRequest request)
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append("http://");
+ sb.append(request.getServerName()).append(":");
+ sb.append(request.getServerPort());
+ sb.append(request.getContextPath());
+ sb.append(request.getServletPath());
+ sb.append("/report/view/image");
+ return sb.toString();
+ }
+
@GET
@Path("view/{fileName}")
@Produces("text/html")
@@ -125,15 +143,14 @@
)
{
try
- {
- lazyInitialize(request);
-
+ {
Map queryParams = convertRequestParametersToMap(request);
RenderMetaData renderMeta = new RenderMetaData();
renderMeta.setReportName(fileName);
renderMeta.setFormat(RenderMetaData.Format.HTML);
renderMeta.setClassloader(Thread.currentThread().getContextClassLoader());
+ renderMeta.setImageBaseUrl(buildImageUrl(request));
renderMeta.getParameters().putAll(queryParams);
String outputFileName = birtService.render(renderMeta);
@@ -142,11 +159,7 @@
File reportFile = new File(absoluteFile);
return Response.ok(reportFile).type("text/html").build();
- }
- catch (BirtInitException e2)
- {
- return gracefulException(e2);
- }
+ }
catch(Throwable e1)
{
return gracefulException(e1);
@@ -162,21 +175,12 @@
request
)
{
- try
- {
- lazyInitialize(request);
-
- String imageDir = birtService.getIntegrationConfig().getImageDirectory();
- String absName = imageDir + fileName;
- File imageFile = new File(absName);
- if(!imageFile.exists())
+ String imageDir = birtService.getIntegrationConfig().getImageDirectory();
+ String absName = imageDir + fileName;
+ File imageFile = new File(absName);
+ if(!imageFile.exists())
throw new IllegalArgumentException("Image " +absName+" doesn't exist");
- return Response.ok(imageFile).build();
- }
- catch (BirtInitException e)
- {
- return gracefulException(e);
- }
+ return Response.ok(imageFile).build();
}
private Response gracefulException(Throwable e)
@@ -201,6 +205,21 @@
return parameterMap;
}
+ @GET
+ @Path("templates")
+ @Produces("application/json")
+ public Response getReportNames()
+ {
+ return createJsonResponse(birtService.getReportNames());
+ }
+
+ private Response createJsonResponse(Object wrapper)
+ {
+ Gson gson = new GsonBuilder().create();
+ String json = gson.toJson(wrapper);
+ return Response.ok(json).type("application/json").build();
+ }
+
public class BirtInitException extends Exception
{
public BirtInitException(String message)
@@ -213,4 +232,5 @@
super(message, cause);
}
}
+
}
Modified: projects/report-server/trunk/pom.xml
===================================================================
--- projects/report-server/trunk/pom.xml 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/pom.xml 2009-10-26 17:16:25 UTC (rev 5803)
@@ -4,7 +4,7 @@
<name>JBoss BPM - Reporting (BIRT Integration)</name>
<groupId>org.jboss.bpm</groupId>
<artifactId>report-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- Parent -->
@@ -90,6 +90,12 @@
</exclusions>
</dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
Modified: projects/report-server/trunk/report-server.iml
===================================================================
--- projects/report-server/trunk/report-server.iml 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/report-server.iml 2009-10-26 17:16:25 UTC (rev 5803)
@@ -265,6 +265,24 @@
<SOURCES />
</library>
</orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../.m2/repository/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library" exported="">
+ <library name="M2 Dep: com.google.code.gson:gson:jar:1.2.2:compile">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../.m2/repository/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
<orderEntryProperties />
</component>
</module>
Modified: projects/report-server/trunk/server/pom.xml
===================================================================
--- projects/report-server/trunk/server/pom.xml 2009-10-26 16:40:32 UTC (rev 5802)
+++ projects/report-server/trunk/server/pom.xml 2009-10-26 17:16:25 UTC (rev 5803)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.jboss.bpm</groupId>
<artifactId>report-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
More information about the jbpm-commits
mailing list