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.
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:
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.
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 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 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.