Csatolt erőforrások

Az erőforrások és a fájlrendszer korábbi bemutatásában (Erőforrások leképezése a lemezhelyekre) feltételeztük, hogy a projekt összes erőforrása a fájlrendszer példaterületén található. Ez általában igaz.  A csatolt erőforrások fogalma a munkaterületen meg van adva, így a projektben lévő fájlok és mappák a fájlrendszerben a projekt helyén kívül tárolhatók. 

A csatolt erőforrásoknak rendelkezniük kell egy projekttel szülőerőforrásként. Ezek virtuálisan bárhol lehetnek a fájlrendszerben. Elhelyezkedhetnek a projekthelyen kívül, vagy másik projekten belül. A csatolt erőforráshelyekre csak néhány megszorítás érvényes. Az IWorkspace.validateLinkLocation metódus segítségével biztosítható, hogy az adott hely érvényes a csatolt erőforrás létrehozásához.

A csatolt erőforrások az IFolder.createLink vagy IFile.createLink metódussal kerülnek létrehozásra. Annak programozási eljárással meghatározásához, hogy az adott erőforrás csatolva van-e, használhatja az IResource.isLinked metódust. Ne feledje el, hogy ez a metódus csak a csatolt erőforrásokhoz ad vissza igazat, a csatolt erőforrások leszármazottaihoz nem.

A csatolt erőforrások létrehozásának és az erőforrás csatoltságának megállapításának speciális metódusaitól eltekintve a csatolt erőforrások kezelésekor használhat hagyományos munkaterület alkalmazás programozási felületet. A legtöbb esetben a csatolt erőforrások pontosan ugyanúgy viselkednek, mint a munkaterület többi erőforrásai. Néhány korlátozás érvényes a csatolt erőforrások mozgatására, másolására vagy törlésére.  Az egyedi műveletek és korlátozásaikkal kapcsolatos információkért tekintse meg az IResource elemet és ezek alosztályait.

Elérési út változók

Az elérési út változók használhatók a csatolt erőforrások helyének megadásakor. Az elérési út változó egy egyszerű (karaktersorozat-> IPath) leképezés, amely egy billentyűparancsot ad meg a fájlrendszer helyéhez.  A változók leegyszerűsíthetik a csatolt erőforrások kezelését azáltal, hogy csökkentik azon helyek számot, amelyek bedrótozott, abszolút fájlrendszer elérési utakat használnak.

Az elérési út változók számos módon elősegítik a csatolt erőforrások kezelését a felhasználók számára:

A lista utolsó eleme egy magyarázat bitet biztosít. Amikor a felhasználó létrehoz egy csatolt erőforrást a projektben, akkor a csatolt erőforrás leírása a projekt helyén hozzáadódik a projekt leírófájljához (".project"). Az elérési út változó segítségével a felhasználók megoszthatnak egy projektet (a projekt tartalmának átmásolásával vagy egy lerakat használatával), és újból megadhatják a változót, amely minden egyéni munkaállomásnak megfelel.  A felhasználó tárolhatja például a a külső erőforrásokat a c:\temp könyvtár alatt, míg egy másik Unix felhasználó ugyanazokat az erőforrásokat a /home/username/tmp  könyvtárban tárolhatja. Az elérési út változók minden munkaterületen (TEMP=c:\temp és TEMP=/home/userb/tmp) megadásával a felhasználók kiküszöbölhetik ezt a különbséget és a projekteket megoszthatják a csatolt erőforrásokkal.

Az IPathVariableManager létrehozza az alkalmazás programozási felületet az elérési út változók létrehozása, kezelése és feloldásaérdekében. A változónevek és értékek létrehozás előtti érvényesítéséhez, valamint egy figyelő telepítéséhez is biztosít metódusokat, hogy értesítést kapjon az elérési út változók definíciójának változásáról. Ezen osztály egy példányát az IWorkspace.getPathVariableManager segítségével kérheti le. Részletes információkért tekintse meg a szakasz végén található kódpéldákat.

Az IResource.getRawLocation metódus segítségével megkereshető a csatolt erőforrás nem feloldott helye. Azaz az aktuális elérési út változó név lekérése az érték feloldása helyett.  Ha az erőforráshely nincs megadva az elérési út változóval, akkor a getRawLocation metódus pontosan úgy működik, mint a getLocation metódus.

Megszakadt hivatkozások

Az erőforrásokat programozási eljárással kezelő ügyfeleknek tudniuk kell a megszakadt összeköttetések lehetőségéről. A megszakadt összeköttetések akkor alakulnak ki, ha a csatolt erőforrás helye nem létezik, vagy egy nem megadott elérési út változóhoz képest van megadva. Az alábbi speciális esetek állnak fenn az IResource protokoll használatakor:

Kompatibilitás telepített bedolgozókkal

Elképzelhető, hogy néhány bedolgozó nem tudja kezelni a csatolt erőforrásokat, így letiltásukhoz számos mechanizmus áll rendelkezésre. Ha egy olyan bedolgozót ír, amelyhez az összes projekttartalomnak a projekt alapértelmezett helyén kell lennie, akkor használhatja ezeket a mechanizmusokat annak megakadályozásához, hogy a felhasználók csatolt erőforrásokat hozzanak létre, ahol nem szeretné, hogy megjelenjenek ilyenek.

Az első mechanizmus neve projektjelleg tilalom. Ha saját projektjelleget ad meg, akkor a jellemződefinícióban megadhatja, hogy a jellemző nem kompatibilis a csatolt erőforrásokkal. Az alábbiakban látható egy példa a jellegdefinícióra, amely alkalmazza a jellegvétót:

<extension
	id="myNature"
	name="My Nature"
	point="org.eclipse.core.resources.natures">
	<runtime>
		<run class="com.xyz.MyNature"/>
	</runtime>
	<options allowLinking="false"/>
   </extension>

A csatolt erőforrás létrehozását megakadályozó második mechanizmus a csapat csatlakozópont. Ha saját lerakatmegvalósítást hoz létre, akkor az org.eclipse.core.resources.teamHook kiterjesztési pont segítségével megakadályozhatja csatolt erőforrások létrehozását a projektekben, amelyek meg vannak osztva a lerakattípussal. Alapértelmezés szerint a lerakatszolgáltatók nem engedélyezik a csatolt erőforrásokat a lerakathoz csatolt projektekben. 

Ha a lerakattámogatást egy régebbi bedolgozó biztosítja, amely nem ismeri a csatolt erőforrásokat, akkor nem hozhat létre csatolt erőforrásokat ezekben a projektekben. 

Végül van egy preferenciabeállítás, amely segítségével a teljes munkaterületre letilthatók a csatolt erőforrások. Miközben az előző két tilalmi mechanizmus projekt alapon működik, ez a beállítás a munkaterület összes projektjére érvényes. A preferencia programból beállításához használja a ResourcesPlugin.PREF_DISABLE_LINKING beállítást. Ne feledje el, hogy ha be van állítva, akkor a felhasználók vagy bedolgozók akkor is felülírhatják ezt a beállítás kikapcsolásával.

Csatolt erőforrások a kódban

Tekintsünk meg néhány példát a csatolt erőforrások kódban használatára. Az elérési út változó megadásával kezdjük:

      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 {
      //érvénytelen név vagy érték, kivételt okoz vagy figyelmezteti a felhasználót
   }

Létrehozhatunk egy csatolt erőforrást a megadott elérési út változóhoz viszonyítva:

      IProject project = workspace.getProject("Project");//assume this exists
   IFolder link = project.getFolder("Link");
   IPath location = new Path("TEMP/folder");
   if (workspace.validateLinkLocation(location).isOK()) {
      link.createLink(location, IResource.NONE, null);
   } else {
      //érvénytelen hely, kivételt okoz vagy a felhasználó figyelmeztetését
   }

Ez készen van! Most már rendelkezik egy csatolt mappával a "Link" nevű munkaterületen, amely a "c:\temp\folder" alatt található.

Egy kódrészlet segítségével a csatolt erőforráson szemléltetjük a csatolt erőforráshoz kapcsolódó más metódusok viselkedését:

   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"