• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: jasperreports framework
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: jasperreports framework


  • Subject: Re: jasperreports framework
  • From: Theodore Petrosky <email@hidden>
  • Date: Mon, 13 Aug 2012 07:34:14 -0700 (PDT)

Kieran,

would you like to add this to the Jasper framework? the only 'change' I had to make was from your comment:

 this.theObjectGID = theObject.globalID() // or use theObject.editingContext().globalIDForObject( theObject );

I had to use:  theObject.editingContext().globalIDForObject( theObject );

or it complained.

Ted

--- On Mon, 8/13/12, Kieran Kelleher <email@hidden> wrote:

> From: Kieran Kelleher <email@hidden>
> Subject: Re: jasperreports framework
> To: "Theodore Petrosky" <email@hidden>
> Cc: email@hidden
> Date: Monday, August 13, 2012, 8:24 AM
> I made a few tweaks
> to your code in bold font below - hope those come through -
> otherwise just compare to your original code. In case you
> find a typo, this is OTOH without code-completion
> .....
> HTH, Kieran
> PS. Look at the BackgroundTasks presentation from
> WOWODC and you will see the pattern of EO handling below
> explained there and will also see how to use a different OSC
> for your background task.
> On Aug 11, 2012, at 10:03 AM, Theodore Petrosky
> <email@hidden>
> wrote:
>
> I was playing around with Kieran's framework and I
> wanted to create a JasperReport from an EO. So, I created a
> new class that creates a 'reportTask' from an EO.
>
> This is the first time I am attempting to alter for add to a
> someone else's framework. Could you look this over? The
> only caveat that I can find is that I must create a local
> instance in a new EC of the EO before passing it into the
> class. I think Kieran mentions that in his comments in:
> ERJRFetchSpecificationReportTask.
>
> I am calling it with:
>
> public static Callable<File>
> createMeetingCheckListReportTaskFromEO(MeetingChecklist
> checklist) {
>
>     String reportDescription = "Printed
> Meeting Checklist";
>        
>     HashMap<String, Object> parameters
> = new HashMap<String, Object>();
>    
> parameters.put("reportDescription",
> reportDescription);
>     parameters.put("userName",
> "User From session");
>
>     ERJRReportTaskFromEO reportTask = new
> ERJRReportTaskFromEO(checklist,
> jasperMCLCompiledReportFileName, parameters);
>
> return reportTask;
>
> }
>
> it works, but should the creation of the new editing context
> be in the class ERJasperReportTaskFromEO?
>
>
> here is my new class:
>
> package er.jasperreports;
>
> import java.io.File;
> import java.util.HashMap;
> import java.util.Map;
> import java.util.concurrent.Callable;
>
> import
> org.apache.commons.lang.exception.NestableRuntimeException;
> import org.apache.log4j.Logger;
>
> import er.jasperreports.ERJRFoundationDataSource;
> import er.jasperreports.ERJRUtilities;
>
> import com.webobjects.eoaccess.EOEntity;
> import com.webobjects.eocontrol.EOEditingContext;
> import com.webobjects.eocontrol.EOEnterpriseObject;
> import com.webobjects.eocontrol.EOFetchSpecification;
> import com.webobjects.eocontrol.EOQualifier;
> import com.webobjects.foundation.NSArray;
> import com.webobjects.foundation.NSLog;
>
> import er.extensions.appserver.ERXApplication;
> import er.extensions.concurrency.ERXTaskPercentComplete;
> import er.extensions.eof.ERXEC;
> import er.extensions.eof.ERXEOAccessUtilities;
> import er.extensions.foundation.ERXAssert;
>
> /**
>  * A background task class that creates a JasperReports
> report in the context
>  * of a WebObjects application. Sensible defaults are used.
> It creates the JasperReport
>  * after passing in a EO.
>  *
>  * @author Ted P
>  *
>  */
> public class ERJRReportTaskFromEO implements
> Callable<File>, ERXTaskPercentComplete {
>     private static final Logger log =
> Logger.getLogger(ERJRReportTaskFromEO.class);
>    
>     private File reportFile;
>     private final String frameworkName;
>     private final String
> jasperCompiledReportFileName;
>     private Map<String, Object>
> parameters;
>    
>     private EOGlobalID theObjectGID;
>    // Use threadsafe global IDs for background
> task ivars
>
>     // iVar so we can get percentage
> complete
>     private ERJRFoundationDataSource
> jrDataSource;
>    
>     public
> ERJRReportTaskFromEO(EOEnterpriseObject theObject, String
> jasperCompiledReportFileName) {
>         this(theObject,
> jasperCompiledReportFileName, null, null);
>     }
>    
>     public
> ERJRReportTaskFromEO(EOEnterpriseObject theObject, String
> jasperCompiledReportFileName, HashMap<String, Object>
> parameters) {
>         this(theObject,
> jasperCompiledReportFileName, null, parameters);
>     }
>
>     public
> ERJRReportTaskFromEO(EOEnterpriseObject theObject, String
> jasperCompiledReportFileName, String frameworkName,
> HashMap<String, Object> parameters) {
>        
>        
> ERXAssert.PRE.notNull(theObject);
>        
> ERXAssert.PRE.notNull(jasperCompiledReportFileName);
>
>        
> this.jasperCompiledReportFileName =
> jasperCompiledReportFileName;
>         this.frameworkName =
> frameworkName;
>         this.parameters =
> parameters;
> 	  // grab the
> global ID in the constructor. The constructor executes in
> the thread that creates the task instance
>    
>     this.theObjectGID =
> theObject.globalID() // or use
> theObject.editingContext().globalIDForObject( theObject
> );
>      
>   ERXAssert.PRE.notNull(theObjectGID);  // If
> the object is new, this will be null. test and
> throw.
>         if (this.parameters ==
> null) {
>            
> this.parameters = new HashMap<String, Object>();
>         }
>     }
>
>
>     /**
>      * Callable interface
> implementation
>      *
>      * @throws Exception
>      */
>     public File call() throws Exception {
>
>        
> ERXApplication._startRequest();
>         try {
>            
> return _call();
>         } catch (Exception e)
> {
>            
> log.error("Error in JR task", e);
>            
> throw e;
>         } finally {
>             //
> Unlocks any locked editing contexts
>            
> ERXApplication._endRequest();
>         }
>
>     }
>
>     private File _call() {
>         // If development
>         if
> (ERXApplication.isDevelopmentModeSafe()) {
>            
> parameters.put("_isDevelopmentMode",
> Boolean.TRUE);
>         } else {
>            
> parameters.put("_isDevelopmentMode", Boolean.FALSE
> );
>         }
>        
>         reportFile = null;
>        
>         if
> (log.isDebugEnabled())
>            
> log.debug("Starting JasperReportTask: " +
> this.toString());
>         EOEditingContext ec =
> ERXEC.newEditingContext();
> 	  ec.lock();
>    
>     try {
>            
> EOEnterpriseObject theObject = ec.faultForGlobalID(
> theObjectGID, ec);
>            
> jrDataSource = new ERJRFoundationDataSource(new
> NSArray<EOEnterpriseObject>(theObject));
>
>             if
> (jasperCompiledReportFileName != null) {
>            
>     reportFile =
> ERJRUtilities.runCompiledReportToPDFFile(jasperCompiledReportFileName,
> frameworkName, parameters, jrDataSource);
>             }
>
>         } catch (Exception e)
> {
>            
> throw new NestableRuntimeException(e);
>         } finally {
> //           
> ec.unlock();
>         }
>
>         return reportFile;
>     }
>
>     public File file() {
>         return reportFile;
>     }
>
>     /* (non-Javadoc)
>      * @see
> wk.foundation.concurrent.TaskPercentComplete#percentComplete()
>      *
>      * Some whacky logic just so
> the user can be comfortable that we are making some
> progress.
>      */
>     public Double percentComplete() {
>         if (jrDataSource ==
> null) {
>            
> return Double.valueOf(0.1);
>         } else {
>            
> double percent = 0.1 + jrDataSource.percentProcessed() *
> 0.8;
>            
> return Double.valueOf(percent);
>         }
>     }
>
> }
>
>
>
>  _______________________________________________
> Do not post admin requests to the list. They will be
> ignored.
> Webobjects-dev mailing list
>      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
>

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


  • Follow-Ups:
    • Re: jasperreports framework
      • From: Kieran Kelleher <email@hidden>
References: 
 >Re: jasperreports framework (From: Kieran Kelleher <email@hidden>)

  • Prev by Date: Re: jasperreports framework
  • Next by Date: Re: Tutorials
  • Previous by thread: Re: jasperreports framework
  • Next by thread: Re: jasperreports framework
  • Index(es):
    • Date
    • Thread