Des news...

Written by Fneuch on 19.12.06

Bon, enfin je donne des nouvelles...

J'ai pas écris depuis le 12 décembre. Gars indigne que je suis, j'avais même pas répondu au commentaire de mon chum Cro!

Mea Culpa!

C'est en bonne partie causé par le fait que je suis en grosse période d'adaptation à mon nouveau travail et à la nouvelle acquisition familiale : Google.

Mais pour me faire pardonner (ou plutôt ne pas les perdres...) voici 3 petits liens intéressant :

Peut être fort pratique si vous tombez dans la même situation: Using Facelets TagHandlers and Adding multiple listeners

Deux billets de Martin Fischer :



Et un petit utilitaire que je commence à tester...UMLGraph - Declarative Drawing of UML Diagrams

En espérant qu'on se rejase bientôt!

Tri d'une liste grace à une propriété de l'objet

Written by Fneuch on 12.12.06

Vous avez une liste d'objet et vous voulez la trier sans passer par la Base de donnée. Vous ne voulez pas non plus implémenter l'interface comparable car vous ne voulez pas utiliser toujours le même tri...

Faites vous un objet Comparator!

En voici un qui tri sur une propriété de type Integer. C'est un draft pour répondre à mes besoins, mais c'est pour le principe.

 

package com.fneuch.collections.functor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Comparator;
public class IntegerPropertyComparator implements Comparator {

private String nomPropriete;

/**
* Constructeur par défaut.
* Ne pas oubliez d'assigner la nom de la propriété à comparer avant d'utiliser
* le comparator.
*/
public IntegerPropertyComparator() {
}

/**
* Constructeur permettant de fournir immédiatement le nom de la propriété à
* comparer.
*
* @param nomPropriete le nom de la propriété à comparer.
*/
public IntegerPropertyComparator(String nomPropriete) {
this.setNomPropriete(nomPropriete);
}
/**
* Méthode privée permettant de regrouper en un seul endroit la récupération
* de la valeur entière recherchée.
*
* @throws java.lang.reflect.InvocationTargetException Lorsque l'invocation de la méthode est infructueuse
* @throws java.lang.IllegalAccessException Si la méthode n'est pas accessible (avec un statut private par exemple)
* @throws java.lang.NoSuchMethodException Si la méthode n'existe pas
* @return la valeur entière (int) retournée par la méthode demandée
* @param obj Sur quel objet fesons nous l'invocation de la méthode.
* @param methodName Le nom de la méthode à invoquer.
*/
private int getMethodValue(String methodName, Object obj)
throws NoSuchMethodException,
IllegalAccessException,
InvocationTargetException {
// Plus claire de travailler sur l'objet classe que sur obj.getClass()
Class classe = obj.getClass();
// Récupération de la méthode à invoquer
Method method1 = classe.getMethod(methodName, new Class[] {});
// Ce comparateur ne fonctionne que sur les Integer ou les types int
// retourne en type primitif int pour des raisons de simplicité.
return ((Integer)method1.invoke(obj, new Object[] {} )).intValue();
}

/**
* Effectue la comparaison sur la méthode fournis.
*
* @return <0 si l'objet1 est plus petit, >0 si l'objet1 est plus grand et 0 si les 2 objets sont égaux
* @param o1 Le premier objet à comparer
* @param o2 Le deuxième objet à comparer
*/
public int compare(Object o1, Object o2) {
// Le nom de la propriété ne peut pas être nul ou vide
if(this.nomPropriete == null && this.nomPropriete.trim().length() == 0) {
throw new IllegalStateException("Vous devez préciser un nom de propriété à comparer");
}
/*
* Étant donné qu'on ne connait pas l'objet et qu'on fonctionne par une
* propriété pour l'instant je me limite à vérifier l'assignation.
*
* Pourrait être améliorer pour vérifier la présence de la propriété afin de
* pouvoir comparer 2 objets totalement différents, tant qu'ils ont la même
* propriété.
*/
if(!(o1.getClass().isAssignableFrom(o2.getClass()) && o2.getClass().isAssignableFrom(o1.getClass()))) {
throw new ClassCastException("Impossible de comparer " + o1.getClass().getName()
+ " avec la classe " + o2.getClass().getName());
}

// OK, on cherche une méthode du style getNomPropriete
StringBuffer sb = new StringBuffer("get");
sb.append(this.nomPropriete.substring(0,1).toUpperCase());
sb.append(this.nomPropriete.substring(1));
String methodProperty = sb.toString();
// Pour la comparaison par la suite
int valeur1 ;
int valeur2;

// Les 2 try consécutifs servent uniquement à avoir un message d'exception
// plus précis
try {
// On récupère la valeur de l'objet 1
try {
valeur1 = getMethodValue(methodProperty, o1);
} catch (NoSuchMethodException nsfe) {
throw new IllegalStateException("La propriété " + this.nomPropriete
+ " n'existe pas dans l'objet "
+ o1.getClass().getName());
}
// On récupère la valeur de l'objet 2
try {
valeur2 = getMethodValue(methodProperty, o2);
} catch (NoSuchMethodException nsfe) {
throw new IllegalStateException("La propriété " + this.nomPropriete
+ " n'existe pas dans l'objet "
+ o2.getClass().getName());
}
} catch (IllegalAccessException iae) {
throw new ClassCastException("Impossible de comparer " + o1.getClass().getName()
+ " avec la classe " + o2.getClass().getName());
} catch (InvocationTargetException ite) {
throw new ClassCastException("Impossible de comparer " + o1.getClass().getName()
+ " avec la classe " + o2.getClass().getName());
}
// On fait la comparaison et retourne le résultat
return (valeur1 - valeur2);
}
/**
* Retourne le nom de la propriété qui sera comparé.
*
* @return le nom de la propriété
*/
public String getNomPropriete() {
return nomPropriete;
}
/**
* Assigne le nom de la propriété à comparer.
*
* @param nomPropriete le nom de la propriété
*/
public void setNomPropriete(String nomPropriete) {
this.nomPropriete = nomPropriete;
}
}


Et vous l'utilisez de la façon suivante:


Collections.sort(liste,new IntegerPropertyComparator("ordreAffichage"));


Et voilà, votre objet liste sera trié.

Tout ce que vous avez à faire c'est d'avoir une liste d'objets semblables qui contiennent la méthode getOrdreAffichage().

Java Platform, Standard Edition 6 Release

Written by Fneuch on 11.12.06

Et oui, vous avez bien lu le titre. La "Java SE 6" est sortie...

Mais que contient-elle cette nouvelle version?


  • une "stack" complète pour les web services (ceci était orignalement destinée dans la version 5, mais faute de temps...)

  • L'API pour le compilateur (Peut-être la meilleure nouvelle selon moi)

  • La version 4.0 de JDBC

  • La version finale de JAXB 2.0

  • Des annotations communes

  • Un api extensible pour "processer" les annotations (en quelque sorte, un moyen de faciliter le développement des annotations)

  • Et plein d'autre choses...



Évidement, on a pas encore fini de passer à la version 5. La plupart des M/O (Ministère, organisme et organisation) sont limité par la vitesse des serveurs d'application. Je n'embarquerai pas sur le sujet, mais dites-vous que les M/O sont content que les serveurs d'application prennent leurs temps. Sinon ça déferait toute leurs quantités incroyables de norme, et règle qui date de 1970... Mais que voulez-vous, il faut continuer de croire qu'un jour il y aura de l'espoir!

Java Platform, Standard Edition 6 Release

Maven Dashboard Plugin

Written by Fneuch on 8.12.06

L'auteur nous indique qu'il vient de terminer le plugin.

Ce plugin peut être très utiles puisqu'il combine plusieurs rapports qui de toutes façons, risque d'être intégrer dans votre pom...

Maven Dashboard

Getting started with JSF, Facelets, Eclipse WTP and Tomcat - TheArcMind.com

Written by Fneuch on 8.12.06

Bon petit tutoriel de départ...

Getting started with JSF, Facelets, Eclipse WTP and Tomcat

Pictures in the database using Hibernate

Written by Fneuch on 6.12.06

À conserver...
Jurgen Van Oosterwijck Blogs: Pictures in the database using Hibernate

Internet Explorer undocumented feature...

Written by Fneuch on 6.12.06

On avait un running gag quand j'étais au MSP sur les bogues d'Internet Explorer. On disait qu'il n'en avait aucun, c'était tous des "features" non-documentés.

Donc, si vous voulez connaitre les "undocumented features" allez voir :

Channel9 Wiki: InternetExplorerProgrammingBugs

À retenir

Written by Fneuch on 4.12.06

Ça pourrait être utile un jour ou l'autre.

Runnin an own LDAP with custom objectClasses

Archetype

Written by Fneuch on 4.12.06

Bruce Snyder de BruceBlog a écrit un billet qui répertorie plusieurs archetypes pour Maven. C'est à conserver...

Maven Web Application Archetypes Now Available

Qui suis-je ?

Je suis un "accro" de Java: que vous parliez de programmation, ou de café! Je suis architecte organique pour une compagnie de consultation à Québec.

PLAYSTATION®Network

Utiliser vous Twitter?

Twitter Updates