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 :

[Débutant] Récupérer le chemin vers le fichier courant


Sujet :

Eclipse Platform

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut [Débutant] Récupérer le chemin vers le fichier courant
    Bonjour !

    Avant de commencer, sachez que je viens tout juste de débuter avec Eclipse : ne soyez donc pas surpris si je suis passé à côté d'une solution toute simple (pourtant pas faute d'avoir cherché, je ne demande de l'aide sur les forums qu'en dernier recours). Aussi, n'hésitez surtout pas à me le dire si je me complique la vie

    Voilà mon problème : je viens de faire un script de refactoring en PHP. Ca, ça va. On peut le lancer sur le fichier courant depuis le menu 'Run as External Tool'. Seulement, je dois configurer Eclipse pour qu'il soit capable de lancer le script sur la ressource sélectionnée (et idéalement la rafraîchir juste après) via un raccourci clavier.

    Pour créer un raccourci clavier, j'ai donc créé un plug-in qui ajoutait une nouvelle commande et ait réussi à lui associer le raccourci. Par contre, je bloque là : comment faire pour récupérer depuis le Handler le chemin de la ressource sélectionnée ?

    J'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String selectedResource;
     
    selectedResource = (String)HandlerUtil.getVariableChecked(event, ISources.ACTIVE_CURRENT_SELECTION_NAME);
    Mais ça stoppe carrément le Handler.
    De même, pour la suite je pensais utiliser Runtime.exec() pour lancer le script PHP, mais ça me parait assez bourrin.
    Et enfin, je n'ai même pas approché le rafraîchissement...

    Si vous pouvez m'apporter de l'aide, merci d'avance

  2. #2
    Membre averti Avatar de Aurelien Pupier
    Homme Profil pro
    Senior Software Engineer
    Inscrit en
    Décembre 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Senior Software Engineer

    Informations forums :
    Inscription : Décembre 2007
    Messages : 278
    Points : 369
    Points
    369
    Par défaut
    Bonjour,

    cela devrait t'aider :
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection()

  3. #3
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    Pour récupérer le chemin du workspace courant :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    Platform.getLocation();

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    Je ne voit pas comment... J'ai récupéré, l'ISelection, qui est en fait un TextSelection, mais je ne trouve aucune méthode pour obtenir le nom du fichier ouvert, encore moins le chemin vers lui.

  5. #5
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Oups, pardon j'ai lu ta question en diagonale.

    J'ai déjà eu affaire à ce genre de problème, voici la méthode que j'ai créer :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private String getSelectedFile()
    {
    	String name = null;
     
    	IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
     
    	if (page != null)
    	{
    		IEditorInput input = page.getActiveEditor().getEditorInput();
    		name = input.getName();
    	}
     
    	return name;
    }

    EDIT : Il me semble que le Selection sert à récupérer le texte ou l'élément sélectionné dans une vue. Ma méthode sert à récupérer le nom du fichier dans l'éditeur courant. Après, je ne sais pas ce que tu veux exactement...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par BiM Voir le message
    Oups, pardon j'ai lu ta question en diagonale.

    J'ai déjà eu affaire à ce genre de problème, voici la méthode que j'ai créer :
    C'est presque ça ! Il faudrait juste avoir quelque chose avec une méthode getPath au lieu de getName, comme un IPathEditorInput. Reste à en trouver un...

  7. #7
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Et bien, voilà je cherchais le nom de l'instance pour te préciser le truc.

    Quand tu récupères un IEditorInput, c'est très souvent un IPathEditorInput.

    Tu n'as qu'à le caster :
    Code Java : 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
    private File getSelectedFile()
    {
    	File fichier = null;
     
    	IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
     
    	if (page != null)
    	{
    		IEditorInput input = page.getActiveEditor().getEditorInput();
    		if (input instanceof IPathEditorInput)
    		{
    			fichier = ((IPathEditorInput)input).getPath().toFile();
    		}
    	}
     
    	return fichier;
    }

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    En l'occurrence, c'était un FileStoreEditorInput...

    J'ai trouvé une solution en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		if (page != null)
    		{
    			IPathEditorInput input = (IPathEditorInput) page.getActiveEditor().getEditorInput().getAdapter(IPathEditorInput.class);
    			name = input.getPath().toString();
    		}
    Ca marche, mais je ne suis pas sûr de la propreté de la démarche. Si quelqu'un a une solution plus élégante à proposer, je suis preneur ^^
    Merci pour ton aide Bim !
    Ah, il vaudrait peut-être mieux ne pas marquer le topic comme résolu tout de suite, je vais sûrement avoir d'autres questions.

  9. #9
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Citation Envoyé par Daestrik Voir le message
    En l'occurrence, c'était un FileStoreEditorInput...

    J'ai trouvé une solution en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		if (page != null)
    		{
    			IPathEditorInput input = (IPathEditorInput) page.getActiveEditor().getEditorInput().getAdapter(IPathEditorInput.class);
    			name = input.getPath().toString();
    		}
    Ca marche, mais je ne suis pas sûr de la propreté de la démarche. Si quelqu'un a une solution plus élégante à proposer, je suis preneur ^^
    Merci pour ton aide Bim !
    Ah, il vaudrait peut-être mieux ne pas marquer le topic comme résolu tout de suite, je vais sûrement avoir d'autres questions.
    C'est exactement la solution que je viens de te poster. Mais au passage un FileStoreEditorInput n'implémente pas directement ou indirectement IPathEditorInput donc je ne vois même pas comment tu peux le caster.

    Et voilà la méthode pour FileStoreEditorInput :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IEditorInput input = page.getActiveEditor().getEditorInput();
    if (input instanceof FileStoreEditorInput)
    {
    	uri = ((FileStoreEditorInput)input).getURI();
    }

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par BiM Voir le message
    C'est exactement la solution que je viens de te poster.
    Effectivement. J'étais en train d'éditer mon message pour montrer ma solution quand j'ai vu que tu avais répondu, donc j'ai fait de mon édit une autre réponse.

    Ta solution me parait beaucoup plus propre, mais je ne trouve pas dans quel package on peut trouver ce fameux FileStoreEditorInput (patapey). Il est censé être dans org.eclipse.ui.ide, mais pas moyen de mettre la main dessus.

    Bref, ceci fait, il me reste le problème du rafraichissement de la ressource...
    Et puis, y a-t-il un moyen de connaitre le répertoire où eclipse est installé ? Pour y stocker le script, ce serait plus propre que dans le workspace.

  11. #11
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Citation Envoyé par Daestrik Voir le message
    Effectivement. J'étais en train d'éditer mon message pour montrer ma solution quand j'ai vu que tu avais répondu, donc j'ai fait de mon édit une autre réponse.
    Pas de soucis.

    Citation Envoyé par Daestrik Voir le message
    Ta solution me parait beaucoup plus propre, mais je ne trouve pas dans quel package on peut trouver ce fameux FileStoreEditorInput (patapey). Il est censé être dans org.eclipse.ui.ide, mais pas moyen de mettre la main dessus.
    Quand je met en dépendance org.eclipse.ui.ide_[version].jar et j'ai bien FileStoreEditorInput dedans.

    Citation Envoyé par Daestrik Voir le message
    Bref, ceci fait, il me reste le problème du rafraichissement de la ressource...
    Et puis, y a-t-il un moyen de connaitre le répertoire où eclipse est installé ? Pour y stocker le script, ce serait plus propre que dans le workspace.
    Ca c'est toi qui voit niveau propreté, je n'ai pas exactement lu ce que tu voulais faire. Et je n'ai pas testé mais je pense que c'est ça :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    Platform.getInstallLocation();

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    Bon, dernier problème : rafraîchir le fichier.
    Je pensais utiliser la méthode refreshLocal de IResource, en faisant comme ceci :

    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
     
    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
    IFile file = null;
    IEditorInput input = null;
     
    if (page != null)
    {
      input = page.getActiveEditor().getEditorInput();
      try
      {
        if ((file = ResourceUtil.getFile(input)) != null)
        {
          file.refreshLocal(IResource.DEPTH_ZERO, null);
        }
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
    Mais ResourceUtil.getFile(input) me renvoie null. Donc il faut un autre moyen d'obtenir le IFile ou IResource.
    J'avais pensé peut-être à IWorkspaceRoot.getFileForLocation, vu qu'on a le chemin, mais d'une, je n'arrive pas à récupérer cet IWorkspaceRoot et de deux je ne suis pas sûr que ca marchera si jamais le fichier ouvert n'est pas dans le Workspace.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    Je me permets de double-poster honteusement.

    J'ai appelé IFile.refreshLocale() en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    IFile file = null;
    Path filePath;
     
    filePath = new Path(this.getSelectedFilePath());
    if ((file = ResourcesPlugin.getWorkspace().getRoot().getFile(filePath)) != null)
    {
      file.refreshLocal(IResource.DEPTH_ZERO, null);
    }
    Naif que j'étais, je croyais que c'était la fin de mes problèmes... Eh bah non.

    Rappelons que je veux que le fichier en cours d'édition se rafraichisse lui-même. Or, j'ai toujours la fenêtre d'avertissement 'File changed' qui me demande confirmation.

    Comment faire pour rafraichir la ressource, comme si on cliquait sur 'Yes' dans cette fenêtre (qui ne devrait pas apparaître d'ailleurs) ?

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

Discussions similaires

  1. [VBA_E] Récupérer le chemin d'un fichier ouvert
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2007, 17h30
  2. Réponses: 1
    Dernier message: 26/07/2006, 02h47
  3. [DOS] récupérer le chemin absolu du dossier courant
    Par seiryujay dans le forum Windows
    Réponses: 1
    Dernier message: 14/06/2006, 14h58
  4. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  5. Tester le formalisme du chemin vers un fichier ?
    Par elitost dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 07/10/2005, 15h06

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