IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Platform Discussion :

[SSE] Initialiser un DOM XML à partir d'une chaine de caractères ?


Sujet :

Eclipse Platform

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut [SSE] Initialiser un DOM XML à partir d'une chaine de caractères ?
    Bonjour,

    Ma question est comment initialiser le DOM ( qui est géré par le modèle IDOMModel d'un StructuredTextEditor) à travers une chaine de caractères (texte XML) ?

    A ce que je sais, c'est qu'il est initialisé à partir d'un IFile (celui de l'éditeur)
    si ce n'est pas possible de faire cette initialisation avec une chaine de caractères, est-ce qu'on doit penser à la faire en créant un nouveau IFile ?Mais encore faut-il savoir comment implémenter tout cela!

    J'ai réussi à utiliser IStorageEditorInput comme un IEditorInput de l'éditeur XML, puis j'ai récupéré le IDocument lié et j'ai modifié son contenu mais le problème c'est que je peux pas éditer le résultat (validation, auto-complétion, sauvegarde,...).
    Le problème avec IStorageEditorInput c'est qu'il permet un accès de lecture seulement selon ce FAQ: http://wiki.eclipse.org/FAQ_How_do_I..._not_a_file%3F

    Merci

  2. #2
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour nd786mar1,

    Je ne pense pas que tu puisses gerer correctement DOM SSE sans passer par un IFile. Il faut comme tu le pensais passer par un IFile (je me trompe peut etre). Il ne faut pas que tu implementes IFile mais que tu passes par le plugin Resources http://help.eclipse.org/helios/index...cesPlugin.html pour creer un IFle.

    Recupere par exemple le projet IProject dans lequel tu es et ensuite tu fais project.getFile("tmp.xml") pour creer ton IFile et regarde l'API de IFile pour l'alimenter.

    Angelo

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Bonjour Angelo,
    Je pense que vous avez raison, j'ai beau essayé de ne pas utiliser un IFile pour éditer un DOM d'un StructuredTextEditor, c'est à dire, en utilisant IStorageEditorInput au lieu de FileEditorInput (je vois que ça marche avec IStorageEditorInput mais juste pour un accès de lecture).

    Une solution simple proposée est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IWorkspaceRoot root = workspace.getRoot();
    IProject project  = root.getProject("nom_du_projet");
    IFile file= project.getFile("temp.xml");
    if (!file.exists()) {
    	byte[] bytes = "contenu de l'éditeur".getBytes();
    	InputStream source = new ByteArrayInputStream(bytes);
    	file.create(source, IResource.NONE, null);
    }
    ...

  4. #4
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,

    La solution, que tu proposais, était celle que j'avais en tête (j'avais pas bien expliqué).

    J'ai par contre une question à mon tour. Je souhaiterais récupérer le DOM SSE d'un fichier XML qui est dans un JAR (c'est pour recuperer le fichier XML stuts-default.xml du JAR struts2). Je pense qu'il faut partir sur IStorage que je ne connais pas, mais si tu as des infos la dessus je suis preneur.

    Merci
    Angelo

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    je ne vois pas pour le moment comment accéder au fichier stuts-default.xml et récupérer son contenu.
    Ce que je sais c'est que tout éditeur XML doit avoir un IEditorInput (qui présentera un descriptif pour un IEditorPart et qui sera de type IStorageEditorInput ou IFileEditorInput)
    c'est par exemple l'attribut qu'on passe lors de l'appel de la methode addPage au sein d'un MultiPageEditorPart:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addPage(sourcePage, MonPropreIEditorInput);
    Si le but est d'éditer stuts-default.xml, on va pas passer par un IStorageEditorInput que l'éditeur XML prends comme paramètre Input (IEditorInput) mais on va certainement penser à créer un FileEditorInput.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IFile file= ?????
    IEditorInput InputFile = new FileEditorInput(file);
    Sinon, pour le cas de IStorageEditorInput, je crois que l'exemple de la FAQ est bien clair.

    On commence par créer la classe StringStorage qui va retourner les bytes d'une chaine de caractère qu'on va spécifier par la suite, et qui va présenter dans ce cas le contenu du fichier XML qu'on désire visualiser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class StringStorage implements IStorage {
      private String string;
     
      StringStorage(String input) {
        this.string = input;
      }
     
      public InputStream getContents() throws CoreException {
        return new ByteArrayInputStream(string.getBytes());
      }
     
      public IPath getFullPath() {
        return null;
      }
     
      public Object getAdapter(Class adapter) {
        return null;
      }
     
      public String getName() {
        int len = Math.min(5, string.length());
        return string.substring(0, len).concat("..."); //$NON-NLS-1$
      }
     
      public boolean isReadOnly() {
        return true;
      }
    }
    Ensuite, on crée la classe qui va retourner un IStorage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class StringInput implements IStorageEditorInput {
          private IStorage storage;
          StringInput(IStorage storage) {this.storage = storage;}
          public boolean exists() {return true;}
          public ImageDescriptor getImageDescriptor() {return null;}
          public String getName() {
             return storage.getName();
          }
          public IPersistableElement getPersistable() {return null;}
          public IStorage getStorage() {
             return storage;
          }
          public String getToolTipText() {
             return "String-based file: " + storage.getName();
          }
          public Object getAdapter(Class adapter) {
            return null;
          }
       }
    Et finalement, on crée l'éditeur avec l'input qu'on vient de spécifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IStorage storage = new StringStorage(contenuXML);
    IStorageEditorInput input = new StringInput(storage);
    int index = addPage(sourcePage, input);

  6. #6
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Merci nd786mar1 pour toutes ces infos.

    Moi ce que je souhaite c'est de scanner les JAR du projet Eclipse et de récupérer le fichier struts-default.xml. Du coup je ne passe pas par un editor.

    Je suis en train de regarder comment on peut faire et si je trouve une solution je la posterais.

    Angelo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/03/2008, 14h13
  2. Comment créer un document XML à partir d'une chaine de caractères
    Par imad_eddine dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 19/11/2007, 18h09
  3. [DOM] creer un dom a partir d'une chaine de caractere
    Par jeremp dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/11/2007, 09h20
  4. Réponses: 2
    Dernier message: 29/03/2007, 14h08
  5. Entrée a partir d'une chaine de caractère
    Par Spartan03 dans le forum C
    Réponses: 5
    Dernier message: 18/03/2006, 19h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo