Archive

Archive for the ‘Blog’ Category

ExcelTemplate, la lecture de fichiers Excel facilitée

January 26th, 2007

Cet article présente un petit outil OpenSource que j’ai développé pour faciliter la lecture de jeux de test Excel dans une démarche Test Driven Requirement.

Le méthodes agiles préconisent de tester avant de développer. Pour ce faire, un outil comme Fitness permet d’écrire des tests utilisateur automatisés en utlisant un wiki et des tables HTML. Pour ma part, je préfère une approche basée sur des fichiers Excel®. Se pose alors la problématique de la lecture de ces fichiers.

POI-HSSF permet de lire un fichier Excel®. Toutefois le code à écrire est vite illisible et répétitif.
En m’inspirant (très) fortement des JdbcTemplate et JmsTemplate de Spring, j’ai commencé à concevoir un ExcelTemplate capable d’encapsuler les appels à POI-HSSF, dans le but de lire des feuilles Excel®, avec un code lisible.

Voici le résultat pour convertir un onglet donné en tableau de String :

ExcelTemplate reader = new ExcelTemplate (”a.xls”);
String[][] lines = reader.read (”TabName”);

Un autre exemple pour lire un liste de Map. Chaque ligne du fichier est représentée par une Map. La première ligne donne les clefs. Les autres lignes donnent les valeurs. Petite subtilité, le fichier est lu depuis le Classpath :

ExcelTemplate reader = new ExcelTemplate (”a.xls”,getClass());
List lineAsMaps = reader.readList (”tab”);

Il est également possible de mapper les lignes dans des POJO, de cette façon :

ExcelTemplate reader = new ExcelTemplate (”a.xls”);
List beans = reader.readBeans (”tab”, MyBean.class);

Les trois exemples précédents présentent des comportements par défaut bien pratiques. Il est toutefois possible de tout customiser par l’utilisation de classes Callback. Le code suivant lit le contenu d’un onglet avec un CellMapper permettant de personnaliser la convertion du contenu d’une cellule en objet (par exemple pour tenir compte du style de la cellule) :

String[][] lines = (String[][]) reader.read (”tab”, new MyStringCellMapper(), String.class);

Voici un autre exemple utilisant un SheetExtractor pour personnaliser complètement la lecture du contenu d’un onglet tout en déléguant au template la compléxité du parsing de la feuille :

SheetInfo sheetInfo = (SheetInfo) reader.read (”TabName”, new SheetExtractor() {
public Object extractData (HSSFSheet sheet) throws IOException, DataAccessException {
return new SheetInfo (sheet.getFirstRowNum(), sheet.getLastRowNum());
}
})

private static class SheetInfo {
public int firstRow;
public int lastRow;

public SheetInfo (int firstRow, int lastRow) {
this.firstRow = firstRow;
this.lastRow = lastRow;
}
}

Le projet est en OpenSource. Les classes reposent sur Spring et sur POI-HSSF. Le projet est construit avec Maven2 et utilise des plug’ins comme Cobertura ou Checkstyle. Il a été développé avec une approche TDD et la couverture de tests est proche des 100%.

Il me reste à écrire la documentation. Un volontaire ?

Blog ,

Séminaire gratuit sur l’agilité

November 15th, 2006

Valtech, cabinet de conseil en technologies Agiles, organise un Séminaire Gratuit le 5 décembre sur le thème : Méthodes Agiles, Adoption à l’échelle d’une organisation.

Plus d’informations.

Blog ,

Valtech Days in Dallas

October 2nd, 2006

This week, I’ll be in Dallas for the Valtech Days. We’ll talk about Agile, Open Source and Emerging technologies and Trends :

Planet Agile

  • Agile Documentation
  • Fragile, not Agile
  • Effects of Agile on Nine implementation Strategies
  • Moving to SCRUM
  • The Great Metrics Debate
  • Reconsidering Roles and Responsibilities on Agile Projects
  • Distributed Agile Software Development
  • How to buy Software ?

Planet Open Source

  • Enterprise Maven 2.0
  • Spring and EJB3 Compared
  • The Value Proposition of Rails
  • Test and other Ways to Make Your Code Work Right the First Time
  • Discover Seam and Sew up your Java Projects Faster Than Ever
  • Using JBoss Cache vs. Http Session, SFSB or Entity Beans
  • Monitoring Distributed Agile Projects - a Tool Comparison
  • JBoss presents SOA for Developers

Planet Emerging Technologies & Trends

  • Combining the power of Flex and Ruby on Rails
  • SOA in stages
  • Conditions for the dream of ORM to become true
  • Emerging trends in Outsourcing Software Development - Rural Shoring
  • An introduction to Aspect Oriented Programming
  • Test Driven Developments and Webservices
  • Pratices on Lean Thinking
  • Executable Requirements: How Fitnesse Can Benefit Your Team

Blog