Les modules

Comme mentionné précédemment, nous souhaitons mettre en oeuvre deux plugins du framework Play! Ces deux plugins, pourtant natifs, ne sont pas activé par défaut. Nous allons le faire de ce pas.

Activation CRUD

Pour activer un plugin engénéral, il faut éditer le fichier [projectname]/conf/application.conf et se rendre vers la section traitant des … modules !

Elle a à quelques choses prêt cette tête :

# Additional modules        # ~~~~~        # A module is another play! application. Add a line for each module you want        # to add to your application. Modules path are either absolutes or relative to        # the application root.        # They get loaded from top to bottom; Syntax: module.{name}={path}        #        # Keep the next line as is to help the play script to manage modules.        # ---- MODULES ----

Pour en ajouter, il suffit de procéder à l’ajout d’une ligne à la syntaxe suivante:

module.[modulename] = ${play.path}/modules/[modulename]-[version]

où:

  • modulename est le nom du module à activer dans votre projet,
  • version est la version cible du dit module, qui est facultatif.

CRUD

Nous souhaitons donc ajouter le module CRUD:

module.crud=${play.path}/modules/crud

Le module apportant un certain nombre de fonctionnalités, il est accompagne de nouvelles pages qui seront dynamiquement créés. pour permettre l’accés à ces pages, nous allons devoir découvrir une nouvelle fonctionnalité de Play!: les routes !

Commençons par finir de configurer notre module CRUD en ajoutant dans le fichier myplayapp/conf/routes la ligne suivante, en fin de fichier:

# Import the default CRUD routes        GET     /admin             module:crud

Cette déclaration va permettre d’accéder au page générée dynamiquement a partir de l’url http://localhost:9000/admin, (pour un accès depuis le server play en mode run).

Voilà. Comme vu déjà auparavant, on s’apperçoit que les fonctionnalité de Play! sont d’une simplicité de mise en oeuvre déconcertante. Tout développeur Java se souvient des nombreux fichier de configuration qu’ils soient .properties.conf ou .xml, ils étaient dans tous les cas nombreux. Ici, point de complexité, juste du bon sens.

nota: Il est important de noter que suite à chaque ajout/déclaration d’un nouveau plugin dans votre projet, il est IMPERATIF de regénéré les dépendance du projet eclipse via la commande play eclispify . sous peine d’avoir des erreur de compilation ainsi que des defaillances du système de complétion automatique offert par Eclipse. Cette remarque est également vraie pour NetBeans.

CRUD sur mes entités ?

CRUD, pour les néofites, est un néologisme très anglicisé, correspondant à *C*reate *R*etrieve *U*pdate *D*elete, et signifiant la possibilité de fournir de façon extrêmement simple une interface utilisateur afin d’accéder aux 4 opérations de base pour chaque entité déclaré dans lepackage models.

Ainsi pour notre entité Game, nous souhaitons avoir rapodement une interface simple permettant la gestion de la liste des entités Game.

Pour celà, une simple opération permet de définir un contrôleur spécifique à notre entité. Créons la classe Games dans le package controllers. Celle-ci doit hériter de la classe CRUD mise à disposition par le plugin précédemment activé.

La classe sera :

/**         * Project myplayapp Part 2         * Admin zone         */        package controllers;

/**
* CRUD management for Game entity.
* @author McGivrer
*
*/
public class Games extends CRUD {

}

Puis, prenez votre élant et lancer le serveur play en mode DEV via la commande:

$ play run

et constatez la beauté du geste 😉

La zone d’administration que nous accédons par http://localhost:9000/admin donne la page ci-dessous:

figure 2.5 - Accueil de la partie principale générée par le plugin CRUD
figure 2.5 – Accueil de la partie principale générée par le plugin CRUD

Si nous cliquons sur le lien “Games” représentant notre nouveau contrôleur, nous pouvons voir la page spécifique à notre entité Game:

figure 2.6 - Page générée par CRUD pour l'entité Game via le contrôleur Games
figure 2.6 – Page générée par CRUD pour l’entité Game via le contrôleur Games

Et enfin, si nous cliquons sur le lien “Add”, situé en haut à droite de la page en cours, vous voyez alors le formulaire généré par CRUD pour la modification/création d’une (nouvelle) occurence de Game:

figure 2.7 - Formulaire d'édition d'une entité Game
figure 2.7 – Formulaire d’édition d’une entité Game

I18n

Ok, vous me direz que ces formulaires et pages auto générés sont fort beaux, mais les labels des champs ne sont pas trop parlant. Qu’à cela ne tienne, allons modifier ces libellés.

Pour celà, penchons nous sur un autre point fort de Play! : la gestion de l’internationnalisation (le fameux i18n !).

Vous constaterez certainement, tôt ou tard, la présenc
e, certe bizard, d’un fichier “messages” dans le répertoire conf de votre projet Play!. Et bien, ouvrons le pour voir !

# You can specialize this file for each language.        # For example, for French create a messages.fr file        #

Bon, ok il est vide de tout contenu, sauf d’un subtile commentaire. Et pourtant, en une seule phrase, tout est dit !

Vous voulez accéder à des textes subtilement traduit dans une langue particulières, et bien simplement créez le fichier messages.[ext] our [ext] sera le code i18 de la langue cible.

Ainsi pour nous, bon vieux français, nous devrons créer un fichier “messages.fr” et celui là comportera tous les message dans langue de molière que nous souhaitons voir apparaitre dans nos pages.

Pour information, la sélection de la langue à afficher dans les pages pour un utilisateur se fera en fonction de la langue configurée dans les options des navigateurs web. par exemple sous firefox, ce paramétrage se trouve dans “Preferences → Advanced → Languages”:

figure 2.8 - Configuration de la langue d'affichage dans Firefox
figure 2.8 – Configuration de la langue d’affichage dans Firefox

figure 2.9.1 - Configuration de la langue d'affichage dans Chromium - étape 1
figure 2.9.1 – Configuration de la langue d’affichage dans Chromium – étape 1

figure 2.9.2 - Configuration de la langue d'affichage dans Chromium - étape 2
figure 2.9.2 – Configuration de la langue d’affichage dans Chromium – étape 2

Donc, nous devons tout d’abord déclarer la liste des langues supportées par notre application. Nous nous contenterons ici,,dans le cadre de ce tutoriel, de supporter l’anglais et le français. Aussi, le fichier conf/application.conf sera modifié comme suit:

# i18n        # ~~~~~        # Define locales used by your application.        # You can then place localized messages in conf/messages.{locale} files        application.langs=fr,en

Créons maintenant un fichier conf/messages.fr pour le français, et ajoutons-y nos libellés:

# You can specialize this file for each language.        # For example, for French create a messages.fr file        #        title=Titre        platform=Platforme        description=Description        publish=Publi??        testContent=Texte du test        developerStudio=Studio de d??veloppement        editor=Editeur        yearOfPublication=Ann??e d'??dition        note=Note        cover=Jaquette
  • ce qui donnera dans l’affichage de la page de modification de Game:

figure 2.10.1 - Langue française sur le navigateur
figure 2.10.1 – Langue française sur le navigateur

  • Si nous créons la version anglaise dans le fichier conf/messages.en :
# You can specialize this file for each language.        # For example, for French create a messages.fr file        #        title=Title        platform=Platform        description=Description        publish=Publish        testContent=Test Content        developerStudio=Developer Studio        editor=Editor        yearOfPublication=Year        note=Note        cover=Cover