Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Java et Eclipse
  3. Application finale
Extrait - Java et Eclipse Développez une application avec Java et Eclipse (2e édition)
Extraits du livre
Java et Eclipse Développez une application avec Java et Eclipse (2e édition)
2 avis
Revenir à la page d'achat du livre

Application finale

Impressions et exports

Bâtir des états sophistiqués, produire des fichiers de plusieurs formats, ou élaborer des graphiques avec Java demande du temps et la maîtrise de nombreuses classes et méthodes supplémentaires. Conscients de ce fait, plusieurs sociétés proposent des outils de reporting permettant de réaliser plus rapidement et sûrement ces types de documents.

Dans ce chapitre, état et rapport sont considérés comme des synonymes.

La librairie JasperReports, de la société JasperSoft a été retenue, étant un très bon système de reporting open source dédié aux applications Java. Cet outil peut fonctionner indépendamment d’Eclipse ou en collaboration avec celui-ci. Jaspersoft Studio est l’éditeur graphique WYSIWYG (What You See Is What You Get) intégré dans Eclipse qui se charge de la création des modèles de rapports. 

JasperReports est une librairie écrite en Java.

1. Fonctionnement de JasperReports

Pour générer des rapports, il faut nécessairement passer par trois étapes : la création du fichier de Jasper décrivant le contenu du rapport, la compilation de ce fichier en un format exploitable par Jasper en production, et l’alimentation de données pour remplir ce rapport.

Étape 1 : création du fichier jrxml

JasperReports se base au départ sur des fichiers XML (eXtensible Markup Language). La maîtrise de XML n’est pas nécessaire pour cette étape car la création se fait par l’intermédiaire de Jaspersoft Studio, qui génère le fichier correspondant, mais elle est recommandée car à un certain stade il devient plus productif d’intervenir directement sur le fichier XML.

À la fin de cette étape, un fichier XML est obtenu avec l’extension jrxml qui est le modèle de rapport à partir duquel plusieurs documents de différents formats seront produits.

images/9-14-1.png

Étape 2 : compilation du fichier jrxml et génération du fichier Jasper

À partir du fichier jrxml, nommé aussi modèle jrxml, Jasper va procéder à une compilation qui permet de vérifier si le modèle est bien construit, notamment...

Graphiques

JFreeChart a été retenu pour la production des graphiques qui est, comme JasperReports, open source et entièrement écrit en Java. JFreeChart est une librairie fournissant une API permettant à Java de générer des graphiques à partir de sources de données et dont la sortie possible est une image JPEG ou PNG.

1. Création avec Jaspersoft Studio et JFreeChart

Pour rendre la création de graphiques encore plus simple, il est possible de travailler à nouveau avec Jaspersoft Studio en tandem avec JFreeChart.

Un éditeur graphique est ainsi disponible pour dessiner les graphiques, placer d’éventuels paramètres et tester le résultat final comme cela vient d’être fait avec l’aperçu, l’impression et l’exportation de clients.

Un graphique simple va être produit, qui va donner les pourcentages du nombre de commandes par mois pour une année donnée.

images/9-14-15.png

 Téléchargez les librairies de JFreeChart sur le site de SourceForge à l’adresse suivante : https://sourceforge.net/projects/jfreechart/files/

 Décompressez le fichier et ajoutez les librairies suivantes à celles déjà présentes dans le projet de gestion.

images/14-34.png

Avant de commencer la création du rapport, il faut s’intéresser au modèle de données.

Chaque statistique comprend deux propriétés : le nom du mois et le nombre de commandes de ce mois.

 Créez une classe Stat dans le package dialogue.stats.


package dialogue.stats; 
 
import java.time.Month; 
import java.time.format.TextStyle; 
import java.util.Locale; 
 
public class Stat { 
    private final Long compteur; 
     
    private final String mois; 
     
    public Stat(Object obj) { 
        this( (Integer) ((Object[]) obj)[0], 
              (Long) ((Object[]) obj)[1]); 
    } 
 
    private Stat(Integer mois, Long nbr) { 
        this(Month.of(mois), nbr); 
    } 
 
    public Stat(Month mois, Number nbr) { 
        this.mois...

Création de l’exécutable

À ce stade, il est temps de tester l’application indépendamment d’Eclipse.

Il faut donc créer un exécutable (cf. chapitre Prise en main d’Eclipse, section Premier exécutable).

Afin de se simplifier la vie concernant toutes les librairies à importer, le projet Maven est utilisé pour récupérer toutes les dépendances, c’est-à-dire tous les fichiers .jar nécessaires à l’application pour fonctionner.

En effet, un projet développé dans Eclipse bénéficie du support de l’application Eclipse elle-même : les librairies nécessaires et manquantes sont rajoutées silencieusement. Mais les utilisateurs de vos applications futures ne connaîtront peut-être jamais Eclipse ! L’objectif est de leur donner une application qui soit auto-suffisante : un voire deux fichiers seulement doivent suffire à faire démarrer cette application ou à l’installer.

 Créez un fichier nommé pom.xml à la racine du projet.


<project>  
     
    <modelVersion>4.0.0</modelVersion>  
    <name>ENI Java 9</name>  
  
    <groupId>com.eni</groupId>  
    <artifactId>gestion</artifactId>  
    <version>1.0.0-SNAPSHOT</version>  
  
    <properties>  
        <java.version>9</java.version>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    </properties>  
  
    <repositories>  
        <repository>  
            <id>central</id>  
            <name>Maven Repository Switchboard</name>  
            <layout>default</layout>  
            <url>http://repo1.maven.org/maven2</url>  
            <snapshots>  
                <enabled>false</enabled>  
      ...

Aller plus loin

L’application de gestion est maintenant fonctionnelle pour un utilisateur.

Il reste néanmoins encore beaucoup d’axes de travail possibles :

  • Il doit être possible à plusieurs utilisateurs de travailler simultanément sur les mêmes données.

  • Les interfaces graphiques des utilisateurs doivent se mettre à jour quand une donnée est modifiée par quelqu’un.

  • Un utilisateur doit pouvoir créer, éditer et supprimer des catégories et des fournisseurs.

  • La récompense principale d’une application belle et agréable à utiliser est encore plus de travail, car elle procure des idées aux utilisateurs ! Attendez-vous à recevoir des demandes...

Relativement au premier point listé, l’application doit pouvoir gérer plusieurs utilisateurs, ces utilisateurs pouvant se trouver en n’importe quel point du globe.

Au-delà de la modification consistant à s’authentifier avec des couples login/mot de passe différents (via une table dédiée, un annuaire LDAP…), il est important que chaque utilisateur récupère les bonnes informations, notamment temporelles.

Or, un utilisateur basé à Buenos Aires ou Katmandou ne verra pas les mêmes dates de commande qu’un utilisateur basé à Paris !

Cela est dû au fait que les informations temporelles stockées dans la base de données ne prennent pas en compte le fuseau horaire. La date de la commande est stockée au format 2015-05-25 21:26:33. Et lors du rapatriement des données par JPA, cet horodatage est combiné avec le fuseau horaire local de l’utilisateur !

Comment résoudre ce problème ? Plusieurs alternatives sont possibles :

  • Changer dans la base de données le format de la date et de l’heure en un long, qui représentera le nombre de millisecondes (ou de secondes) écoulées depuis le 1er janvier 1970 à minuit UTC.

    Cette solution n’est pas convenable car il sera alors impossible de créer simplement le graphique des statistiques. Il faut pour cela garder le format SQL TIMESTAMP.

  • Stocker l’information...