Syndication : Atom 1.0  RSS 2.0
Blogs des développeurs   »   Akrogen Blog

Article complet: Tutorial WST- DOM SSE [Step 2]

24/02/2009

Permalink 16:41:55, Catégories: Plugin Eclipse, Récapitulatif Eclipse, Frameworks, 806 mots   French (FR) , azerr

[Eclipse][Java] Tutorial WST- DOM SSE [Step 2]

Dans ce billet nous allons transformer l'éditor simple ShapesEditor (qui contient un page avec une UI SWT) org.eclipse.ui.part.EditorPart du billet précédant en un editor multi pages org.eclipse.ui.part.MultiPageEditorPart pour avoir 2 pages :

  • Une page Source qui affiche le source XML dans un éditeur SSE org.eclipse.wst.sse.ui.StructuredTextEditor.
  • Une page Overview qui affiche l'interface SWT du billet précédant.

Le code sera beaucoup plus simple que le billet précédant car nous n'aurons plus besoin de gérer l'état dirty, la sauvegarde... du DOM-SSE dans l'editor ShapesEditor. En effet la page Source utilise StructuredTextEditor qui gère en interne un modèle SSE. Toutes la gestion du DOM-SSE sera donc déléguée à cette page source.

Vous pouvez télécharger le projet org.eclipse.wst.xml.examples.shapes_1.0.0.zip présenté dans ce billet.

[Suite:]

Voici une copie d'écran de la page Source de l'éditeur ShapesEditor :

DOM-SSE  Shape diagram - Source Page

Voici une copie d'écran de la page Overview de l'éditeur ShapesEditor :

DOM-SSE  Shape diagram - Overview Page

StructuredTextEditor

Nous partirons des sources de Shapes DOM-SSE du billet précédant pour expliquer les sources de ce projet. La première chose est d'ajouter la dépendance org.eclipse.wst.sse.ui au projet, car la page source utilise une instance de org.eclipse.wst.sse.ui.StructuredTextEditor.

StructuredTextEditor hérite de la classe org.eclipse.ui.editors.text.TextEditor. Elle est capable de construire un document structuré (comme un DOM) à partir du contenu de l'éditeur. L'éditeur XML de WST utilise cette classe. StructuredTextEditor utilise en interne un modèle SSE et gère toutes les problématiques de chargement du modèle SSE (expliquées dans les billets précédants), de l'état dirty du modèle SSE, de la sauvegarde....

ShapesEditor

La classe ShapesEditor doit être modifiée pour gérer les 2 pages Source et Overview.

MultiPageEditorPart

La classe ShapesEditor doit étendre org.eclipse.ui.part.MultiPageEditorPart pour gérer les 2 pages. La méthode ShapesEditor#createPartControl(Composite parent) doit être supprimée et remplacée par la méthode ShapesEditor#createPages() que MultiPageEditorPart demande d'implémenter :

protected void createPages() { 
  createPage0(); 
  createPage1(getContainer()); 
}

La méthode createPage0 permet de créer la page Source en instançiant StructuredTextEditor comme suit :

void createPage0() { 
  try { 
  sourcePage =new StructuredTextEditor(); 
  sourcePage.setEditorPart(this); 
  int index = addPage(sourcePage, getEditorInput()); 
  setPageText(index, "Source"); 
  } catch (PartInitException e) { 
  ErrorDialog.openError(getSite().getShell(), 
  "Error creating nested text editor", null, e.getStatus()); 
  } 
}

La méthode createPage1 permet de créer la page Overview constitué des widgets SWT.

Il faut supprimer la variable model et la remplacer par sourcePage, car le modèle SSE est géré par l'instance StructuredTextEditor et plus par ShapesEditor :

private StructuredTextEditor sourcePage;

ShapesEdior#getDOMModel()

La méthode ShapesEdior#getDOMModel() doit être modifiée pour récupérer le modèle DOM-SSE à partir de l'instance StructuredTextEditor comme suit :

private IDOMModel getDOMModel() { 
  IDOMModel model = (IDOMModel)sourcePage.getModel(); 
  if (!isInitialized) { 
  model.addModelStateListener(listener); 
  this.isInitialized = true; 
  } 
  return model; 
}

La variable isInitialized, permet de definir si le listener a deja été ajouté ou non.

REMARQUE : la méthode StructuredTextEditor#getModel() est marquée comme deprecated. D'après la JavaDoc, il ne faut pas utiliser cette méthode mais utiliser les méthodes IModelManager#getExistingModelFor*(IDocument document).

Le listener était utilisé jusqu'à maintenant pour synchroniser l'UI avec le DOM (lorsque le DOM change) et pour gérer l'état dirty du modèle SSE. Dans notre cas, l'état dirty n'a plus besoin d'être géré (voir explication ci dessus). Le listener a le code suivant :

private IModelStateListener listener = new IModelStateListener() { 
... 
  public void modelChanged(IStructuredModel model) { 
  // Update UI From DOM Model which have changed 
  updateUIFromDOMModel(); 
  } 
...}

Gestion dirty

La méthode IModelStateListener#modelDirtyStateChanged(IStructuredModel model, boolean isDirty) qui appelait la méthode firePropertyChange(IEditorPart.PROP_DIRTY); n'a plus besoin d'être implémenté, car l'état dirty de l'éditor est géré par l'instance sourcePage (StructuredTextEditor).

La méthode ShapesEditor#isDirty() doit être supprimé aussi.

Le code de dispose :

public void dispose() { 
... 
  if (model.isDirty()) { 
  model.releaseFromEdit(); 
... 
}

doit être supprimé, car le cas ou l'utilisateur quitte l'éditeur sans sauvegarder le DOM est géré par l'instance sourcePage (StructuredTextEditor) .

Gestion sauvegarde

Le code doSave et doSaveAs est délégué à l'instance sourcePage (StructuredTextEditor) comme suit :

public void doSave(IProgressMonitor monitor) { 
  sourcePage.doSave(monitor); 

 
public void doSaveAs(doSaveAs) { 
  sourcePage.doSaveAs(); 

 
public boolean isSaveAsAllowed() { 
  return sourcePage.isSaveAsAllowed(); 
}

Social Bookmarking:

                                     

Commentaires, Pingbacks:

Connectez-vous pour vous abonner à cet article:

Flux de commentaires pour cet article : Atom 1.0  RSS 2.0
Commentaire de: philagui [Membre]
Tres bon article, qui m'a rendu d'enormes services ! Merci beaucoup !

J'ai une petite question toutefois, que je n'arrive pas à résoudre: comment faire en sorte que la page source soit formatée (indentée) correctement ? Car lorsque j'ajoute un élément XML au DOM en passant par l'interface, l'élément est bien ajouté dans la source, mais pas indenté correctement (il faut que je passe par Source > Format pour indenter le document correctement)...

Si quelqu'un a une réponse la dessus, je suis preneur.

Merci beaucoup.
Permalien 10/09/2009 @ 16:39
Commentaire de: azerr [Membre]
Bonjour philagui,

> Tres bon article, qui m'a rendu d'enormes services ! Merci beaucoup !
Merci ca fait plaisir que ca t'ai servi.

Concernant l'indentation, je ne pourrais pas t'aider sur ce sujet, il va falloir fouiller dans l'API de DOM SSE.

Peut etre devrais tu poster ta question sur DVP. Si jamais tu le fais, serait-il possible de mettre le lien de ton post à la suite de mon message.

Merci et bon courage.

Angelo


Permalien 10/09/2009 @ 16:58
Commentaire de: philagui [Membre]
http://www.developpez.net/forums/d806632/environnements-developpement/eclipse/eclipse-platform/structuredtexteditor-indentation/#post4635094

Permalien 10/09/2009 @ 19:21

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Akrogen Blog

Catégories


Rechercher

<  Février 2012  >
Lun Mar Mer Jeu Ven Sam Dim
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web