Thursday 30 August 2007

Get the generic type of a generic class

A simple java line allows to do that :
[java]
(Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

Monday 4 June 2007

JXPathContext on java Objects

JxPath is a very usefull API to manipulate XML. But you can also use it to navigate an modify Java object : JXPathContext for java object
 public class Employee {
    public Address getHomeAddress(){
       ...
    }
 }
 public class Address {
    public String getStreetNumber(){
       ...
    }
 }
 
 Employee emp = new Employee();
 ...
 
 JXPathContext context = JXPathContext.newContext(emp);
 String sNumber = (String)context.getValue("homeAddress/streetNumber");

A very good way to make introspection...

Thursday 5 April 2007

Jumping in Implementation class in Eclipse and not in the interface

Implementors feature is a very good plugin to jump in Implementation class of an interface pressing Ctrl+Alt+F3. A very good feature to improve our productivity ;)

Thanks Titom for this very good tip!

Saturday 12 August 2006

BIRT : Génération de Rapport

Présentation

BIRT est un projet open source de la fondation Eclipse permettant de réaliser des rapports (ou éditions) sous deux canaux : HTML et PDF. Pour se faire BIRT utilise deux fichiers :
  1. Un fihier de données (XML quelconque)
  2. Un Etat (ou template représentant la forme du rapport) au format rptdesign (propriétaire BIRT
BIRT peut être utilisé de deux façons : sous Eclipse via le plugin permettant de "dessiner" des Etats et générer le rapport et en runtime, dans du code java. Cette dernière méthode ne permet pas de réaliser des etats mais permet de lancer la génération du rapport.


Installation du plugin

le plugin BIRT necessite GEF et EMF (autres plugins Eclipse). je conseille donc d'installer la version All-in-one disponible ici. Sinon la procedure d'installation est décrite ici.

Une fois BIRT installé il est possible de réaliser des etats et de les éditer en HTML, mais pour pouvoir les éditer en PDF il faut suivre les instructions suivantes:
  1. Télécharger le fichier : iText1.3 (pour la génération de pdf)
  2. Le copier à l'emplacement : plugins/org.eclipse.birt.report.engine.emitter.pdf_version/lib/ (plugins étant le répertoire de plugins d'Eclipse).
  3. Redemarrer Eclipse avec un -clean

Et voila le plugin installé.

Installation du Runtime

BIRT fournit aussi une API Java, pour cela il faut
Télécharger le module runtime de BIRT
  1. Le dezipper sur le disque dur
  2. Puis ajouter iTexte1.3 dans le repertoire  ${BIRT_HOME}birt-runtime-2_1_0/ReportEngine/plugins/com.lowagie.itext/lib toujours pour la génération PDF.
  3. La doc pour deployer BIRT est diponible ici
Et voici un petit exemple permettant de générer un rapport PDF avec l'API de BIRT :

 //////////////////////////////////
  // Configuration du moteur BIRT //
  //////////////////////////////////
  String reportEngine = <HomeDuMoteur>;
  EngineConfig config = new EngineConfig( );
  //Home du moteur
  config.setEngineHome(reportEngine);
  log("[Configuration du moteur BIRT]............OK");
       
  //////////////////////////////
  // Moteur de reporting BIRT //
  //////////////////////////////
  ReportEngine engine = new ReportEngine( config );
     
  ///////////////////////////////////
  // Représentation de l'Etat BIRT //
  ///////////////////////////////////
  String etat = <Path de l'Etat>;
  IReportRunnable design=null;
  try {
      design = engine.openReportDesign(etat);
  } catch (EngineException e1) {
      log("[Lecture de l'état BIRT]........FAILED" + e1.getMessage());
  }
  log("[Lecture de l'état BIRT]................OK");

  //////////////////////////////////////////////
  // Tache de creation traitement et de Rendu //
  //////////////////////////////////////////////
  IRunAndRenderTask task = engine.createRunAndRenderTask(design);    
  // Context de rendu
  HTMLRenderContext renderContext = new HTMLRenderContext();
  // S'il y a des images
  renderContext.setImageDirectory("image");
  HashMap contextMap = new HashMap();
  contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT,renderContext );
  task.setAppContext( contextMap );
  log("[Configuration du moteur de rendu]......OK");

  /////////////////////

  // Option de rendu //
  /////////////////////
  String out = <Path de sortie du fichier PDF>
  HTMLRenderOption options = new HTMLRenderOption();
  //options.setOutputStream(System.out);
  options.setOutputFileName(out);
  options.setOutputFormat("pdf");
  task.setRenderOption(options);
  log("[Configuration du fichier de sortie]....OK");
    
  log("[Début de l'execution de la transfo.]...OK");
  try {
     task.run();
  } catch (EngineException e) {
      log("### Génération du pdf echouée ###\n" + e.getMessage());
  }
  log("### Génération du pdf effectué###");
    
  engine.shutdown();
  log("[Arret du moteur BIRT]............OK");

    

Pour plus d'information voici un article très interressant sur les méthodes de deployement de BIRT http://www.onjava.com/pub/a/onjava/2006/07/26/deploying-birt.html