Академический Документы
Профессиональный Документы
Культура Документы
Travail de fin d'tudes ralis par Philippe Lodomez en vue de l'obtention du grade de bachelier en Informatique et Systmes option Rseaux et Tlcommunications
page : 1
Remerciements :
Je tiens remercier la socit Manex pour m'avoir accueilli et offert un environnement de travail irrprochable. Je remercie aussi Vincent Keunen qui m'a parrain dans la socit. Ainsi que David Wery qui a suivi mon travail de bout en bout. Merci aussi Monsieur Christophe Charlet, mon superviseur pour sa disponibilit et ses nombreux conseils. Je remercie, enfin, les personnes de mon entourage qui ont relu mon travail.
page : 2
2.2 XML............................................................................................................................ 22
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 3
3.3.4.4 Paramtre ........................................................................................................................... 3.3.4.5 Elment .............................................................................................................................. 3.3.4.7 Groupes .............................................................................................................................. 3.3.4.8 Outils de cration du design ...............................................................................................
42 42 43 43
3.4.4 OpenOffice.......................................................................................................................49 3.4.5 Le plug in Add-in ODF .................................................................................................49 3.4.6 Utilisation de JOOReports................................................................................................50 3.4.7 Possibilits des templates ...............................................................................................50
3.4.7.1 Introduction ........................................................................................................................ 50 3.4.7.2 Rappel sur Template ........................................................................................................... 50 3.4.7.3 Diffrentes insertions de variables et champs..................................................................... 51
4.1.1 Prsentation et Historique...............................................................................................61 4.1.2 Jafar ; Les Objectifs ..........................................................................................................62 4.1.4 L'indpendance des Audits..............................................................................................63 4.1.5 Le client ...........................................................................................................................63 4.1.6 Le serveur ........................................................................................................................63 4.1.7 Les tables importantes.....................................................................................................64
4.1.7.1 La Table Auditables ............................................................................................................. 64 4.1.7.2 La Table ACS (Auditable Components)................................................................................ 65 4.1.7.3 La Table Encounters............................................................................................................. 66 4.1.7.4 Schma simplifi de la base de donnes serveur ................................................................ 66
page : 6
page : 7
page : 8
1.1 Introduction
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une diffrence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent. Dave Berry
1.2.1 Introduction
Depuis 1986, Manex, petite socit informatique implante Boncelles (Lige - Belgique), propose des services de consultance et dveloppement pour la mise en uvre de solutions logicielles et rseaux.
1.2.2 Le personnel
La socit Manex est dirige par Vincent Keunen. Elle emploie trois informaticiens temps plein et une secrtaire. La socit s'offre aussi parfois les services de quelques indpendants.
1.2.3 Produits
IBAT (Inter Business Automated Transport System) : systme de transport de documents automatis et scuris (cryptographie, PKI3, gestion des formats) via Internet. Applications dans tout secteur. JAFAR (Java Advanced Facilities for Audit and Reporting) : systme daudit et de reporting. Applications dans le mdical, la prvention, lenvironnement, laudit, le lgal, la labellisation, le
3 Une PKI (Public Key Infrastructure) est un ensemble de composants physiques ( par exemple : ordinateur), de procdures humaines et de logiciels en vue de grer le cycle de vie des certificats numriques ou lectroniques.
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 10
check-up technique, les relevs sur terrain, etc. Jafar en est sa troisime version. Site web du produit : www.jafar.biz
1.2.4 Domaines
Leurs domaines de prdilection sont: systmes internet sites web transactionnels, applications web , connexions bases de donnes, systmes de messagerie, changes B2B4, systmes de scurit cryptographie, infrastructures cls publiques, certificats et signatures lectroniques, systmes mobiles TabletPC, Palm, PocketPC, iPaq, Psion, J2ME, GSM, SMS,
1.2.5 Contact
Rue Wagner, 93 & 127 BE-4100 Boncelles, Belgique Tel. : +32 (0) 4 338 03 68 Fax. : +32 (0) 4 338 06 06 Mail : info@manex.be Site Web : http://www.manex.be
Lutilisation dun outil open source ; La lecture de donnes provenant dun modle de donnes existant; Cration dune interface web pour la cration et la consultation des rapports ; Cration dune interface lourde (en swing) pour la cration et la consultation des rapports ; Ce travail se droulera en 5 phases :
Etudier les packages open source de gnration de rapports JasperReport et similaires ; Etudier les packages open source de cration de modles (genre iReport) ; Etudier le format open document (agr Oasis/ISO et propos initialement par OpenOffice.org) ; Etudier les adaptations raliser pour les intgrer notre outil Jafar ; Raliser une intgration profonde (les concepts de jafar lis au mtier d'audit doivent tre directement accessibles dans l'outil de gnration de rapports) au niveau client et serveur ; Plate-forme de travail et outils utiliser :
La plate-forme de travail sera principalement Microsoft Windows XP. Les outils utiliser seront principalement : IntelliJ Idea, subversion, JasperReport, iText, Atlassian Jira, Spring Framework, JOOreports et Hibernate. Manex fournira ltudiant les diffrentes machines (de tests et de production) pour le dveloppement du projet.
page : 12
C'est un EDI (Environnement de dveloppement intgr) trs puissant pour Java. Son seul dfaut est d'tre payant (499$ par licence), mais ce dfaut est largement compens par ses normes possibilits. Les principales nouvelles fonctionnalits de la version 6.0 sont un diteur de Gui trs puissant qui supporte beaucoup de layouts (dont le FormLayout), le support des EJB 3.0, un module pour faciliter la gestion en groupe et le calcul de la couverture du code par les tests.
Site officiel : http://www.jetbrains.com
1.4.2 Spring
Spring est considr comme un conteneur dit "lger", c'est--dire une infrastructure similaire un serveur d'application J2EE. Il prend en charge la cration d'objets et leur mise en relation par l'intermdiaire d'un fichier de configuration qui dcrit les objets fabriquer et les relations de dpendance entre ces objets. Pour faire simple, les classes A et B seront en relation grce un fichier XML5.
Site officiel : http://www.springframework.org
1.4.3 OpenOffice
OpenOffice.org (parfois abrg en OOo) dsigne la fois un logiciel libre de bureautique, une communaut de dveloppeurs et le site Internet hbergeant l'ensemble du projet. Le but nonc est de crer, en tant que communaut, la suite bureautique internationale leader tournant sur les principales plates-formes et fournissant l'accs aux fonctionnalits et aux donnes via des composants et API (Interface de Programmation d'Application) ouverts et un format de donnes XML. En d'autres termes : concurrencer le leader du march : Microsoft Word.
Site officiel : http://fr.openoffice.org/
1.4.4 SubVersion
Subversion, souvent abrg en SVN, est un gestionnaire de version qui se veut le successeur de CVS. Un gestionnaire de version permet, comme son nom lindique, de grer les diffrentes versions dun projet. Il est principalement utilis pour maintenir le code source ou la documentation dun logiciel, mais on pourrait, en thorie, lemployer dans bien dautres domaines, comme par exemple, la conception dun site web, ou la rdaction dun rapport. Un gestionnaire de version est donc un outil quasiment indispensable pour mener bien un projet par plusieurs personnes. Site officiel : http://subversion.tigris.org
1.4.5 Eclipse
Eclipse IDE est un autre IDE, il est extensible, universel et polyvalent, permettant potentiellement de crer des projets de dveloppement mettant en uvre n'importe quel langage de programmation. Eclipse IDE est crit en Java ( l'aide de la bibliothque graphique SWT d'IBM). La spcificit d'Eclipse IDE vient du fait de son architecture totalement dveloppe autour de la notion de plugin (en conformit avec la norme OGSi) : toutes les fonctionnalits de cet atelier
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 14
logiciel sont dveloppes en tant que plugin. Plusieurs logiciels commerciaux sont bass sur ce logiciel libre, comme par exemple Websphere Studio Application Developer d'IBM. Site officiel : http://www.eclipse.org/
OXygen est un diteur simple utiliser et lgant qui supporte les dernires technologies et standards XML. Ses fonctions d'aide l'dition, de dbogage XSLT 6 et la possibilit de produire des documents HTML, PDF ou PostScript directement l'ont rendu populaire la fois dans les entreprises et dans le milieu universitaire. Il s'agit d'un programme Java, qui est par consquent portable sur n'importe quel ordinateur pouvant faire tourner une machine Java virtuelle. Il est galement disponible sous la forme d'un plug-in pour Eclipse. Site Officiel : http://www.oxygenxml.com
1.4.7 JBOSS
JBoss Application Server est le serveur d'applications J2EE Libre le plus populaire (le plus tlcharg). Il est entirement crit en Java et publi sous licence LGPL. Parce que le logiciel est crit en Java, JBoss Application Server peut tre utilis sur tout systme d'exploitation fournissant une machine virtuelle Java (JVM). Toutefois, il faut bien diffrencier JBoss, le projet Open Source soutenu par environ 100 dveloppeurs et JBoss Group, une entreprise qui offre des services de grande qualit autour du projet Jboss. Site Officiel : http://www.jboss.org
1.4.8 PostgreSQL
PostgreSQL est un systme de gestion de base de donnes relationnelle et objet (SGBDRO). C'est un outil libre disponible selon les termes d'une licence de type BSD. Ce systme est concurrent d'autres systmes de gestion de base de donnes, qu'ils soient libres (comme MySQL et Firebird), ou propritaires (comme Oracle, Microsoft SQL Server, etc.). PostgreSQL peut stocker plus de types de donnes que les types traditionnels (entier, caractres, etc.). L'utilisateur peut crer des types, des fonctions, utiliser l'hritage de type etc.
page : 16
La dsignation Open Source s'applique aux logiciels (ou applications) dont la licence respecte des critres tablis par l'Open Source Initiative (OSI). En voici les critres fondamentaux :
Malgr la traduction littrale possible en code source ouvert , le fait de disposer des sources d'un logiciel ne suffit pas dire qu'il est Open Source. Toutefois, de nombreuses personnes, notamment dans le monde francophone, se contentent de la disponibilit des sources pour appeler un logiciel Open Source. C'est Christine Peterson qui fut la premire instaurer l'utilisation du terme Open Source . Elle travaillait alors pour le Foresight Institute. Elle voulait surtout faire la diffrence avec le terme anglais Free Software (plus dans le sens de libert et gratuit) et rappeler ainsi aux utilisateurs qu'un logiciel a un cot. Il s'agissait galement de choisir un vocabulaire correspondant mieux au monde des affaires, le terme Free (gratuit) de Free Software risquant gnralement d'inquiter les entreprises. Les dsignations Free Software et Open Source sont en ralit deux dsignations concurrentes pour un mme type de licence de logiciel. En utilisant la dsignation Free Software, on tient mettre en avant la finalit philosophique et politique de la licence, tandis que la dsignation Open Source met l'accent sur la mthode de dveloppement et de diffusion du logiciel. L'histoire et les polmiques souleves se trouvent dans l'article de l'OSI. D'un point de vue conomique, le label Open Source contribue la cration d'une nouvelle forme de march et d'conomie. Il s'agit de fournir une approche plus pragmatique des avantages du logiciel libre, en mettant de ct les connotations politiques et philosophiques, afin de n'en conserver que les avantages sur le plan de l'ingnierie. En d'autres termes : travailler ensemble, pour mieux avancer. Pour moi, l'initiative Open source est remarquable et doit tre souligne plus d'un titre.
page : 17
page : 18
2.1 Java
Sommaire : 2.1.1 2.1.2 2.1.3 2.1.4 Prsentation gnrale la portabilit Orientation Objet Les Javabeans
Java est un langage de programmation trs en vogue, notamment grce aux applets que l'on retrouve sur le Internet. Mais Java est loin de se limiter cela, et le but de ce chapitre est de prsenter trs brivement les particularits de ce langage. Vous comprendrez ensuite l'importance du mot Objet en Java, ou encore pourquoi ce langage est portable. Vous comprendrez aussi ce que sont les JavaBeans. Les dbuts de Java remontent 1991. Il est n d'un petit groupe d'employs de Sun Microsystem. Leur premire mission tait de crer un appareil capable de contrler plusieurs quipements lectroniques. A cette fin, ils ont cr un langage appel la base Oak. Le nom Oak, malheureusement trop proche d'une autre marque, fut rebaptis en 1995 Java . On est donc pass du chne (Oak) la tasse de caf. La premire version du kit de dveloppement Java fut disponible en 1996 et utilisable gratuitement. L'environnement Java est divis en plusieurs plateformes qui se diffrencient principalement par les composants qu'elles contiennent et qui sont chaqu'une oriente vers un certain secteur d'activit.
J2SE : destin aux applications pour poste de travail, elle contient entre autre la partie interface graphique du monde java. J2EE : destin pour les applications serveur (entreprise). J2ME : destin la programmation des mobiles, tels que les Gsm et les pda.
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 19
L'interface : les mthodes qu'il fournit, de manire gnrale ; L'implmentation : comment sont dveloppes les mthodes d'un point de vue technique.
L'intrt est qu'un dveloppeur qui utilise un objet d'un autre dveloppeur n'a pas besoin de savoir comment il est fait, mais uniquement les services qu'il fournit. Imaginons un objet, utilis pour l'authentification; il possde une mthode qui prend en paramtres un nom d'utilisateur et un mot de passe. Cette mthode vrifie l'existence d'un couple utilisateur / mot de passe correct. Pour le dveloppeur qui utilise cet objet, il importe peu que cette vrification soit faite via un fichier, une base de donnes ou par un autre moyen; pour lui, seul le rsultat compte.
Srialisable : elle doit tre srialisable (permet de sauver l'tat d'un objet avec l'utilisation de flux). Constructeur par dfaut : elle doit possder un constructeur par dfaut, c'est--dire un constructeur sans argument. Proprit : elle possde au moins une proprit.
Rem : Une proprit est une caractristique d'un objet, une information qui peut tre soit rcupre, soit spcifie, soit les deux.
page : 21
2.2 XML
Sommaire : 2.2.1 Prsentation gnrale 2.2.2 Exemple 2.2.3 Traiter un XML
2.2.3.1 SAX 2.2.3.2 DOM
la structure d'un document XML est dfinissable et validable par un schma, un document XML est entirement transformable dans un autre document XML.
page : 22
2.2.2 Exemple
Le format XML est un standard pour le transport de donnes de tout type, sous forme d'un fichier texte. Cependant, il possde quelques rgles.
<?xml version=" 1 . 0 " encoding="ISO88591"?> <livre version="1" > <auteur> <nom>Lodomez</nom> <prenom>Philippe</prenom> </ auteur> <titre>Ouvrage n1</ titre> <! commentaire ... > <sommaire /> <chapitre titre="Chapitre 1"> <paragraphe>Dbut du ... </ paragraphe> <paragraphe>La suite est ici.. </ paragraphe> </ chapitre> <chapitre titre="Chapitre 2"> <paragraphe>Voil le second chapitre ... </paragraphe> </chapitre> </ livre >
Ce fichier simple nous montre que : il doit y avoir une et une seule balise racine ( ici <livre> ) ; une balise ouverte doit tre ferme soit via une balise fermante ( <livre> ... </livre>, <chapitre> ... </chapitre> ) ; soit directement ( <sommaire /> ) ; une balise peut contenir soit : du texte ou des donnes ( exemple : <prenom> ) ; d'autres balises ( exemple : <chapitre> ) ; soit rien du tout ( <sommaire />" ) ; une balise peut avoir des attributs ( <chapitre titre="Chapitre 1"> ) ; il peut y avoir des commentaires dans le fichier XML, compris entre <! et > ; une balise ouverte doit tre ferme au mme niveau ( par exemple <balise1><balise2></balise1></balise2> est incorrect ).
page : 23
2.2.3.1 SAX
La premire technique est SAX (Simple Api for XML). Celle-ci se base sur un systme producteur/consommateur. Sans entrer dans les dtails, il y a un processus qui lit le fichier XML et ds qu'il a lu entirement une balise, il produit un vnement, par exemple : "'ouverture balise"', "'fermeture balise"', etc. C'est au consommateur de grer les diffrents vnements, afin d'effectuer les traitements ncessaires. L'avantage de cette technique est qu'elle est trs rapide et qu'elle ne consomme pas normment de mmoire. Par contre, elle ne permet pas de rcuprer ni de modifier les informations par la suite, ni mme de crer un fichier XML.
2.2.3.2 DOM
L'autre technique est DOM (Document Object Model). DOM, lui, va lire le document XML et le stocker en mmoire sous la forme d'un arbre. Ds que le traitement est fini, il est tout fait possible de voyager dans les noeuds de l'arbre, de les modifier ou de les supprimer. L'avantage est que, ds la fin du traitement, tout le document est facilement accessible en lecture et en criture, mais l'inconvnient est que cette mthode est beaucoup plus lourde en mmoire et en temps.
page : 24
Partant d'un tel objet, nous pouvons consulter les informations l'aide de mthodes de classe :
//nom du champ //type du champ //entier reprsentant la visibilit du champ (priv, public,
Le package contient donc une srie de classes qui offrent chacune une possibilit d'agir sur une classe vise dynamiquement. En voici les principales : La classe Modifier La classe Method La classe Contructor etc.
2.3.3 Exemples
Pour vous permettre de comprendre ce mcanisme un peu abstrait, voici quelques exemples : Exemple 1 : public String getNom(Object o){ Class c = o.getClass(); return c.getName(); } Exemple 2 : Class c = Class.forName("maClasse"); Class[] p1 = new Class[]{Integer.class, Integer.class); Class[] p2 = new Class[]{Integer.TYPE, Integer.TYPE); Method m1 = c.getMethod("somme",p1); Method m2 = c.getMethod("somme",p2); m1 correspond ici la mthode somme(Integer, Integer) alors que m2 correspond somme(int, int). Exemple 3 : void changeValeur(Object o, String nomChamp, Object val) throws Exception{ Field f = o.getClass().getField(nomChamp); f.set(o,val); }
page : 26
2.3.4 Conclusion
La reflection permet donc de gnrer du code qui n'existe pas au dpart de l'application. Ce code sera cr dynamiquement par le programme. Cela rend une approche assez abstraite de l'excution et de l'volution de l'application. Mais les possibilits offertes par l'API sont normes. Peu d'entre elles ont t exploites pour l'laboration de mon application
page : 27
page : 28
Exemple :
L'intrt ici est que notre objet A contiendra une variable prive du type de l'interface, qui ne sera pas initialise, mais qui pourra tre dfinie via un accesseur. public class ClasseA { // rfrence vers l'objet via son interface private InterfaceB service B; // Accesseur utilis par Spring pour injecter la rfrence public void setServiceB(InterfaceB reference ) { this.serviceB = reference; } // Code utilisant les mthodes de l'interfaceB..... } Dans le code de l'objet A, une interface sera utilise pour l'accs la base de donnes. Le reste de la magie se situe dans le fichier de configuration de Spring qui, dans la dfinition de l'objet B, contiendra une proprit qui correspond l'accesseur dfini pour l'interface de B. Donc, durant l'excution, ds qu'on rcuprera un objet A via Spring, ce dernier va lui fournir directement un Objet B. L'intrt rside dans le fait que l'objet A n'est pas directement li un autre objet. Premirement, parce qu'il utilise une interface, autrement dit des services, sans avoir de contexte de type de base de donnes, de fichiers, ou autres. Et deuximement, parce qu'il n'instancie pas lui-mme un objet qui implmente cette interface, mais celui-ci lui est fourni, et donc l'objet A est totalement indpendant du type de l'objet B. Donc si plus tard, on ne dsire plus utiliser de base de donnes, mais un autre moyen qui fournit les mmes services, il suffira par exemple de crer une nouvelle classe B2, qui implmentera toujours la mme interface que B. Ensuite, on devra modifier le fichier de configuration de Spring pour qu'il ne fournisse plus un objet B, mais un objet B2 lors de la cration d'un objet A.
page : 29
2.4.2.1 BeanFactory
Le Bean Factory reprsente en fait le conteneur permettant l'inversion de contrle ( Pattern Factory ). C'est lui qui permet la configuration et la liaison des objets par Injection de dpendances et assure aussi la gestion des objets. Typiquement, une classe qui implmente cette interface sera utilise : XmlBeanFactory, qui va utiliser un fichier Xml comme source de configuration. Pour cela, il va lire le fichier XML et utiliser l'introspection pour accder aux proprits des objets, et ainsi configurer les objets selon les informations lues dans le fichier de configuration XML.
// Instantiation du Bean Factory qui utilisera le fichier // src/ressource/beans.xml comme configuration Ressource _res = new FileSystemRessource (src/ressources/beans.xml ); XmlBeanFactory factory = new XmlBeanFactory (_res) ; // Rcupration d 'un objet MonObjet test = (MonObjet ) factory.getBean (monObjet) ; // Utilisation normal de l'objet test test.methode1 ( ) ; test.methode2 ( ) ;
fondamentaux : le modle, la vue et le contrleur. Chacun de ces composants tient un rle bien dfini.
page : 31
page : 32
3.1 Introduction
La premire partie de mon stage consiste faire l'tude et l'analyse de diffrents outil de reporting (JasperReport, JOOReports, iText et BIRT). Qui dit analyse profonde veut dire conclusion, enseignement, bon point , mauvais point, etc. Chaque outil a donc d tre dcortiqu pour, au final, tre retenu au pas. Je vais donc ici vous dcrire prcisment chaque package open source de gnration de rapports en reprenant chaque fois certains points prcis pour avoir une bonne base de comparaison. Le choix final de l'outil utiliser se fera en concertation avec le patron et un des dveloppeurs de chez Manex.
page : 33
Introduction Installation Cration de pdf Mise en forme Interactivit Template Cration de rtf et html Conclusion
3.2.1 Introduction
iText est une librairie gratuite Java protge par la licence Mozilla Public License qui permet de gnrer principalement des documents de type PDF. Elle a t crite par Bruno Lowagie et Paulo Soares. Cette librairie est trs riche en fonctionnalits.
Un gnrique qui ne prend pas de paramtres. Deux autres qui permettent de dfinir le format de sortie du document.
b) La Classe PdfWriter PdfWriter permet d'crire le document physiquement sur le disque dur et ce de manire trs simple. Il suffit d'appeler la mthode static getInstance qui retourne une instance de PdfWriter et de lui passer en paramtre notre document ainsi q'un flux de sortie de type FileOutputStream.
Exemple:
try {
PdfWriter pw = PdfWriter.getInstance(d, new FileOutputStream("d:\test.pdf")); d.open(); d.add(new Paragraph("Mon Premier Document : ")); d.close(); pw.close();
Chunk : elle reprsente la plus petite unit que l'on peut afficher sur un document. Phrase : elle permet de crer des phrases avec plusieurs fonctionnalits intressantes. On peut par exemple dfinir l'espacement entre plusieurs Phrases ou encore dfinir une Phrase avec
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 35
plusieurs polices... Paragraph : elle permet de grouper plusieurs phrases. List : elle permet de crer des listes numrotes (numriques ou alphabtiques). Une List est compose de ListItem. Table : iText donne la possibilit de crer des tableaux via la classe PdfPTable. Ils ont la mme forme que les tableaux en HTML et fonctionnent de la mme manire. Ils sont composs de colonnes et de lignes. Image : elle permet d'insrer une image dans votre compte rendu et d'en modifier la taille si cela s'avre utile.
Les Ancres
Local Goto : Il permet de spcifier des points de destination au sein de votre document, tels que les signets sous Ms Word ou en HTML. Anchor : cette classe permet de crer des liens l'intrieur de votre document comme Local Goto, mais donne aussi la possibilit d'en crer vers l'extrieur (vers un site Web par exemple).
Les Actions
Vous pouvez donner une certaine interactivit votre pdf en lui spcifiant des actions. La classe qui se charge de les raliser est la classe PdfAction. Possibilits :
3.2.6 Template
Le but de ma recherche tait de trouver comment gnrer l'aide de l'outil de reporting le plus facilement possible des templates, sorte de modles trous qui serait compltes par la suite. IText ne m'a pas propos ce que je cherchais. Cette librairie permet bien l'utilisation de templates, mais elles sont fort limites et fort complexes pour le peu qu'elles apportent. En gros, elles permettent de faire des templates de design statique. Il faut pour cela utiliser la mthode createTemplate(float, float) de la classe PdfContentByte.
page : 36
3.2.8 Conclusion
Les avantages de iText sont nombreux :
Cration assez facile de pdf par quelques lignes de code. Librairie indpendante de la plateforme, car crite en Java et gratuite. Compilation du rapport trs rapide. Simplicit d'installation. Grande quantit de petites fonctionnalits pour rendre le pdf attractif . Nombreux exemples disponibles sur le site officiel. Boutons, signatures digitales et autres fonctions avances de pdf. etc.
iText, pour moi, est limit la cration des PDF basiques ... sinon beaucoup (trop) de lignes de code. La cration de tableau est laborieuse. Le design est assez lourd mettre en place (peu de rsultats valorisants).
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 37
Les templates type iText ne convenaient pas au but recherch dans mon travail, car pas de variables, fusion. Etc.
Pour finir, les cas d'utilisation idaux de iText seraient par exemple:
De petits documents / peu de contenu Pdf avanc (avec bouton, etc.) Pas d'dition Etc.
page : 38
3.3.1 Introduction
Jasper Reports est une librairie Opensource crite en Java. Les rapports de donnes de sources diverses vont pouvoir tre gnr grce cette librairie. Le but est de crer une template (ou modle de mise en forme ) de ces donnes pour produire un ou plusieurs des formats suivants:
sortie vers une imprimante fichier PDF fichier HTML fichier XLS fichier CSV fichier XML
La force de Jasper Reports rside dans l'utilisation de design qui permet de dfinir le rendu visuel des donnes de manire gnrique. Ainsi le design est compil une fois pour toutes et est utilis chaque fois qu'on le dsire pour le remplir avec les donnes. Il est donc rutilisable. Les applications sont nombreuses, pouvant aller de rapports intgrs dans des applications Java, un outil indpendant de gnration de rapports ou encore une intgration du contenu Web J2EE avec une gnration de contenu la demande pour avoir une visualisation toujours jour de
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 39
ses donnes.
Pour la cration du design, j'ai utilis iReport. Une brve introduction son sujet me semble utile. C'est un outil de conception WYSIWYG (What You See Is What You Get) exclusivement rserv la cration de fichiers de description pour JasperReports. Il permet donc de produire de manire assez intuitive des fichiers .jrxml (fichiers xml spcifique jasperReports) exploitables par JasperReports pour gnrer des rapports au sein d'une application Java. Le format de rapport gnr dpend ensuite de JasperReports et du code utilis(html, pdf, csv..). C'est une application Java pure qui ncessite l'installation d'une JVM (Java Virtual Machin) pour s'excuter. Site officiel : http://www.jasperforge.org/sf/projects/ireport
Pour crer un rapport, il faut effectuer les tapes suivantes : 1. Crer un fichier XML de description du modle, cela veut dire : dfinir la ou les sources de donnes, dfinir plus spcifiquement les donnes utiliser, effectuer des calculs sur ces donnes, placer graphiquement l'emplacement des rsultats et crer la prsentation graphique du rapport. 2. Compiler le design afin d'obtenir un fichier .jasper. La compilation du rapport permet dj de vrifier la syntaxe utilise et d'assurer que le rapport soit utilisable. Cette tape permet
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 40
galement de compiler les expressions Java utilises dans le design. Le rsultat est un fichier contenant tous les objets dcrits sous forme srialise. Le but de cette tape est d'avoir un fichier de description du design prt l'emploi, prt recevoir les donnes traiter. 3. Remplir le design compil avec les donnes, afin d'obtenir un rapport complet. Cette tape cre un fichier intermdiaire contenant les donnes rfrences dans le design et rcupres partir des sources de donnes spcifies. Ce fichier permet de collecter toutes les donnes une seule fois et de crer tous les types de sorties offerts par JasperReports. 4. Crer, partir du rapport complet, un exemplaire dans chacun des formats de sorties voulus.
page : 41
Pour utiliser ces champs dans le rapport, la syntaxe est la suivante: $F{nom du champ}
3.3.4.3 Variable
Il est possible, dans le corps du design, de dclarer des variables afin d'effectuer des calculs et de les afficher. L'appel de la variable dans le modle se fait tout naturellement de la faon suivante :
$V{VariableName}
3.3.4.4 Paramtre
L'utilisation de paramtres est une autre fonctionnalit intressante. Elle permet de personnaliser son rapport, sans avoir recompiler le design. Les paramtres sont dclars de la mme manire que les champs:
<parameter name="ReportTitle" class="java.lang.String"/>
L'appel de paramtres est assez identique aux autres appels : $P{nom du paramtre}
Tous les attributs dclars doivent tre utiliss dans des expressions. Ces expressions permettent galement de raliser des oprations entre plusieurs variables. Les expressions reprsentent la valeur que prend un lment.
3.3.4.5 Elment
Les lments reprsentent des zones du rapport avec des contraintes particulires correspondant aux diffrents types d'lments. Tous les lments doivent avoir comme caractristiques les coordonnes et la taille de la zone. On peut galement utiliser des expressions Java dans le contenu des Expressions. Par exemple, pour afficher la date du jour on peut utiliser:
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 42
title : apparat uniquement sur la premire page pageHeader : en-tte de chaque page columnHeader : contient les titres des colonnes detail : contient le contenu des colonnes, c'est--dire chacun des enregistrements des champs utiliss columnFooter : bas de colonne, apparat aprs le dtail, pour afficher par exemple, des cumuls pageFooter : bas de page, se trouve sur chaque page summary : informations concernant les donnes affiches dans le dtail, comme par exemple, un graphique synthtisant les donnes.
Attention : Cette dcoupe en zones n'a pas que des avantages. En effet, celle-ci rend impossible la cration d'une zone de texte statique de grande taille (sur plusieurs pages). Ce problme est assez contraignant pour l'objectif tabli par Manex.
3.3.4.7 Groupes
Dans un design, ils permettent de faire des regroupements de donnes qui rpondent une caractristique commune et permettent d'afficher un en-tte et une fin de groupe. Un groupe est dclar en dehors des zones.
page : 43
Parmi les outils disponibles, j'ai utilis iReport qui est dvelopp en Java et qui est gratuit. C'est un outil standalone (une application part entire) qui permet d'utiliser les fonctionnalits de JasperReports avec galement un outil pour crer les graphiques (voir galement point 4.2).
JasperAssistant :
JasperAssistant est un plug-in pour Eclipse. Je ne l'ai pas test, mais il comporte le mme genre de fonctionnalits que iReport. Site officiel : http://www.jasperassistant.com
Autres outils :
Il existe de nombreux autres outils, depuis les simples visualisateurs de design jusqu'au gnrateur graphique. Certains d'entre eux sont rpertoris sur le site de JasperReports : http://jasperreports.sourceforge.net
les couples nom du paramtre - valeur. // Excution du rapport JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, MyHashMap, ObjConnection); Nous obtenons alors un objet JasperPrint qui contient tout le rapport. C'est partir de cet objet que nous pouvons faire les exports dont nous avons besoin. Le package net.sf.jasperreports.engine.JasperExportManager contient les diffrents formats disponibles.
Exemple :
// Cration du rapport au format PDF JasperExportManager.exportReportToPdfFile(jasperPrint, "fichier.pdf"); // Cration du rapport au format HTML JasperExportManager.exportReportToHtmlFile(jasperPrint, "fichier.html"); // Cration du rapport au format XML JasperExportManager.exportReportToHtmlFile(jasperPrint, "fichier.xml", false);
N.B. : Tout ceci peut tre ralis par iReport et pas forcment par code Java dans un IDE.
3.3.6 Conclusion
La librairie Jasper Reports possde de nombreux atouts :
La librairie est indpendante de toute plateforme car le langage utilis est Java. Elle utilise des librairies Java. Les connections aux sources de donnes sont vastes et facilement ralisables. Les designs crs sont facilement rutilisables par la compilation en plusieurs temps. Le passage de variable ces templates (.jasper) rutilisables est assez facile. La librairie est open source et trs active.
On peut tout de mme noter quelques inconvnients : La dpendance avec d'autres librairies oblige la sortie d'une nouvelle version de Jasper Reports pour profiter des volutions des autres librairies L'utilisation de iReport (ou autre) est presque obligatoire pour crer le fichier xml de design, vu la complexit de la chose (sinon on se trouve dans le mme situation qu'avec iText). Le design est limit... On ne peut pas, par exemple, crer un texte statique de plusieurs pages mme avec l'utilisation de sous rapport.
page : 45
A cela, on peut ajouter les avantages et inconvnients de iText, vu que Jasper se sert de iText pour la gnration dans les diffrents formats de sortie. Cas d'usages idaux d'utilisation de JasperReports : Pour les pdf Les rapports tabulaires Lors de sources de donnes diverses Utilisation de sous-rapports communs Fusion de donnes.
page : 46
3.4.1 Introduction
Tout comme les deux outils prcdents, JOOReports est une librairie Open source Java qui permet la gnration de rapports dans diffrents formats (odt, pdf, rtf, html). JOOReports supporte OpenOffice.org 2.0 ainsi que le format OpenDocument. La libraire a adopt FreeMarker comme moteur interne de templates. On peut dire que JOO a atteint une certaine stabilit. JOOReports a besoin de :
Un Java Runtime Environment (version 1.4 ou suprieur) OpenOffice.org 2.0 Texte pour composer les templates et autres modles Pour l'utiliser comme application Web, un container de Servlet comme Apache Tomcat
Si on dsire gnrer un rapport dans un autre format que OpenDocument Text (ODT), une connexion une instance OpenOffice.org 2.0 (socket/port) est obligatoire.
page : 47
3.4.2 Installation
La librairie JOOReports s'utilise de la mme manire que les deux prcdentes (iText et JasperReports) : il faut la tlcharger (jooreports-2.x.zip ou jooreports-2.x.tar.gz) sur le site http://www.jooreports.sourceforge.net. On insre par la suite le jar dans le projet dsign. Par contre, pour cet outil de reporting, il tait ncessaire d'installer OpenOffice (voir point 2.4). Autre contrainte, la socit Manex veut en fait proposer ses clients la possibilit de modifier leurs rapports, aprs cration, dans le format MS Word (un pdf n'tant pas modifiable); j'ai d trouver un plugin ralisant la conversion ODT (format d'un fichier OpenOffice) vers RTF (format MS Word) (explication au point 5.5).
fabriquer les templates tandis que les developpers vont crer le programme java structurant l'ensemble des donnes. Ce concept implique donc que lors d'une transformation, deux lments sources sont ncessaires :
Le fichier modle est un fichier .ftl dfinissant les rgles d'affichage. Les objets java sont les donnes afficher qui sont encapsules dans ces objets.
Lors de cette transformation, le template va recevoir les donnes afficher, ensuite va excuter son code d'impression.
3.4.4 OpenOffice
Comme dj prcis dans la partie installation, j'ai d m'quiper de l'outil OpenOffice (tlchargement totalement gratuit) pour y crer le template de base pour notre application. Il s'agit en fait de faire un document comprenant des variables qui seront remplies par la suite. La syntaxe basique de ces variables est la suivante : ${name} Cette technique est trs facile et permet de raliser des rapports de qualit sans les diffrentes contraintes rencontres avec les deux premiers outils de reporting dj tests (iText et JasperReports).
et est compatible avec les versions XP, 2003 et 2007 de Microsoft Word. Il faut installer galement l'Office Compatibility Pack tlchargeable sur le site de Microsoft.
Cet exemple utilise une simple HashMap pour insrer les variables. On peut utiliser des objets Java plus complexes ou utiliser de l'XML. Pour utiliser JOOReports dans une application Web, il faut tlcharger le jooreports-2.x.war (qui est une archive d'application web) et le dployer dans votre container de servlet prfr.
Text : le texte principal de la page, il ne varie pas. Interpolation : ces sections seront remplaces en sortie par des valeurs calcules. Les Interpolations sont dlimites par ${ et } ou par #{ et }. FTL tags : sont similaires au tag HTML, mais sont des instructions pour le FreeMarker et ne seront pas imprimes en sortie. Comments : les commentaires, ils sont dlimits par <#-- et -->.
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 50
FreeMarker supporte une syntaxe d'alternatives, o les crochets( [ et ]) sont utiliss la place de < et > . Par exemple :
appel de directives prdfinies : [#list maladies as malad]...[/#list] appel de directives dfinies par l'utilisateur : [@myMacro /] commentaire : [#-- the comment --]
[#ftl] <p>Liste des maladies du patient: <table border=1> <tr><th>Nom<th>Price [#list maladies as malad] <tr> <td> [#if malad.size = "large"]<b>[/#if] Nom : ${malad.name} [#if malad.size = "large"]</b>[/#if] <td>Grave : ${malad.gravit} [/#list]
</table>
page : 51
3.4.9 Conclusion
Je peux dire que la librairie JOOReports m'a sduit de par sa facilit de prise en main. Elle convient, pour moi, parfaitement au travail demand. Les avantages de JOOReports :
Comme les deux librairies prcdentes, JOOReports est crite en Java et est OpenSource La gnration de templates est parfaite et trs intuitive. L'utilisation de FreeMarker qui est un moteur de templates trs puissant est galement un point relever. L'apport de JOOscript permet d'amliorer et de personnaliser ses rapports. Il n'y a aucun problme quant au remplissage de tableaux et autres listes. Etc.
L'obligation d'utiliser un plugin de conversion OpenOffice / Word (et l'Office Compatibility pack ) pour les personnes n'utilisant pas ce logiciel libre et dsirant modifier leur rapport.
page : 52
3.5.1 Introduction
BIRT (Business Intelligence and Reporting Tools) est un projet open source de la fondation Eclipse permettant de raliser des rapports sous deux canaux : HTML et PDF. Pour ce faire, BIRT utilise deux fichiers : 1. un fichier de donnes (xml quelconque) 2. un tat (ou template reprsentant la forme du rapport) au format rptdesign (propritaire BIRT). BIRT peut tre utilis de deux facons : sous Eclipse via un plugin permettant de dessiner des tats et de gnrer le rapport ou en runtime dans du code java. Cette dernire mthode ne permet que de lancer la gnration du rapport (le design aura du tre crit la dure ).
page : 53
chaque modle est dcrit dans un fichier (au format xml) ; le but est d'afficher des donnes. Pour chaque rapport, l'outillage de BIRT propose une vue de l'explorateur de donnes (permet la dfinition d'une ou plusieurs BD, xml, etc.) ; l'dition du rapport se fait en mode graphique (cf cration d'un GUI) ; une prvisualisation est disponible tout moment lors de la cration du rapport ; la mise en exploitation se fait en dployant le rapport sur un serveur d'application J2EE dans lequel le moteur d'excution BIRT a t install. Le format de gnration sera pdf ou HTML.
3.5.3 Installation
Le projet BIRT propose plusieurs types de tlchargement. Le principal dcoupage se fait entre la partie outil de conception (Report Designer) et la partie moteur d'excution (Report Engine).
Report Designer : permet d'ajouter l'outillage de BIRT une installation d'Eclipse existante. Une version autonome de BIRT est aussi propose : RCP Report Designer. Cette version de l'outillage de BIRT se prsente sous la forme d'une application Eclipse RCP. Elle contient la base d'Eclipse et tous les pr-requis de BIRT (c'est la version que j'ai utilis). Report Engine : permet d'installer le moteur de gnration de rapports dans un serveur d'applications J2EE (Tomcat, JBoss,...).
page : 54
une base de donnes relationnelles accessible par JDBC, un fichier XML, un fichier 'plat' (fichier texte, fichier .csv, ...), un script renvoyant les donnes (crit en Java ou JavaScript).
Chaque composant du rapport possde ses propres proprits qui sont ditables dans la vue nomme diteur de proprit. Les composants texte dynamique sont trs utiles, car ils peuvent tre associs des expressions de Javascript (dont BIRT propose un assistant de cration).
3.5.7 Conclusion
Un bref rappel des diffrentes caractristiques gnrales de BIRT est souligner. Le reporting de BIRT se base sur trois composants : 1. Outil graphique de cration de rapports bas sur Eclipse. 2. Moteur de gnration de rapports.
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 55
3. Interface de visualisation de rapport. La cration de rapport se fait en deux tapes : 1. Cration d'un ou plusieurs jeux de donnes (data set). 2. Manipulation des donnes (formatage, calcul, etc.) Reste souligner les avantages et inconvnients de cet outil de reporting ressemblant fort JasperReports (vu au point 4). Les avantages de BIRT : Freeware. Accs aux sources de donnes assez ais. Aucun impact sur les applications mtier. Transformation incrmentale possible. Possibilit d'insertion de liens hypertextes dans les rapports. Rapports multicubes synchroniss. Possibilit de fonctionner en stand alone. Les inconvnients de BIRT: BIRT ne supporte pas le format RTF L'utilisation d'Eclipse... L'diteur SQL ne possde pas d'aide. Il existe peu de fonctions applicables aux jeux de valeurs. Le gnrateur de formules manque d'aide. Affichage conditionnel via codes. La scurit de la BD n'est pas garantie. Pour ma part, les cas idaux d'utilisation sont : Des applications web Les rapports tabulaires du mme genre que JasperReports L' utilisation de sources de donnes diverses L' utilisation de sous-rapports communs
page : 56
3.6.1 Introduction
Voil, vous venez de dcouvrir les quatre outils de reporting que j'ai eu l'opportunit de dcouvrir et d'analyser. Maintenant, il faut bien faire un choix. Avant tout, un rappel des bons et mauvais points de chacun s'avre plus que ncessaire.
page : 57
Supporte le Pdf, Rtf, Doc, format Html Cration de Tout en ligne de design : code. Trs compliqu, beaucoup de ligne pour peu de rsultats.
Odt, Pdf (, Rtf, Html) Parfait, tout est fait en OpenOffice, ce qui rend le travail trs simple et permet de faire tout ce que l'on veut.
Utilisation Ne correspond Fonctionne bien avec Parfait, JOOReport Idem Jasper. de pas ce que l'on des accs aux sources possde en plus un templates : recherche. de donnes varis. moteur templates (FreeMarker) trs puissant. Autres Nombreux avantages : lments attractifs et fonctionnalits des pdf disponibles Utilisation : Petit rapport, peu de contenu Les JOOscripts (sorte de Javascript) permettent de personnaliser et d'amliorer le rapport. Rapports prcis et dtaills, etc. Eclipse permet le Javascript dans les templates ( la manire de JOOReports) Application Web, rapport tabulaire, etc. Pas de format RTF, odt
IReport (ou autre) est Utilisation d'un presque obligatoire. plugin de Design limit conversion odt-rtf
page : 58
3.6.4 Conclusion
L'analyse de ces outils n'a pas t une chose facile. En effet, les exigences de Manex en matire de template notamment ou encore de format de sortie ont fait que les diffrents outils devaient tre test de diverses manires. Donc on effectue l'analyse en fonction du rsultat dsir et non en tant rellement libre. Tant que les objectifs ne sont pas atteints, on doit poursuivre l'tude plus en profondeur. On ne peut pas se suffire d'un rsultat moyen. Et si un outil n'est pas capable de faire quelque chose, il faut le prouver. Au final, le choix s'est fait l'unanimit puisque je n'ai pas st trouver de dsavantages importants dans l'utilisation de JOOReports. Il est vrai que la puissance du moteur de template FreeMarker en aurait convaincu plus d'un. J'ai eu l'opportunit de pouvoir prendre mon temps pour chaque outil. Cette tude m'a apport un plus au niveau personnel sur le plan recherche et patience de travail.
page : 59
page : 60
page : 61
faire des audits et recueillir des donnes en ce qui concerne un champ d'activit ; gnrer instantanment des rapports en fonction de ces audits ; synchroniser les donnes recueillies avec un serveur central.
page : 62
4.1.5 Le client
Ct client, l'utilisateur va pouvoir grce l'application : planier des rendez-vous pour un audit ; entrer des informations sur des socits ou des travailleurs ; voir son planning de rendez-vous ; encoder des rsultats. Ce client Jafar est dot d'une base de donnes interne (PostgreSQL ou autre).
4.1.6 Le serveur
Le serveur quant lui stocke lui aussi les donnes, mais en plus grande quantit, ce qui ncessite une base de donnes plus importante. Jafar peut utiliser une base de donnes Oracle RDB ou bien Postgres pour les donnes mtiers, mais il est volutif et peut tre adapt assez facilement n'importe quel systme de base de donnes. Pendant la synchronisation (par webservice) client/serveur, des fichiers XML contenant les informations d'audit sont rcuprs ct serveur, ainsi que des fichiers Log du client Jafar, tandis que des fichiers XML contenant les informations sur le planning, les socits et autres sont envoys au client. Les fichiers XML reus par le serveur sont analyss pour d'ventuelles mises jour dans la base de donnes.
page : 63
Created
23/09/1986 21/11/1998
Creator ID
0112255-02 0112255-02 t0 t1
Type
-
ParentID
011-123
page : 64
Type
fastcode
MacType
previousEmploy -
ParentId
Valeur
Hello world IT-brain -
Auditable
001-46654
previousEmployer 1212-5454
page : 65
Exemple d'utilisation :
// rcupration Audit
MAC _mac = BeanFactory.getMACService().getMAC(companyName); // rcupration du MAC voulu AC _ac = _auditable.getLastAC(_mac); String result = _ac.getStringValue(); // rcupration de la valeur le l'audit pour le MAC et AC donn
page : 66
Aprs la traditionnelle authentification, le client arrive sur le panel principal qui lui permet de visualiser un agenda reprenant les diffrents rendez-vous qu'il va avoir (ou a eu) avec ses patients. De cette page, il peut dcider d'accder aux diffrents modules disponibles (gestion des informations de l'entreprise, gestion des informations des clients, gestion des rendez-vous futurs et antrieurs.
page : 67
page : 69
4.2.1 Objectifs
L'objectif est de pouvoir gnrer instantanment des rapports sur base des donnes que l'utilisateur peut grer grce Jafar. Un autre objectif est que cet outil doit tre compltement indpendant des donnes traites.
Les templates sont ralises grce au logiciel OpenOffice Writer. Ceux-ci doivent respecter une certaine syntaxe qui est impose l'utilisateur. Il reoit un manuel qui lui explique, par quelques exemples, les possibilits qui lui sont offertes (JOOscripte, tableau, liste, etc.).
L'application demande le choix de format voulu pour le rapport final. L'utilisateur aura le choix entre ODT (OpenOffice), PDF et DOC (Microsoft Word). Les deux derniers ncessitent une conversion grce l'OpenOfficeConverter.
page : 70
Lorsque la gnration est termine et qu'il n'y a pas d'erreur lors de celle-ci, un bouton de l'application permet l'utilisateur d'afficher le rsultat (son rapport). Pour cela, l'utilisation de viewers est ncessaire (pour le format PDF notamment ).
Si une erreur se produit lors de la gnration du rapport, l'utilisateur en sera inform soit : si l'erreur vient du programme, par une boite de dialogue o il peut prendre connaissance du dtail de l'erreur ; si l'erreur vient de l'utilisateur (mauvais encodage de la template), par un message dans le rapport final lui indiquant le champ erron.
4.2.3 L'Indpendance
Comme dj dit prcdemment, le logiciel Jafar est propre chaque utilisateur/client qui dcide lui-mme du contenu des fichiers XML de dfinitions tout en respectant quand mme le AuditML. Ces XML dfinissent donc le contenu des AC et des GUIs dynamiques, mais galement des futurs templates qui servent de modles pour les rapports finaux. Il a donc fallu crer une sorte de langage pour les templates. Langage qui doit tre compris par l'application. L'utilisateur a donc une srie de fonctions complter selon la valeur qu'il veut recevoir. Toutes ces fonctions sont des mthodes de la classe AuditableReportMapper (voir point suivant). Exemple : Pour l'obtention de la dernire valeur synchronise pour une donne, par exemple, le nom de la socit (champ dfini dans l'XML), il devra complter son template par : ${ getLastSync(companyName) } Si par contre, le champ voulu est de type 'Date', le client pourra spcifier le format souhait. Celuici sera vrifi et corrig le cas chant. Ex : ${ getLastSync(dateVisiteX, DD, mm YYYY ) } Remarque : les paramtres ${ } sont obligatoires. Le moteur de template (freemarker) dtermine un champ complter/remplir par ceux-ci paramtres.
page : 71
JOOReportFacade et son interface ReportFacade : C'est cette classe (et plus prcisement la mthode generateReport()) qui gnre le rapport grce au paramtres passs (le nom et rpertoire du fichier ainsi que son type de format). En cas d'erreur, celle-ci est renvoye la classe appelante.
Extrait de la classe :
public class JOOReportFacade implements ReportFacade { ... public String generateReport(final String d, final int format) { ... try { DocumentTemplate documentTemplate = new ZippedDocumentTemplate(new FileInputStream(PATH_fichierTEMPLATE)); AuditReportMapFacade armf = BeanFactory.getAuditReportMapFacade(); armf.setAuditable(BeanFactory.getProxyACService().getAuditable()); switch(format){ // pour le format ODT case 1 : nomfichierODT = d; documentTemplate.createDocument(armf,new FileOutputStream(PATH_nomfichierODT)); break; case 2 : Runtime.getRuntime().exec("\"c:/Program Files/OpenOffice.org 2.1/program/soffice.exe\" -accept=\"socket,port=8100;urp;\""); // obligatoire pour la conversion OpenOfficeConnection openOfficeConnection = new SocketOpenOfficeConnection(); openOfficeConnection.connect(); // connexion a l'OpenOffice.org DocumentConverter converter = new OpenOfficeDocumentConverter(openOfficeConnection); documentTemplate.createDocument(armf ,new FileOutputStream(nomfichierODT)); ..... converter.convert(fichierODT, fichierPDF); // conversion en PDF openOfficeConnection.disconnect(); break; } ..... } catch(Exception e) { // on revoie l'erreur (pour l'afficher) _logger.trace("Exception, during report generation: "+e.getMessage()); return e.getMessage(); } ... }
page : 72
AuditableReportMapper et son interface AuditReportMapFacade : c'est la classe qui est passe en paramtre lors de la conception du rapport (fonction createDocument(..)). C'est grce la reflection que la demande de l'utilisateur dans la template va accder aux mthodes de cette classe.
Interface AuditReportMapFacade :
public interface AuditReportMapFacade { Auditable getAuditable(); void setAuditable(final Auditable auditable); String getLast(String macId); // set l'Audit utiliser
public String getLast(String mac_ID) { final AC ac; MAC mac; mac = BeanFactory.getMACService().getMAC(mac_ID); if(mac != null){ ac = _auditable.getLastAC(mac); if(ac != null){ return ac.getStringValue(); } else{ return "NO DATA"; } } else{ _logger.trace("Le mac_ID ["+mac_ID+"] pass en parametre est incorrecte"); return "BAD VALUE"; } }
//etc.
EtapeReporting :
C'est le JDialog par lequel toute la partie Reporting est gre. Il contient de nombreux JPanels qui se suivent la manire suivant / prcdent. (voir captures d'cran).
page : 73
4.2.5 Explications
Voici les diffrentes tapes du module de reporting de Jafar.
accder au module de reporting (un jDialog) via un bouton ; prendre connaissance du manuel de cration de templates (le fichier PDF est directement ouvert l'cran grce un viewer PDF) dans la langue qu'il a slectionne parmi l'anglais, le nerlandais et le franais ;
page : 74
Les erreurs dues au crateur du template (mauvais encodage : getValue(compayName ) au lieu de getValue( companyName ) par exemple.) Les erreurs dues au programme lui mme : par exemple, on veut gnrer un rapport dans un fichier qui est dj ouvert ! L'erreur sera alors affiche pendant l'excution du programme.
Les premires cites seront gres grce au programmequi informera l'utilisateur dans son rapport final que son template contient des erreurs. Par exemple : Nom entreprise : NO-DATA Nom entreprise : BAD-VALUE // signifie qu'il n'y pas de valeur dans la base de donnes pour // ce champ // signifie que l'argument pass est incorrect
Dans le cas de demande de champ de type DATE, l'utilisateur spcifie lui mme le format qu'il dsire. Si ce format est incorrect, il sera remplac par un format par dfaut ce qui vite quelques soucis.
${MaListe.item}
[/#list]
page : 75
${MaListe.item}
page : 76
page : 77
page : 78
4.3.1 Objectifs
Il est fort semblable celui du Reporting client de Jafar. la diffrence qu'ici les donnes gnrer en rapport proviennent de l'ensemble des utilisateurs. On effectuera donc le rapport d'un Auditable sur base de son ID. Autre objectif : pouvoir faire des rapports de statistiques (exemple : le pourcentage d'entreprises qui ont de l'iode dans leur btiment) avec l'apport de diagrammes pour un meilleur rendu visuel.
Il s'agit simplement d'un jar tlcharger ( l'adresse suivante : http://www.jfree.org/jfreechart/ ). La gnration de graphique et autre courbe est trs simple et trs complte. On peut tout prciser. Seule contrainte de cette API, il faut beaucoup de ligne de code pour arriver un rsultat correct. Exemple : La classe qui permet la cration des graphiques est la classe ChartFactory. Cette classe est compose ensuite de plusieurs mthodes qui permettent de crer des graphiques dvolutions, des camemberts ou des histogrammes.
DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue((double)125, "Stat", "champs" ); // remplissage du dataset ... //... JFreeChart chart = ChartFactory.createBarChart(TITLE, Y_VAL, X_VAL, dataset, PlotOrientation.HORIZONTAL, false, false, false); CategoryPlot plot = chart.getCategoryPlot(); BarRenderer renderer = (BarRenderer)plot.getRenderer(); GradientPaint paint = new GradientPaint( 0.0f, 0.0f, Color.red, 0.0f, 0.0f, new Color(0,0,64) ); renderer.setSeriesPaint(0, paint); // fixe couleur BufferedImage image = chart.createBufferedImage(400,300); // fixe taille ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try{ ImageIO.write(image, PNG, outputStream); } catch(IOException e){ throw new RuntimeException("Should never happen :"+e.getMessage()); } return outputStream.toByteArray();
page : 80
Par exemple : Le traitement d'une demande d'un utilisateur se droule selon les tapes suivantes : 1. le client fait une demande au contrleur (AuditableReportingController). Ce contrleur est une servlet qui voit passer toutes les demandes des clients ; 2. le contrleur traite cette demande. Pour ce faire, il peut avoir besoin de l'aide de la couche mtier (AuditableReportMapperStat), ce qu'on appelle le modle M dans la structure MVC; 3. le contrleur reoit une rponse de la couche mtier. La demande du client a t traite. Celle-ci peut appeler plusieurs rponses possibles. Un exemple classique est : une page d'erreurs si la demande n'a pu tre traite correctement une page de confirmation (getSuccessView()) ou autre (OdtReportingView);
4. le contrleur choisit la rponse (= vue) envoyer au client ; 5. la vue est envoye au client (return new ModelAndView(..)). C'est le V de MVC.
AuditableReportingController.java : gre ce qui concerne (la vue) le reporting des Auditables et utilise les classes mtiers et DAO (pour accder aux donnes) comme ReportingCommand, auditableReportMapper, AuditableEntry. StatisticsReportingController.java : idem que la classe prcdente, sauf que ce contrleur s'occupe du reporting des statistiques. TemplateAddController.java : s'occupe de l'ajout des nouveaux fichiers templates sur le serveur. Il utilise la classe mtier : TemplateAddCommand.
page : 81
ReportingCommand.java : contient toutes les donnes accessibles via les vues relatives au reporting (aussi bien d'Audit que de Statistique) TemplateAddCommand.java : idem pour l'ajout de template AuditableReportMapper.java : reprsente l'objet qui permet le remplissage des templates d'Audit. AuditableReportMapperStat.java : idem pour les statistiques AuditableEntry.java : permet de rcuprer les donnes d'un Audit (par rapport un ID donn)
page : 82
<label>Format Type : </label> <div> <spring:bind path="cmd.templateFormat"> <select name="${status.expression}"> <option value="ODT">Open Office</option> // choix du format du rapport <option value="PDF">Pdf</option> <option value="DOC">Microsoft Word</option> </select> </spring:bind> </div> </p> </fieldset> <fieldset> <legend>Audit Selection, </legend> <p> <label>Audit ID : </label> <spring:bind path="cmd.id"> // rcupration de l'ID dans cmd.id <mx:userIdForm path="cmd.id" codeTips="l'ID de l'Audit"/> </spring:bind> </p> </fieldset> <center> // bouton d'envoi vers la servlet Click to : <input type="submit" value=" Generate the report "/> </center> </form>
La Servlet AuditableReportingController.java (elle hrite de la classe abstraite AbstractReportingController qui initialise la page, etc.):
public class AuditableReportingController extends AbstractReportingController { private static final String TEMPLATE_PATH = "auditable"; protected ModelAndView onSubmit(final Object object) throws Exception { final ReportingCommand reportingCommand; final AuditableEntry auditableEntry; final AuditableReportMapper auditableReportMapper; final Map<String, Object> map; reportingCommand = (ReportingCommand) object; // traite l'appui du bouton
map = new HashMap<String, Object>(); auditableEntry = getAuditableService().getbyId(reportingCommand.getId()); if (auditableEntry == null) { // teste si l'ID pass est OK ou non reportingCommand.setReportSuccess(true); reportingCommand.setMsgResult(MSG_RESULT_ERROR); return new ModelAndView(getSuccessView()); // return la page d'origine } else { auditableReportMapper = new AuditableReportMapper(auditableEntry); map.put(MAP_CONTENT, auditableReportMapper); // en fonction de la demande de format, on retourne le rsultat dans une // vue diffrente (ODT/PDF/DOC) if (FORMATS[0].equals(reportingCommand.getTemplateFormat())) { return new ModelAndView(new OdtReportingView(reportingCommand.getTemplateName(), getTemplatePath()), map);
Lodomez Philippe Groupe 23 27 Haute Ecole Rennequin Sualem page : 83
} else if (FORMATS[1].equals(reportingCommand.getTemplateFormat())) { return new ModelAndView(new PdfReportingView(reportingCommand.getTemplateName(), getTemplatePath()), map); } else if (FORMATS[2].equals(reportingCommand.getTemplateFormat())) { return new ModelAndView(new DocReportingView(reportingCommand.getTemplateName(), getTemplatePath()), map); } else { throw new IllegalStateException("unknow format [" + reportingCommand.getTemplateFormat() + "]"); } } }
La classe ReportingCommande :
public class ReportingCommand { private String _templateDescription; private String _templateFormat; private String _templateName; private List<String> _templates; private Boolean _reportSuccess; private String _msgResult; private String _id; // les donnes ncessaires
public String getTemplateDescription() { return _templateDescription; } public void setTemplateDescription(final String templateDescription) { _templateDescription = templateDescription; } public String getTemplateFormat() { return _templateFormat; } public void setTemplateFormat(final String templateFormat) { _templateFormat = templateFormat; } public String getTemplateName() { return _templateName; } public void setTemplateName(final String templateName) { _templateName = templateName; } ...etc.
La Vue OdtReportingView (qui hrite de la classe abstraite AbstractReportingView, mre des vues de chaque format ) :
public class OdtReportingView extends AbstractReportingView { private static final String FILENAME = "report.odt"; private static final String CONTENT_TYPE = "application/vnd.oasis.opendocument.text"; private static final String MAP_CONTENT = "auditableReportMapper"; private static final String EXT = ".odt"; private static final int OUTPUT_BYTE_ARRAY_INITIAL_SIZE = 4096; private final String CONTENT_DISP = "Content-Disposition";
page : 84
public OdtReportingView(final String templateName, final File templatePath) { //constructeur super(templateName, templatePath); } // cration du rapport par jooreport protected void generateReport(final Map map, final OutputStream outputStream) throws Exception { final DocumentTemplate documentTemplate; documentTemplate = new ZippedDocumentTemplate(new FileInputStream(new File(getTemplatePath(), getTemplateName() + EXT))); documentTemplate.createDocument(map.get(MAP_CONTENT), outputStream); } protected final void renderMergedOutputModel(Map map, HttpServletRequest httpServletRequest, HttpServletResponse response) throws Exception { final ByteArrayOutputStream baos; final ServletOutputStream out; baos = new ByteArrayOutputStream(OUTPUT_BYTE_ARRAY_INITIAL_SIZE); generateReport(map,baos); response.setContentType(getContentType()); response.setHeader(CONTENT_DISP, "attachment; filename=\"" + getFilename() + "\""); response.setContentLength(baos.size()); out = response.getOutputStream(); // renvoie de la rponse (le rsultat / voir captures cran) baos.writeTo(out); out.flush(); }
page : 85
page : 86
page : 87
page : 88
L'tude, l'analyse et ensuite le dveloppement de ces modules de reporting (ct client et serveur Jafar) furent un projet trs intressant et motivant, et ce, plusieurs titres. Tout d'abord, il s'agissait tout simplement pour moi du premier contact avec une socit. On est bien loin du rassortiment de rayon de supermarch comme travail d'tudiant. C'est toujours avec l'aide et sous le regard critique du dveloppeur me suivant (David Wery) que j'ai volu dans ce projet. Il me soutenait toujours quand, parfois, une semaine tait ncessaire pour dcouvrir ce qui allait apporter un petit plus l'application. Il m'a aussi appris le code review. Au niveau analyse, j'ai t surpris par le fait qu'un simple petit vice peut dmolir un produit. Malgr tout, le choix qui a t fait l'tait l'unanimit et pourtant ce produit (JooReports) ne partait absolument pas favori : les apparences sont parfois trompeuses ! Pour cette tude et cette analyse, j'ai eu l'opportunit de pouvoir prendre mon temps, de faire de nombreux tests et de bien me documenter. J'ai ainsi pu monter un dossier solide sur chaque produit. Cette manire de travailler est beaucoup plus professionnelle et trs enrichissante au niveau des connaissances personnelles. Il est vrai qu' l'cole, la succession des dossiers ne favorise pas toujours un travail complet et soign. On travaille aussi sous une autre pression. Non pas celle d'un professeur qui attend son programme, mais pour un client important dont dpend la socit pour survivre dans ce monde conomique instable. Pour la partie Jafar (client et serveur), le rsultat est l et je pense qu'il satisfait les intresss. La partie Java pure du client ne m'a pas pos trop de problmes. Je me suis par contre fait les dents sur Spring MVC. Mais cela ne peut que m'tre bnfique pour le futur comme d'ailleurs toutes les autres parties du T.F.E qui m'ont apport un beau bagage utiliser plus tard videmment ... Mais ceci est une autre tape et je suis prt la franchir !
Philippe Lodomez
page : 89
page : 90
Pour BIRT :
Site d'Eclipse : Documentation : http://www.eclipsetotale.com http://www.demay-fr.net/blog/index.php
Pour iText :
Site Officiel : Documentation : http://www.lowagie.com/iText/docs.html http://www.supinfo-projects.com/fr/2006/
Pour JOOReports :
Site Officiel JooReports : Site Officiel jFreeChart (gnrateur de graphique) : Site Officiel FreeMarker (moteur de template) : http://jooreports.sourceforge.net/ http://www.jfree.org/jfreechart/ http://freemarker.sourceforge.net/
Notion Thorique :
Spring MVC documentation : L'API rflection : divers (club d'entraide) : http://tahe.ftp-developpez.com/fichiers-archive/springmvc4.pdf http://ricky81.developpez.com/tutoriel/java/api/reflection/ http://www.developpez.com
Gnral :
Encyclopdie libre sur Internet : Dictionnaire en ligne : Information entreprise Manex : Information logitiel Jafar : http://fr.wikipedia.org/wiki/Accueil http://dictionnaire.mediadico.com/ http://www.manex.be http://www.jafar.biz
page : 91
6.2 Glossaire
API : interface de programmation, permet de dfinir la manire dont un composant informatique peut communiquer avec un autre. Code review : c'est une examination systmatique de son code source afin d'y trouver des erreurs, des mthodes plus rapides, etc. PKI : (Public Key Infrastructure) est un ensemble de composants physiques ( par exemple : ordinateur), de procdures humaines et de logiciels en vue de grer le cycle de vie des certificats numriques ou lectroniques. Template : est un terme anglais utilis en informatique pour dsigner un modle de conception de logiciel ou de prsentation des donnes. Un template est un moyen de sparer le fond (le contenu informationnel) de la forme (la manire dont il est prsent). Les Scripts : sont des langages de programmation crs pour raccourcir le processus traditionnel de dveloppement dition/compilation/dition des liens/excution. Le mot correspond un texte crit. Ils servent principalement lancer et coordonner l'excution de programmes. Le Serveur informatique : appel serveur lorsque le contexte s'y prte, est un ordinateur ou un programme informatique qui rend service aux ordinateurs et logiciels qui s'y connectent travers un rseau informatique, les clients. Ce service peut consister stocker des fichiers, transfrer le courrier lectronique, hberger un site Web, etc. GUI : (graphical user interface) est ce qui est affich en mode pixel au moniteur de l'ordinateur et sur lequel l'utilisateur peut agir avec diffrents priphriques d'entre (clavier, la souris, etc.). Plugin : terme anglais (qui signifie brancher), qui est employ pour dsigner un programme qui interagit avec un logiciel principal, appel programme hte, pour lui apporter de nouvelles fonctionnalits. Un PDF (Portable Document Format) est un format propritaire dvelopp par la socit Adobe Sytems au dbut des annes 90. Cependant PDF est un standard ouvert, ce qui veut dire que tout le monde peut crer des applications qui lisent et/ou crivent des documents pdf, sans payer de royalties Adobe Systems.
page : 92
6.3 Abstract
Mon stage dans la socit Manex ( o j'ai trouv une ambience de travail extraordinaire ) s'est droul en plusieurs phases. Le but premier tait de pouvoir gnrer des rapports complets et clairs des informations issues de base de donnes. Aprs l'tude et l'analyse de plusieurs outils de cration de rapports, j'ai constitu un dossier comprenant les avantages et inconvnients pour chaque produit. C'est un travail assez long qui ne consiste pas simplement lire la documentation de l'outil. Il faut tester, comparer, trouver les failles, etc. Cette tude a servi trouver le meilleur produit pour l'utiliser dans la suite de mon stage. J'ai ensuite cr un module de reporting pour une application existante (Jafar), ct client (application en java swing) et ct serveur (application Web/Spring/Jboss ). J'ai utilis l'outil de reporting JOOReports. Ces deux modules de gnration de rapports utilisent des templates comme modles. Ceux-ci sont des fichiers OpenOffice (.odt) qui comprennent du script (JOOscript) et des fonctions (spcifiques la demande de certaines valeurs). Un langage pour ces templates a t invent pour que l'application puisse interprter chaque demande de l'utilisateur. Pour finir, un travail de gestion d'erreurs tait indispensable. English version : My training period on the Manex company (where I have find a extraordinary work atmosphere) has take place into several stages. The first goal was to be able to generate complete and light reports of Data base informations. After the study and the analysis of several reporting tools, I constitued a file including the advantages and disadvantages for each poduct. It is a rather long work which don't not constist simply to read the product documentation. Some tests, comparisons and mistakes research should be made. This study was used to find the best tools to use it in the continuation of my training course. I then created a reporting module for an existing application (Jafar), side client (Java application) and side server (Web application). I used the reporting tool JOOReports. These two reporting modules use templates like models. Those are OpenOffice files which include scripts (JOOscript) and functions (which return values). A template language was invented so that the application can interpret each user requests. To finish, an error management work was essential.
page : 93