lundi 28 avril 2008

[Projet] XProcessor

Il s'agit de la sur couche graphique de la classe PluginLoader. Elle utilise la librairie externe QuickGUI et est compilé en java 6.0, juste pour mettre un SplashScreen dans le manifest (possible depuis java 6.0).

XProcessor se compose d'une vue composée d'un menu, un JTree qui montre les Plugins chargés et disponible à l'utilisation, un JDesktopPane pour afficher les plugins, une console pour donner des informations qui sembles pertinentes et aussi une barre de statut.

Au début l'idée était aussi de rendre XProcessor attractif graphiquement, pour l'instant c'est plutôt sobre mais toutes les icônes ainsi que le SplashScreen sont faites "maison" (on évite ainsi les problèmes de licences) et sont réalisés avec des logiciels libres: Blender et Gimp.

(SpalshScreen du programme: 100% Blender)

Nous avons le plaisir de vous montrer une capture d'écran de la version actuelle de XProcessor.
(2 plugins visibles: Count qui sert juste de test (JPanel vide), et AOOGraphics qui est la mise sous forme de plugin d'un programme basé sur MVC réalisé en cours)

[Projet] QuickGUI! Que du bonheur!

Dans la suite de notre projet nous pensons réaliser une interface graphique et donc utiliser SWING. Cela nous permettra de nous initier et aussi de donner un coté plus réactif à nos créations.

Parce que un programme console c'est bien beau, tout le monde se rappelle de son premier "Hello World!" mais voilà une jolie interface graphique c'est tellement mieux. Dans un cadre tout à fait à part de ce blog j'ai développé un librairie externe regroupant plusieurs fonctionnalités qui me semble importante pour une interface graphique. Nommé QuickGUI elle permet au programmeur de bénéficier des options suivantes:

1) DefaultFrame qui hérite de JFrame et qui sauvegarde l'état dans laquelle elle se trouvée au moment de la fermeture du programme, à savoir: position, taille, maximisée ou non.
2) Gestion de l'internationalisation très simple, pour l'instant seul le français, l'anglais et l'allemand sont supportés.
3) Un classe RessourcesLoader qui charge en deux temps trois mouvement des objets de types: ImageIcon, Icon, Font à partir de fichiers situés sur le disque dur ou bien dans un .jar
4) Gestion simple de l'envoie d'un mail ou de l'ouverture d'un fichier avec son programme par défaut. Ce sont des possibilités Desktop incluses depuis JAVA 6.0
5) Ajout des classe Controller et view pour réalisation de programme basés sur le modèle MVC (Model View Controler)
6) Sans oublier le plus important, le chargement automatique de log4j pour générer les logs.

[Projet] Réalisation d'un chargeur de Plugin(s)

Dans le cadre de notre projet d'introspection en java, nous voulons reprendre une idée vue en cours, à savoir réaliser un programme pouvant recevoir des extensions. L'idée est à double but:

1) Nous allons pouvoir nous entrainer avec java.lang.reflect et ainsi commencer à mettre les pieds dans l'introspection java
2) Une fois la classe permettant de charger des plugins terminé nous pourrons élaborer une interface graphique qui viendra se greffer dessus et ainsi nous posséderons une base pour nos futur projet dans ce domaine.

La classe se nommera "PluginLoader" et aura comme particularité de charger des extensions qui seront des JPanel.
Voici l'idée générale:
1) le programme contient un répertoire par défaut où se trouvent les plugins, pour faciliter on nommera ce répertoire "/plugins"
2) notre programme doit pouvoir repérer un fichier extensions dans ce répertoire, on considère qu'un fichier dit "plugin" possède une extension .jar
3) le programme regarde le nom du fichier .jar et recherche à l'intérieur de celui-ci un fichier .class du même nom. Attention le fichier .class du même nom ne doit se trouver dans aucun package, question de facilité
4) un cherche alors le constructeur par défaut du .class et on crée une nouvelle instance de l'objet
5) Comme on souhaite créer des plugins qui seront des JPanels il ne reste plus qu'a "caster" l'objet obtenu et à l'ajouter au modèle avec les autres plugins précédemment chargé.


Voici le code source correspondant :



Cette classe est déjà implantée dans un programme lié à notre projet, nommé: "XProcessor"