P
'
t
i
t
e
C
h
a
t
t
e
 
spacer~ NORMAL IS JUST A SETTING ON THE DRYER Articles | Connexion
 
~GRAIN DE SEL

 Fuse, injection de ressources pour Java
13/03/2006 - 01:25

Je travaille depuis quelques temps sur une bibliotheque Java appelee Fuse que j'ai cree pour les besoins d'un projet chez Sun. Comme la version 0.2 vient de sortir, j'en profite pour vous la presenter. Cette bibliotheque est disponible sous licence BSD sur fuse.dev.java.net. Fuse permet de faire de l'injection de ressources dans des objets Java, en particulier dans des composants graphiques Swing, AWT et SWT.

Le concept est similaire aux conteneurs d'IoC. Normalement, un composant charge ses ressources lors de son initialisation. Voici par exemple comment un composant Swing chargerait une image :

class CustomComponent extends JComponent {
    private Image background;
    
    CustomComponent() {
        try {
            background = ImageIO.read(
                getClass().getResource("/resources/background.png"));
        } catch (IOException e) {
        }
    }
}

Cette solution a de nombreux desavantages, le principal etant qu'il devient difficile de localiser la gestion des ressources dans le code. En phase de conception de l'interface graphique, cette methode rend egalement les tests fastidieux. L'approche proposee par Fuse est beaucoup plus simple:

class CustomComponent extends JComponent {
    @InjectedResource
    private Image background;
}

Dans ce nouvel exemple, le composant ne va pas chercher la ressource lui-meme mais definit seulement quel(s) champ(s) correspondent a des ressources. Pour que le composant fonctionne il faut lui injecter les ressources :

ResourceInjector.get().load("mes.ressources");

CustomComponent c = new CustomComponent();
ResourceInjector.get().inject(c);

La premiere ligne charge les ressources depuis un fichier texte tandis que la derniere ligne realise l'injection a proprement parler. Voici le contenu du fichier mes.ressources :

CustomComponent.background=/background.png

Cette technique permet de modifier les ressources de l'interface graphique tres simplement. Fuse sait gerer par defaut un nombre consequent de types de donnees. Vous pouvez ainsi definir des couleurs, des degrades, des polices de caracteres, des dates, des URL, des formes, etc. Le site du projet propose une liste complete des differents types reconnus par Fuse.

Fuse propose en outre de nombreuses autres fonctionnalites comme les hives (demo) qui servent a recharger les ressources et a rafraichir l'interface graphique en cours d'execution. Vous pouvez egalement creer des definitions pour des composants dont vous n'avez pas le code source, forcer le nommage des ressources, charger des ressources depuis autre chose qu'un fichier texte (XML, base de donnees, etc.), utiliser plusieurs injecteurs a la fois...

Si cette breve description vous a interesse, je vous conseille de consulter la documentation et le blog Fuse maintenu par Daniel Spiewak.

Je vous conseille enfin de consulter l'exemple plus avance que j'ai ecrit il y a quelques semaines. Cet exemple montre l'utilisation des references mais donne surtout une meilleure idee des differentes sortes de ressources que l'on peut injecter. Vous y trouverez notamment des exemples d'injection de couleur et de degrades.

Cette news a été rédigée en écoutant The Strokes - Someday


 Romain GUY (Gfx)

 mardi 14 mars 2006 @ 13:43
  
"Cette solution a de nombreux desavantages" ...

Il serait plus élégants d'écrire : "Cette solution a de nombreux inconvéniants" ...

Spece d'américain !

sinon sur le principe cela me parait effectivement bien sympathique ...

Dis tu m'apprends le java pour que je puisse utiliser Fuse ? ^^


...
Loone 
Gravatar Image
 mardi 14 mars 2006 @ 18:27
  
Certes :) Cela dit on ecrit "inconvénient" :p

Cette réponse a été rédigée en écoutant Enya - Only Time
Gfx 
Gravatar Image
 mercredi 15 mars 2006 @ 17:02
  
Je l'aurais un jour !

Un jour, je l'aurais !


...
Loone 
Gravatar Image

 Ajoutez votre grain de sel 
 
Surnom :
E-mail :
Message :     B     I     U     CODE     QUOTE     IMAGE     CD CASE     LINK 
 
Un gâteau ?oui    non 
RisoliVillard ?oui    non 
Port de RisoliVillard :
     


 Aide
RisoliVillard est un plugin Winamp 2/5, iTunes et un outil pour XMMS qui vous permettra d'afficher la chanson que vous écoutez au moment de l'écriture de votre réponse. Le port utilisé par votre plugin doit être reproduit dans le champ ci-dessus (8462 par défaut).
Utilisation de vBCode :
- [B]gras[/B]
- [I]italique[/I]
- [U]souligné[/U]
- [QUOTE]citation[/QUOTE]
- [CODE]code[/CODE]
- [IMG]http://www.serveur.com/image.jpg[/IMG]
- [URL=http://www.serveur.com/]texte à afficher[/URL]

 
#ProgX©2005 Mathieu GINOD - Romain GUY - Erik LOUISE