Category: Gestion de configuration

JSF Charts : graphiques avec JSF

By , 31/01/2013

Cela fait longtemps que je souhaite consacrer un article sur les graphiques en JSF. Après avoir essayé plusieurs solutions je n’ai été convaincu par aucune librairie. Il me semble que la plus intéressante est la solution proposée par PrimeFaces. Ce que je n’aime pas dans cette approche c’est d’utiliser les classes spécifiques de la librairie JSF pour décrire les séries et non des collections simples. De plus, je ne trouve pas les graphiques très dynamiques. En tout cas pas à la hauteur des librairies Javascripts ou Flex qui existent actuellement.

Deux librairies Javascipts me semblent très performantes d’un point de vue utilisateur et développeur :

  • amCharts :
    • graphiques dynamiques, diversifiés, professionnels
    • licence gratuite
  • Highchart :
    • graphiques dynamiques, diversifiés, professionnels
    • approche déclarative des graphiques
    • licence nécessaire selon le type d’utilisation

C’est l’approche déclarative des graphiques qui m’a convaincue de la fiabilité d’une librairie JSF basée sur Hightchart. On retrouve le même principe déclaratif dans les interfaces xhtml proposées par JSF. Je me suis donc lancé dans la création de cette librairie qui est un wrapper JSF de Highchart : jsfcharts. La demo ce trouve hébergée ici : http://showcase-jsfcharts.rhcloud.com/home.jsf.

Mon objectif : proposer une solution efficace à développer, agréable à utiliser et compatible avec plusieurs systèmes (PC, mobile, multi-navigateurs). C’est à dire :

  • Rapide : peu de lignes à coder
  • Simple :
    • objets simples sans préparation
    • Utilisation transparente de la librairie

Au final, créer un graphique dynamique en JSF est presque aussi simple que créer un tableau (h:dataTable). Par exemple, pour le graphique ci-dessous, il faut écrire ce fichier xhtml et cette classe java :

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:jsfcharts="http://everythingiswrong.org/jsfcharts"
   template="/WEB-INF/templates/default.xhtml">
   <ui:define name="content">
       <jsfcharts:chart id="test" marginRight="130" marginBottom="25">
          <jsfcharts:title text="Monthly Average Temperature" />
          <jsfcharts:subtitle text="Source: WorldClimate.com" />
          <jsfcharts:xAxis categories="#{chartBean.abscisse}" />
          <jsfcharts:yAxis>
          <jsfcharts:title text="Temperature (˚C)" />
          </jsfcharts:yAxis>
          <jsfcharts:legend layout="vertical" align="right" verticalAlign="top" x="-10" y="100" borderWidth="0"/>
          <jsfcharts:tooltip valueSuffix="˚C" />
          <jsfcharts:series>
              <jsfcharts:serie label="Tokyo" value="#{chartBean.tokyo}" />
              <jsfcharts:serie label="New York" value="#{chartBean.newYork}" />
              <jsfcharts:serie label="Berlin" value="#{chartBean.berlin}" />
              <jsfcharts:serie label="London" value="#{chartBean.london}" />
          </jsfcharts:series>
       </jsfcharts:chart>
...
</ui:composition>
package org.everythingiswrong.jsf.jsfchartsdemo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.enterprise.inject.Model;

@Model
public class ChartBean {

   private Double[] tokyo;
   private Double[] newYork;
   private Double[] berlin;
   private Double[] london;
   private List<String> abscisse;

   // Getter, Setter  ...

   @PostConstruct
   public void initialize() {
      tokyo = new Double[] {7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6};
      newYork = new Double[] {-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5};
      berlin = new Double[] {-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0};
      london = new Double[] {3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8};
      abscisse = Arrays.asList(new String[] {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"});
   }
}

Pour aller plus loin, je vous invite à visiter le projet github de JSFCharts : https://github.com/yanLanglois/jsfcharts.

SvnMapper

By , 01/12/2010

Il y a quelques mois, j’ai découvert un outil très intéressant pour les développeurs qui travaillent avec Subversion : SvnMapper.

Il affiche l’historique d’un projet subversion sous la forme d’un graphique où il est possible de déplacer les branches, de voir les commits, de s’interface avec TortoiseSvn pour visualiser les différence sur un commit, etc.

Avec toutes ses fonctionnalités plus ou moins avancées, je pense que SvnMapper permet un audit approfondi de la gestion de contrôle en soulignant les tags, les branches et surtout les merges. Qui n’a jamais oublié de faire un merge pour reporter des corrections d’une version à une autre ?

Remarque : pour afficher l’historique d’un projet, il faut donner l’adresse de sa branche principale : le trunk.

SVN Credentials et JDeveloper 11g

By , 06/09/2010

Après avoir installé JDeveloper 11g, je me suis rendu compte qu’Eclipse n’utilisait plus le cache de l’authentification SVN. Il me fallait donc retaper mon mot de passe à chaque connexion au serveur SVN dans eclipse. A priori l’erreur se produit aussi lorsqu’on utilise le connecteur SVN de SQLDeveloper.

Pour retrouver le comportement normal du client SVN d’Eclipse il m’a fallu supprimer le répertoire de sauvegarde des informations de connexion de SVN (%APPDATA%/Subversion/auth/ sous windows ou bien ~/.subversion/auth/ sous linux). Ce répertoire est recréé par le client SVN à l’utilisation suivante.

Hébergement Subversion, Git et Trac gratuit

By , 13/02/2010

Voici un site internet très intéressant pour les développeurs qui souhaitent débuter un projet gratuitement sur internet avec une gestion de contrôle (subversion ou git) et un site incluant entre autre un wiki et un bug tracker. Oui, oui tout cela gratuitement : http://www.assembla.com

Ce site propose en plus de ces offres d’hébergement payantes une offre dite “Free Public Plan”. Vous avez le choix entre plusieurs types de “workspace” :

  • Subversion Hosting with Integrated Tickets : une solution assembla avec un système de ticket et de reporting pour le projet (style de GForge ou Trac “assembla made”)
  • Team collaboration : une solution qui permet de coordonner une équipe
  • Trac and Subversion Hosting : Trac et subversion
  • Subversion Repository : seulement Subversion
  • Git with Integrated Tickets : la même solution que la première en remplaçant Subversion par Git

 

Après avoir créer un compte il est possible de se créer plusieurs workspaces différents.

OfficeFolders theme by Themocracy