Werken met resources in andere bestandssystemen

Bijna alles van de API in de IResource-hiërarchie werkt op dezelfde manier, ongeacht in welk soort bestandssysteem de resources zijn opgeslagen. Er zijn echter bepaalde API's die u moet vermijden wanneer u met resources in andere bestandssystemen werkt, omdat deze alleen bestemd zijn om in het lokale bestandssysteem te werken.

Zo is bijvoorbeeld de methode IResource.getLocation ingesteld om het lokale bestandssysteempad van de resource op te halen. Als de resource zich in een ander bestandssysteem bevindt, is deze methode niet van toepassing en zal deze null retourneren. Het is beter om in plaats daarvan de methode getLocationURI te gebruiken, die altijd werkt, ongeacht het soort bestandssysteem waarin de resource is opgeslagen.

Evenzo moeten de methode IProjectDescription getLocation en de methoden setLocation worden vermeden omdat deze alleen effectief zijn in het lokale bestandssysteem. In plaats daarvan moeten de op URI gebaseerde locatiemethoden worden gebruikt.

Lokaal in de cache plaatsen

Stel dat u met resources werkt die zich niet in het lokale bestandssysteem bevinden, maar u echt een lokaal bestand nodig hebt. Misschien werkt u bijvoorbeeld met een bibliotheek die een dependency heeft met java.io.File). In dit geval kunt u de methode IFileStore.toLocalFile gebruiken om een lokale kopie van het bestand op te halen. Hiermee wordt slechts één bestand of directory lokaal in de cache geplaatst, en niet een gehele directorystructuur. Hier volgt een voorbeeld van het gebruik van de lokale cache om een ZIP-bestand in een IFileStore te openen:

   IFileStore store = ...; // bestandsopslaglocatie
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      // geen lokale bestandsopslaglocatie; lokale kopie in de cache plaatsen
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Koppelen naar andere bestandssystemen

U kunt gekoppelde resources gebruiken om projecten te maken die resources uit meerdere bestandssystemen samenbrengen. U hoeft alleen maar de methode IFile.createLink(URI, int, IProgressMonitor) of IFolder.createLink(URI, int, IProgressMonitor) te gebruiken om een resource in een bestaand project te maken waarvan de content is opgeslagen op een andere locatie in een willekeurig bestandssysteem. U kunt zelfs koppelingen maken onder andere gekoppelde resources om willekeurige resourcestructuren te maken van resources die afkomstig zijn uit vele verschillende bestandssystemen. Hier ziet u een eenvoudig voorbeeld waarmee een gekoppeld bestand op hetzelfde niveau wordt gemaakt dat dezelfde systeemlocatie deelt als de bron:

   IFile source = ...; // een bronbestand
   IFile link = source.getParent().getFile(new Path(source.getName() + ".link"));
   link.createLink(source.getLocationURI(), IResource.NONE, null);