[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