life of french web developer
Sous Linux, voir ce post qui explique comment procéder pour générer un fichier à jour grâce à aspell.
c:\> eclipse.exe -nl en
Create a new Play site:
c:\> play new MySite
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.1, http://www.playframework.org
~
~ The new application will be created in /home/frederic/Projects/Java/play/MySite
~ What is the application name? [MySite]
~
~ OK, the application is created.
~ Start it with : play run MySite
~ Have fun!
see here for more information http://www.playframework.org/documentation/1.2.1/dependency
Edit dependencies with the dependencies.yml file:
figure 1 - A new Play! app just created
You can install a gedit plugin to integrate the Zen Coding features. Just got to the following github repo :
https://github.com/mikecrittenden/zen-coding-gedit
figure 2 - "Eclipsifyed" Play! project
figure 2.1 - Eclipse "Import..." menu
figure 2.2 - The "Existing Projects into Workspace" wizard
figure 2.3 - Detected project into browsed directory.
figure 2.4 - Play! project importer into Eclipse, ready at work !
figure 3 - "NetBeansify'ed" Play! project
figure 4 - Browser on a new Play! running project
figure 5 - At any time, just display the provided help
figure 6 - Test mode for Play! server
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.
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.Nous souhaitons donc ajouter le module CRUD:
module.crud=${play.path}/modules/crudLe 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:crudCette 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, 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
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
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
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ésence, 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.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
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,enCré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
figure 2.10.1 – Langue française sur le navigateur
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
figure 2.10.2 – Langue anglais sur le navigateur
Si les affichage par défaut dans les liste de type d’entiés et des listes des occurences de ces entités, il est possible facilement de modifier ces affichages.
Titre dans les Listes d’entités
Pour modifier la liste des entités, il suffit d’ajouter dans les Entity une méthode toString() qui permettra de formater l’affichage d’un objet de type entité dans une liste. Ainsi, pour un object de type Game, on implémentera la méthode toString() comme ci-dessous:
public String toString(){
return this.title + "("+this.yearOfPublication+")";
}La liste sera alors affichée de la manière suivante :

figure 2.11 – Titre d’un jeu personnalisé dans la liste des Games
Colonnes affichés dans les listes
Vous pouvez également donner plus d’information dans les listes affichées. pour cela, vous passez par les fichier list.html des controllers “entities”.
Pour cela, créons un répertoire views/Games et dans celui-ci créer le fichier list.html et copiez-y les lignes ci-dessous:
#{extends 'CRUD/layout.html' /}
<div id="crudList" class="${type.name}">
<h2 id="crudListTitle">&{'crud.list.title', type.name}</h2>
<div id="crudListSearch">
#{crud.search /}
</div>
<div id="crudListTable">
#{crud.table fields:['title', 'yearOfPublication', 'publish', 'platform'] /}
</div>
<div id="crudListPagination">
#{crud.pagination /}
</div>
<p id="crudListAdd">
&{'crud.add', type.modelName}
</p>
</div>vous remarquerez la ligne :
#{crud.table fields:['title', 'yearOfPublication', 'publish', 'platform'] /}
Celle-ci liste les champs que vous souhaitez afficher dans la liste des jeux.

figure 2.12 – Liste de champs personnalisé pour la liste des jeux videos
Vous remarquerz qu’ici aussi, tout les libellés sont traduits.
Voilà pour aujourd’hui, nous arrêterons là. La suite se concentrera sur le module Secure et son implémentation, ainsi que sur la customisation de la page d’accueil de l’application. Nous en profiterons également pour mettre en place une belle zone d’administration avec plein d’information.
Il sera également temps de revoir nos diverses entités pour en faire un beau modèle fonctionnel.
export PATH=%PATH%:~/tools/play:.
;D;\tools\play;.
mkdir ~/Projects/Java/playcd ~/Projects/Java/playplay new myplayapp
~ _ _~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/~~ play! 1.1, http://www.playframework.org~~ The new application will be created in /home/frederic/Projects/Java/play/myplayapp~ What is the application name? [myplayapp]~~ OK, the application is created.~ Start it with : play run myplayapp~ Have fun!~
cd ~/Projects/Java/play/myplayappplay eclipsify .
frederic@nostromo6:~/Projects/Java/play/myplayapp$ play eclipsify .~ _ _~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/~~ play! 1.1, http://www.playframework.org~~ OK, the application is ready for eclips~ Use File/Import/General/Existing project to import /home/frederic/Projects/Java/play/myplayapp into eclipse~~ Use eclipsify again when you want to update eclipse configuration files.~ However, it's often better to delete and re-import the project into your workspace since eclipse keeps dirty caches...~
cd ~/Projects/Java/play/myplayappplay netbeanify .
frederic@nostromo6:~/Projects/Java/play/myplayapp$ play netbeansify .~ _ _~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/~~ play! 1.1, http://www.playframework.org~~ OK, the application is ready for netbeans~ Just open /home/frederic/Projects/Java/play/myplayapp as a netbeans project~~ Use netbeansify again when you want to update netbeans configuration files, then close and open you project again.~
play test
Working on RCP based prorietary framework, I have to go further in the RCP development plateform.
Just attend a RCP training, I'm trying to create, with a co-worker, a demo application connected to ImDB, or something like this world well known films database, to retrieve, store and display data in a Rich application type. If anyone know how to parse this site without parsing html pages, I'll be interested ;)
Stay in touch to know what we do !