Kun aiemmin on käsitelty resursseja ja tiedostojärjestelmää (Resurssien vastaavuuden määritys levyn sijainteihin) on oletettu, että projektin kaikki resurssit sijaitsevat samassa paikassa tiedostojärjestelmässä. Yleensä tämä pitää paikkansa. Työympäristössä on kuitenkin mahdollista käyttää myös linkitettyjä resursseja, jotta projektissa olevat tiedostot ja kansiot voi tallentaa projektin sijainnin ulkopuoliseen tiedostojärjestelmään.
Linkitetyt resurssit voivat sijaita miltei missä tahansa tiedostojärjestelmässä. Ne voivat olla projektin ulkopuolella tai jopa toisessa projektissa. Linkitettyjen resurssien sijainnille on vain muutamia rajoituksia. Metodin IWorkspace.validateLinkLocation avulla voi varmistaa, että tietty sijainti kelpaa linkitetyn resurssin luontiin.
Linkitetyt resurssit luodaan metodin
IFolder.createLink tai
IFile.createLink avulla.
Voit selvittää ohjelmallisesti, onko tietty resurssi linkitetty resurssi,
metodin IResource.isLinked avulla.
Huomaa, että tämä metodi palauttaa arvon true
vain linkitettyjen resurssien osalta, ei
linkitettyjen resurssien aliobjektien osalta.
Lukuun ottamatta näitä linkitettyjen resurssien luonnin ja linkityksen selvityksen erikoismetodeja voit käyttää normaaleja työtilan ohjelmointirajapintoja linkitettyjen resurssien käsittelyssä. Useimmissa suhteissa linkitetyt resurssit toimivat aivan samalla tavalla kuin mikä tahansa työtilan resurssi. Linkitettyjen resurssien siirtämiseen, kopiointiin ja poistoon liittyy kuitenkin eräitä rajoituksia. Lisätietoja yksittäisistä toiminnoista ja niiden rajoituksista on kohdassa IResource ja sen aliluokissa.
Polkumuuttujia voi käyttää määritettäessä linkitettyjen resurssien sijaintia. Polkumuuttuja on yksinkertainen (String -> IPath) tai (String -> URI) -vastaavuusmääritys, joka määrittää oikotien sijaintiin tiedostojärjestelmässä. Muuttujien avulla voi helpottaa linkitettyjen resurssien hallintaa vähentämällä niiden sijaintien määrää, joissa käytetään pysyväiskoodattuja, tarkkoja tiedostojärjestelmän polkuja.
Polkumuuttujat tekevät linkitettyjen resurssien hallinnan käyttäjille monella tapaa helpommaksi:
Luettelon viimeistä kohtaa on selitettävä tarkemmin. Kun käyttäjä luo linkitetyn
resurssin projektiin, linkitetyn resurssin kuvaus lisätään projektin
kuvaustiedostoon (".project") projektin sijainnissa. Polkumuuttujaa käyttämällä
käyttäjät voivat ottaa projektin yhteiskäyttöön (kopioimalla projektin sisällön tai
käyttämällä tietovarastoa) ja määrittää muuttujan uudelleen kuhunkin yksittäiseen
työasemaan sopivaksi. Yksi käyttäjä voi esimerkiksi tallentaa ulkoiset resurssit hakemistoon c:\temp
yhdessä järjestelmässä, kun taas toinen käyttäjä, joka käyttää Unix-järjestelmää, saattaa tallentaa samat resurssit hakemistoon /home/username/tmp.
Polkumuuttujan määritys kuhunkin työtilaan (TEMP=c:\temp
ja TEMP=/home/userb/tmp)
mahdollistaa sen, että käyttäjät voivat kiertää tämän eron ja ottaa linkitettyjä resursseja
sisältäviä projekteja yhteiskäyttöön sellaisenaan.
IPathVariableManager määrittää ohjelmointirajapinnan, jonka avulla luodaan, käsitellään ja selvitetään polkumuuttujia. Se tuo käyttöön myös metodeja, joiden avulla voi tarkistaa muuttujan nimien ja arvojen kelpoisuuden ennen niiden luontia sekä asentaa kuuntelutoiminnon, jolle ilmoitetaan, kun polkumuuttujan määritykset muuttuvat. Voit hankkia tämän luokan ilmentymän IWorkspace.getPathVariableManager-kohteen avulla. Lisätietoja on tämän osan lopussa olevissa koodiesimerkeissä.
Metodin IResource.getRawLocationURI avulla voit selvittää linkitetyn resurssin selvittämättömän sijainnin. Toisin sanoen, voit noutaa varsinaisen polkumuuttujan nimen sen sijaan, että selvittäisit sen arvon. Jos resurssin sijaintia ei ole määritetty polkumuuttujan kanssa, getRawLocationURI-metodi toimii samoin kuin getLocationURI-metodi.
Resursseja ohjelmallisesti käsittelevien asiakkaiden on huomattava, että linkit eivät ehkä toimi. Toimimattomia linkkejä ilmenee, kun linkitetyn resurssin sijaintia ei ole tai se on määritetty suhteessa määrittämättömään polkumuuttujaan. Seuraavat erikoistapaukset pätevät käytettäessä IResource-käytäntöä:
null
linkitetyille resursseille,
joiden sijainnit ovat suhteessa määrittämättömiin polkumuuttujiin.Jotkin lisäosat eivät ehkä pysty käsittelemään linkitettyjä resursseja, joten niiden poistamiseksi käytöstä on joukko erilaisia menetelmiä. Jos kirjoitat lisäosaa, joka välttämättä edellyttää, että projektin kaiken sisällön on sijaittava projektin oletussijainnissa, voit näiden menetelmien avulla estää käyttäjiä luomasta linkitettyjä resursseja paikkoihin, joissa et halua niiden olevan.
Ensimmäinen menetelmä on nimeltään esto projektiluonteen avulla. Jos määrität oman projektiluonteen, voit määrittää luonteeseen määrityksen, että luonne ei ole yhteensopiva linkitettyjen resurssien kanssa. Seuraavassa on esimerkki luonteen määrityksestä, joka käyttää estoa luonteen avulla:
<extension id="myNature" name="My Nature" point="org.eclipse.core.resources.natures"> <runtime> <run class="com.xyz.MyNature"/> </runtime> <options allowLinking="false"/> </extension>
Toinen keino estää linkitettyjen resurssien luonti on ryhmäripustin. Jos määrität oman tietovaraston toteutuksen, voit hyödyntää laajennuspistettä org.eclipse.core.resources.teamHook linkitettyjen resurssien luonnin estämiseksi projekteissa, jotka ovat yhteiskäytössä tietovaraston lajin kanssa. Oletusarvon mukaan tietovarastojen toimittajat eivät salli linkitettyjä resursseja projekteissa, jotka ovat yhteydessä tietovarastoon.
Jos tietovaraston tuen toteuttaa lisäosan aiempi versio, joka ei havaitse linkitettyjä resursseja, et pysty luomaan linkitettyjä resursseja näihin projekteihin.
Lisäksi käytettävissä on oletusasetus, jonka avulla voi poistaa linkitetyt resurssit
käytöstä koko työtilassa. Edelliset kaksi estomenetelmää toimivat projektikohtaisesti,
kun taas tämä oletusasetus vaikuttaa työtilan kaikkiin projekteihin. Voit määrittää
tämän oletusasetuksen ohjelmallisesti oletusasetuksen ResourcesPlugin.PREF_DISABLE_LINKING
avulla.
Huomaa, että asetettunakin käyttäjät ja lisäosat voivat ohittaa tämän määrittämällä
oletusasetuksen pois käytöstä.
Seuraavassa tarkastellaan esimerkkejä linkitettyjen resurssien käytöstä koodissa. Aluksi määritetään polkumuuttuja:
IWorkspace workspace = ResourcesPlugin.getWorkspace(); IPathVariableManager pathMan = workspace.getPathVariableManager(); String name = "TEMP"; IPath value = new Path("c:\\temp"); if (pathMan.validateName(name).isOK() && pathMan.validateValue(value).isOK()) { pathMan.setValue(name, value); } else { //virheellinen nimi tai arvo, tuota poikkeus tai varoita käyttäjää }
Nyt voidaan luoda linkitetty resurssi suhteessa määritettyyn polkumuuttujaan:
IProject project = workspace.getProject("Project");//oleta, että tämä on olemassa IFolder link = project.getFolder("Link"); IPath location = new Path("TEMP/folder"); if (workspace.validateLinkLocation(location).isOK()) { link.createLink(location, IResource.NONE, null); } else { //virheellinen sijainti, tuota poikkeus tai varoita käyttäjää }
Siinä kaikki. Työtilassa on nyt linkitetty kansio nimeltä "Link", joka sijaitsee kohteessa "c:\temp\folder".
Lopuksi tarkastellaan joitakin tämän linkitetyn resurssin koodikatkelmia, jotka havainnollistavat linkitettyihin resursseihin liittyvien muiden resurssien toimintaa:
link.getFullPath() ==> "/Project/Link" link.getLocation() ==> "c:\temp\folder" link.getRawLocation() ==> "TEMP/folder" link.isLinked() ==> "true" IFile child = link.getFile("abc.txt"); child.create(...); child.getFullPath() ==> "/Project/Link/abc.txt" child.getLocation() ==> "c:\temp\folder\abc.txt" child.getRawLocation() ==> "c:\temp\folder\abc.txt" child.isLinked() ==> "false"