Arbeta med resurser i andra filsystem

De flesta av API:erna i IResource-hierarkin fungerar på samma sätt oavsett vilket typ av filsystem resurserna lagras i. Det finns dock några API:er som du måste undvika när du arbetar med resurser i andra filsystem, eftersom de är utformade att endast fungera med det lokala filsystemet.

Särskilt gäller det metoden IResource.getLocation som är utformad att returnera den lokala filsystemssökvägen för resursen. Om resursen finns i något annat filsystem fungerar inte den här metoden och null returneras. Det är bättre att i stället använda metoden getLocationURI, som fungerar oavsett vilket typ av filsystem resursen lagras i.

Av samma anledning bör metodernaIProjectDescription getLocation och setLocation undvikas. De kan alltså också endast användas för det lokala filsystemet. De URI-baserade platsbestämningsmetoderna bör användas i stället.

Lokal cachelagring

Anta att du arbetar med resurser som inte finns i det lokala filsystemet men du behöver en lokal fil. Till exempel använder du ett bibliotek som är beroende av java.io.File. I det fallet kan du använda metoden IFileStore.toLocalFile till att hämta en lokal kopia av filen. Observera att det här innebär att endast en fil eller katalog cachelagras lokalt och inte ett helt katalogträd. Här är ett exempel på hur du använder lokal cachelagring till att öppna en zip-fil i ett IFileStore:

   IFileStore store = ...;//ett fillager
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //det här är inte ett lokalt fillager så vi måste cachelagra en lokal kopia
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Länka till andra filsystem

Du kan använda länkade resurser till att skapa projekt där resurser från flera filsystem sammanförs. Använd helt enkelt metoden IFile.createLink(URI, int, IProgressMonitor) eller IFolder.createLink(URI, int, IProgressMonitor) till att skapa en resurs i ett befintligt projekt vars innehåll lagras på en annan plats i valfritt filsystem. Du kan till och med skapa länkar under andra länkade resurser för att skapa slumpmässiga resursträd med resurser från många olika filsystem. Här följer ett enkelt exempel där en länkad fil på samma nivå som finns i samma filsystem som källan skapas:

   IFile source = ...;//en källfil
   IFile link = source.getParent().getFile(new Path(source.getName() + ".link"));
   link.createLink(source.getLocationURI(), IResource.NONE, null);