2012-02-09 3 views
1

J'ai un bundle installé (org.osgi.framework.Bundle) dans mon eclipse en cours d'exécution. Il y a un fichier dans ce paquet. J'ai le chemin vers le fichier et je peux représenter ce fichier par une URL (java.net.URL) en utilisant URL url = bundle.getEntry("/folder/file").Convertir un fichier situé dans OSGi Bundle en IFile

Existe-t-il un moyen d'obtenir un handle de ce fichier de type IFile (org.eclipse.core.resources.IFile)?

J'ai besoin d'une référence du fichier situé dans le paquet osgi installé de type IFile. Mais je ne veux pas vouloir copier le fichier temporaire sur mon disque local (comme espace de travail).

Merci d'avance!

Répondre

2

C'est difficile. Un IFile représente un fichier réel plutôt qu'une entrée dans une archive. Vous auriez besoin de créer une représentation EFS (Eclipse FileSystem) pour l'archive, mais cela nécessitera probablement beaucoup de travail.

Qu'essayez-vous d'accomplir? Il y a probablement quelque chose que vous pouvez faire qui est beaucoup plus simple.

+0

Salut, merci pour votre réponse. Pour être plus détaillé: L'utilisateur de l'outil que j'écris a la possibilité d'ouvrir des fichiers spéciaux dans un éditeur. Ces fichiers peuvent être situés dans leur espace de travail ou ils sont fournis par des bundles qu'ils commencent avec leur IDE (nouvelle fonctionnalité). Mais l'ancienne implémentation s'attend à ce qu'un IFile soit affiché dans l'éditeur. Je ne sais pas comment ouvrir les fichiers fournis par le bundle démarré dans l'éditeur. Le pire des cas pour moi est de réécrire l'éditeur pour ne pas attendre le IFile mais quelque chose d'autre (comme un nouveau modèle ou plus). Mais j'espérais ne pas avoir besoin de réécrire autant;) – mosk

+0

Merci pour les détails. L'éditeur suppose probablement un IFileEditorInput comme objet d'entrée ... c'est une mauvaise pratique mais je suppose que cela ne vous aide pas beaucoup. Vous pouvez essayer de voir s'il accepte un 'IStorageEditorInput', ce qui est beaucoup plus facile à implémenter pour les entrées sans fichier. –

+0

Voilà, vous m'avez amené sur le bon chemin. L'éditeur suppose en fait un IEditorInput que j'ai pu implémenter seul. Maintenant ça fonctionne bien. Je vous remercie! – mosk

2

Si vous avez un plugin eclipse/éditeur ou quelque chose comme ça essayer:

//get the workspace 
IWorkspace workspace= ResourcesPlugin.getWorkspace(); 

//create the path to the file 
IPath location= new Path(yourURL.getPath()); 

//try to get the IFile (returns null if it could not be found in the workspace) 
IFile file= workspace.getRoot().getFileForLocation(location); 

if (file == null) { 
    //not found in the workspace, get the IFileStore (external files) 
    IFileStore fileStore = EFS.getLocalFileSystem().getStore(location); 
    return fileStore; 
} else { 
    // file found, return it 
    return file; 
} 

Helpfull pourrait être aussi:

url = FileLocator.toFileURL(yourURL); 

et/ou

URL resolvedUrl = FileLocator.resolve(url); 

Après cela, vous pouvez créer l'entrée pour votre éditeur (je pense que vous voulez l'utiliser là-bas?)

Object file = myGetFile(); 
IEditorInput input; 
if (file instanceof IFile) { 
    input = new FileEditorInput((IFile)file); 
else { 
    if (file instanceof IFileStore) { 
     input = new FileStoreEditorInput((IFileStore)file); 
    } else { 
     throw new MyException("file is null, not found"); 
    } 
} 

J'espère que cela va vous aider.

Greetz, Adreamus

+0

Merci pour votre réponse. Mais 'workspace.getRoot(). GetFileForLocation (emplacement);' ne trouve que des fichiers dans l'espace de travail. Même FileLocator ou d'autres classes qui peuvent accéder aux fichiers sur le système de fichiers ne fonctionnent pas car j'ai besoin d'une interface avec le framework OSGi. – mosk

+0

Salut, J'ai inclus l'espace de travail uniquement pour la création de IFile, ils sont chargés dans l'espace de travail. Tous les fichiers externes sont chargés avec le fichier EFS.getLocalFileSystem(). GetStore (IPath). Cela fonctionne aussi pour les fichiers en bundles! (jetez un oeil à http://lotuseclipsecorner.blogspot.com/2009/03/getting-access-to-files-in-eclipse-rcp.html). Mais il existe plus d'une possibilité, et vous en avez choisi une autre comme je peux le voir dans l'autre commentaire ;-) – Adreamus

Questions connexes