Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 22ee7fa8 rédigé par sunye's avatar sunye
Parcourir les fichiers

Add new section explaining how to use the generated Java code

parent a1377125
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -329,6 +329,8 @@ Enregistrez le fichier `MANIFEST.MF`.
Cliquez ensuite sur l'onglet "MANIFEST.MF" pour accéder aux sources du fichier.
Remarquez que le fichier contient désormais une section *Required-Bundle* avec la dépendance que vous venez d'ajouter.
=== Création d'instances du modèle
Dans le dossier `src`, créez un nouveau paquetage appelé `fr.alma.website.plugin` et y ajoutez une classe appelée `Main`,
que vous allons utiliser pour créer des instances de votre modèle.
......@@ -340,10 +342,125 @@ la fabrique que vous utiliserez pour créer des instances du modèle:
public static void main(String[] args) {
WebmodelPackage wPackage = WebmodelPackage.eINSTANCE;
WebmodelFactory factory = wPackage.getWebmodelFactory();
}
----
Une fois que vous avez accès à la fabrique, vous pouvez créer des instances des éléments de votre modèle.
Le code suivant crée d'abord une instance de `Site`, ensuite une instance de `Folder` et ajoute cette dernière au contenu du site:
[source,java]
----
package fr.alma.website.plugin;
import fr.alma.web.model.webmodel.Folder;
import fr.alma.web.model.webmodel.Site;
import fr.alma.web.model.webmodel.WebmodelFactory;
import fr.alma.web.model.webmodel.WebmodelPackage;
public class Main {
public static void main(String[] args) {
WebmodelPackage wPackage = WebmodelPackage.eINSTANCE;
WebmodelFactory factory = wPackage.getWebmodelFactory();
Site site = factory.createSite();
site.setTitle("Alma website");
Folder root = factory.createFolder();
root.setName("root");
site.getFolders().add(root);
}
}
----
IMPORTANT: Notez que le code n'utilise que les interfaces générées et jamais les classes concrètes.
=== Utilisation du mécanisme de notifications
Les modificateurs (les méthodes `setXXX()`) générés par EMF mettent en œuvre un mécanisme de notifications,
dont le rôle est d'informer les _Observateurs_ attachés à une instance des éventuelles modifications des valeurs de ses propriétés.
Pour cela, les _Observateurs_ doivent implémenter l'interface `org.eclipse.emf.common.notify.Adapter`.
C'est ce que vous allez faire par la suite.
Ajoutez une nouvelle classe appelée `SiteAdatper` au paquetage `fr.alma.website.plugin`.
Cette classe doit implémenter l'interface `Adapter`:
image::img/create-site-adapter.png[align=center, width=300px]
En créant la classe, Eclipse ajoutera automatiquement une implémentation de toutes les méthodes définies dans l'interface:
[source,java]
----
public class SiteAdapter implements Adapter {
@Override
public void notifyChanged(Notification notification) {
// TODO Auto-generated method stub
}
@Override
public Notifier getTarget() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setTarget(Notifier newTarget) {
// TODO Auto-generated method stub
}
@Override
public boolean isAdapterForType(Object type) {
// TODO Auto-generated method stub
return false;
}
}
----
Dans cet exemple, nous allons nous intéresser seulement à la méthode `notifyChanged()`,
qui est appelée à chaque notification.
Le code suivant est très simple, il affiche l'ancienne et la nouvelle valeurs d'une propriété modifiée{nbsp}:
[source,java]
----
@Override
public void notifyChanged(Notification notification) {
System.out.format("Ancienne valeur: %s, Nouvelle valeur: %s \n", notification.getOldStringValue(),
notification.getNewStringValue());
}
----
Vous pouvez désormais ajouter cet _Observateur_ à une instance de votre modèle.
Modifiez la méthode `main()` pour la faire correspondre au code suivant{nbsp}:
[source,java]
----
public static void main(String[] args) {
WebmodelPackage wPackage = WebmodelPackage.eINSTANCE;
WebmodelFactory factory = wPackage.getWebmodelFactory();
Site site = factory.createSite();
site.eAdapters().add(new SiteAdapter());
site.setTitle("Alma website");
Folder root = factory.createFolder();
root.setName("root");
site.getFolders().add(root);
}
----
QUESTION: Exécutez la classe `Main`. Qu'est-ce qu'elle affiche sur la console{nbsp}?
=== Persistance d'objets avec XMI
TODO: this
////
== Création de la JavaDoc
== Génération de méthodes
......@@ -354,10 +471,10 @@ public static void main(String[] args) {
== Créer un modèle de générateur EMF
== Notifications et adaptateurs avec Adapter et EContentAdapter
== Persisting EMF models via XMI
== Appendix: Encryption
== Liens utiles
\ No newline at end of file
== Liens utiles
////
\ No newline at end of file
emf-tutorial/img/create-site-adapter.png

77,5 ko

0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter