Csapat és csatolt erőforrások

A projekt tartalmazhat olyan erőforrásokat, amelyek nem a projekt könyvtárában találhatók a helyi fájlrendszeren. Ezekre az erőforrásokra csatolt erőforrásokként hivatkozunk.

Következmény a lerakatszolgáltatók számára

A csatolt erőforrások kihívásokat támaszthatnak a lerakatszolgáltatókkal szemben, amelyek közvetlenül a fájlrendszeren működnek. Ez annak a következménye, hogy a csatolt erőforrások kialakítás szerint nem léteznek a fájlrendszer közvetlen címjegyzék projektkönyvtárfájában.

Az alábbi jellemzőket mutató szolgáltatókra hatással lehetnek a csatolt erőforrások:

  1. Azokra, amelyek egy külső programot hívnak meg, amely azután közvetlenül a fájlrendszeren működik.
  2. Azokra, amelyek az IResource tagjaiban kerülnek megvalósításra, de feltételezik, hogy a projekt összes fájlja/mappája ezen gyökérrel rendelkező könyvtárfa közvetlen leszármazottja.

Az első esetben tételezzük fel, hogy a felhasználó kiválaszt egy csatolt erőforrást, és megpróbál végrehajtani rajta egy szolgáltatóműveletet. Mivel a szolgáltató egy parancssori ügyfelet hív meg, feltételezhetjük, hogy a szolgáltató az IResource.getLocation().toOSString(), első meghívásának megfelelő dolgot hajt végre, az eredményül kapott fájlrendszert pedig a parancssori program argumentumaként biztosítja. Ha a kérdésben szerepelő erőforrás egy csatolt erőforrás, akkor ez a projektkönyvtárfán kívüli fájlt/mappát eredményez. Nem az összes parancssori ügyfél tudja kezelni ezt az esetet. Röviden: ha a szolgáltató megtudja az erőforrás fájlrendszer-helyét, akkor valószínűleg többletmunkát igényel a csatolt erőforrások kezeléséhez.

A második eset nagyon hasonló abban az implicit feltételezésben, hogy a projekt-erőforrások struktúrája 1:1 a fájlrendszer fájlokkal/mappákkal. Általában a szolgáltató bajba kerülhet, ha keveri az IResource és java.io.File műveleteket. Hivatkozások esetén például az IFile szülője nem egyezik meg a java.io.File szülőjével, és a kód, amely feltételezi ezek egyezését, meghiúsul.

Visszamenőleges kompatibilitás

Fontos volt, hogy a csatolt erőforrások bevezetése ne szakítsa meg véletlenül a meglévő szolgáltatókat. A szolgáltatók problémája, hogy érthető módon feltételezték, hogy a helyi fájlrendszer struktúra tükrözi a projektstruktúrát. Csatolt erőforrások alapértelmezésben nem adhatók a projektekhez, amelyek ilyen szolgáltatóra vannak leképezve. A csatolt erőforrásokat tartalmazó projektek alapértelmezés szerint nem oszthatók meg ezzel a szolgáltatóval.

A csatolt erőforrások kezelési stratégiái

A csatolástámogatás érdekében a szolgáltatóknak engedélyezniük kell a csatolt erőforrásokkal rendelkező projektek verziókövetését, de a csatolt erőforrások verziókövetése letiltható.

Ennél lényegesebben bonyolultabb megoldás az aktuális csatolt erőforrások verziókövetésének engedélyezése, de ez ellenjavallt, mivel összetett példahelyzetekkel jelenik meg (például elképzelheti, hogy a fájl verziókövetését más szolgáltató más projektfa alatt már megvalósította). Javaslatunk a verziókövetett projektek támogatása, amely verziókövetéssel nem rendelkező csatolt erőforrásokat tartalmaz.

A csatolástámogatás technikai részletei

A lerakatszolgáltató-megvalósítások frissíthetők, hogy támogassák a csatolt erőforrásokat a RepositoryProvider.canHandleLinkedResources() metódus újradefiniálásával, hogy true értéket adjon vissza. Amennyiben ez megtörtént, a csatolt erőforrások engedélyezettek lesznek a lerakatszolgáltatóval megosztott projektekben. A lerakatszolgáltatónak lépéseket kell tennie annak biztosítása érdekében, hogy a csatolt erőforrások kezelése megfelelően történjen. Ahogy fent említettük, határozottan ajánlott, hogy a lerakatszolgáltatók figyelmen kívül hagyják az összes erőforrást. Ez azt jelenti, hogy a csatolt erőforrásokat (és leszármazottjaikat) ki kell hagyni a lerakatszolgáltató által támogatott tevékenységekből. A lerakatszolgáltatónak az alapértelmezett áthelyezés és törlés viselkedést kell használnia a csatolt erőforrásokhoz, ha a lerakatszolgáltató-megvalósítás felülírja az alapértelmezett IMoveDeleteHook csatlakozópontot.

A csapatszolgáltatók az IResource.isLinked() segítségével meghatározhatják, hogy az erőforrás hivatkozás-e. Ez a metódus csak a hivatkozás gyökeréhez ad vissza igaz értéket. Az alábbi kódszegmens segítségével meghatározható, hogy az erőforrás a hivatkozás leszármazottja-e.

String linkedParentName = resource.getProjectRelativePath().segment(0);
IFolder linkedParent = resource.getProject().getFolder(linkedParentName);
boolean isLinked = linkedParent.isLinked();

A lerakatszolgáltatóknak figyelmen kívül kell hagyniuk azon erőforrásokat, amelyek esetén a kód értéke true.