Aktivita je logické seskupení funkcí soustředěných okolo určitého typu úlohy. Tak například vývoj software Java je běžnou aktivitou uživatelů platformy a JDT definuje řadu prvků uživatelského rozhraní (pohledy, editory, perspektivy, předvolby atd.), které lze účinně používat pouze při provádění této aktivity. Dříve než se budeme věnovat mechanizmu definování aktivity, podívejme se na způsob použití pro účely "uspořádání" uživatelského rozhraní.
Koncept aktivity ukazuje své funkce uživateli, což však nemusí být patrné v případě nového uživatele. Je-li určitá aktivita v platformě aktivní, zobrazují se prvky uživatelského rozhraní přiřazené této aktivity. Je-li určitá aktivita v platformě vypnutá, pak se její prvky uživatelského rozhraní nezobrazují. Uživatelé mohou aktivovat a deaktivovat aktivity dle potřeby s použitím stránky předvoleb Pracovní plocha>Možnosti. (Aktivity se v rámci uživatelského rozhraní nazývají "možnostmi", v rozhraní API však používáme termín aktivita).
Určité operace uživatele plní funkci spouštěcích bodů zpřístupnění aktivity. Tak například při vytvoření nového javovského projektu může dojít ke spouštění aktivita vývoje v jazyce Java. Tímto způsobem mají uživatelé přístup k nové funkci dle svých potřeb a postupně se obeznamují s dostupnými aktivitami a s jejich vlivem na uživatelské rozhraní. Pokud uživatel spouští platformu poprvé, je žádoucí, aby byl deaktivován maximální počet aktivit, tj. aby byla aplikace co nejvíce jednoduchá. Volby prováděné na uvítací stránce mohou pomoci určit, které aktivity mají být zpřístupněné.
Seznámili jsme se se způsobem použití perspektiv (v Perspektivy) pro organizaci různých rozvržení pohledů a akčních sad do úloh. K čemu tedy potřebujeme aktivity? Perspektivy a aktivity sice definují podobný typ úloh, hlavní rozdíl však spočívá ve způsobu přiřazování prvků uživatelského rozhraní pro moduly plug-in k těmto perspektivám, resp. aktivitám. Prvky uživatelského rozhraní se k perspektivám přiřazují v rozšiřující definici prvku. To znamená, že modul plug-in určuje, do kterých perspektiv jeho pohledy a akční sady patří. Moduly plug-in tak mají možnost definovat své vlastní perspektivy. K pohledům a akcím určité perspektivy může uživatel získat přístup dokonce i v případě, že je tato perspektiva deaktivovaná, a to příkazem Zobrazit pohled.
Aktivity jsou vyšší úrovní organizace. Individuální prvky uživatelského rozhraní neumí používat aktivity a neodkazují na ně ve svých rozšiřujících definicích. Aktivity se konfigurují na vyšší úrovni, např. při integraci/konfiguraci platformy nebo při instalaci produktu. Individuální moduly plug-in v běžném případě nedefinují nové aktivity, nejde-li ovšem o modul plug-in systémové úrovně definovaný v rámci integrace systému. V typické situaci osoba provádějící integraci systému určí způsob seskupení funkcí do aktivit a dále stanoví činnosti, které budou ve výchozím nastavení zpřístupněny. Aktivity se přiřazují k prvkům uživatelského rozhraní s použitím vazeb vzorů aktivity, vzorů, které se shodují s ID prvků uživatelského rozhraní vytvořených moduly plug-in. Předveďme tyto koncepty na následujícím příkladu.
Aktivity se definují s použitím bodu rozšíření org.eclipse.ui.activities. Podívejme se nyní na zjednodušenou verzi způsobu, kterým modul plug-in Eclipse SDK definuje dvě aktivity - jednu pro vývoj javovského programového vybavení a druhou pro vývoj modulů plug-in:
<extension point="org.eclipse.ui.activities"> <activity name="Aktivita Java" description="Vývoj javovského programového vybavení" id="org.eclipse.javaDevelopment"> </activity> <activity name="Aktivita modulu plug-in" description="Vývoj modulů plug-in Eclipse" id="org.eclipse.plugInDevelopment"> </activity> ...
Aktivitám je přiřazen název a popis, který lze zobrazit uživateli vždy při aktivaci a deaktivaci aktivity či při zobrazení informací o aktivitě jiným způsobem. ID aktivity se používá při definování vzorových vazeb nebo jiných vzájemných vztahů aktivit. Lze například určit, že jedna aktivita vyžaduje aktivitu jinou.
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
Vazba požadavku stanovuje, že aktivita vývoje modulu plug-in může být zpřístupněna pouze v případě, že je zpřístupněna aktivita vývoje v jazyce Java. Související aktivity lze seskupovat rovněž do kategorií, jež se zobrazují uživateli, pokud pracuje s aktivitami.
<category name="Vývoj" description="Vývoj programového vybavení" id="org.eclipse.categories.developmentCategory"> </category> <categoryActivityBinding activityId="org.eclipse.javaDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding> <categoryActivityBinding activityId="org.eclipse.plugInDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding>
Kategorie seskupuje související aktivity vývoje. Tato kategorie se zobrazuje uživateli při ruční konfiguraci aktivit.
Aktivity se přiřazují k prvkům uživatelského rozhraní s použitím porovnávání vzorů. Porovnávání vzorů použité ve vazbách vzoru aktivity postupuje dle pravidel stanovených v balíčku java.util.regex pro regulární výrazy. Vzory používané pracovní plochou se skládají ze dvou částí. První část používá identifikátor modulu plug-in, který vkládá rozšíření uživatelského rozhraní. Druhá část používá ID použité samotným modulem plug-in při definování prvku rozhraní (který může ale nemusí obsahovat jako součást identifikátoru rovněž ID modulu plug-in). Používá se tento formát:
identifikátor-modulu-plug-in + "/" + lokální-identifikátorNapříklad následující vazba vzoru aktivity určuje, že prvek uživatelského rozhraní z jakéhokoli ID modulu plug-in JDT (org.eclipse.jdt.*) je přiřazen aktivitě vývoje v jazyce Java bez ohledu na jeho lokální identifikátor (.*).
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Následující vazba je konkrétnější. Určuje, že prvek uživatelského rozhraní s názvem javanature definovaný v jádru JDT (org.eclipse.jdt.core) je přiřazen aktivitě vývoje v jazyce Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>Jak je patrné, vazby vzoru aktivity lze použít k přiřazení velkých skupin přiřazených prvků uživatelského rozhraní určité aktivity nebo k přiřazení velmi specifických prvků určité aktivity. Aktivity ovlivňují tyto příspěvky:
Konvence používaná pracovní plochou (id modulu plug-in + lokální id) umožňuje snadné vytváření vazeb k modulům plug-in, které nemusí dodržovat způsob pojmenování vytvářením prefixů svých prvků uživatelského rozhraní k identifikátoru jejich modulu plug-in. Moduly plug-in, které přímo zajišťují interakci s rozhraním API aktivity, mohou bez omezení používat vlastní formát identifikace příspěvků a porovnávání vzorů s jejich názvy.
Aktivity se přiřazují k příspěvkům nápovědy pomocí téhož schématu porovnávání vzorů, který je použit pro příspěvky uživatelského rozhraní. Druhá část identifikátoru (lokální identifikátor) uvádí název souboru s obsahem (TOC). Například následující vazba vzoru aktivity přiřazuje všechny soubory TOC vložené moduly plug-in JDT (org.eclipse.jdt.*) aktivitě vývoje v jazyce Java:
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Pokud je aktivita vývoje jazyce Java znepřístupněna, uživatelské rozhraní nápovědy nezobrazuje knihy nápovědy přispěné moduly plug-in JDT nebo žádné dílčí knihy (obsahy odkazované knihami JDT nebo odkazující na knihy JDT), a to dokonce ani v případě, že přispívání provádí jiný modul plug-in. Ve výsledcích hledání se nezobrazí ani hesla definovaná těmito knihami. Pokud se obsahy JDT nezobrazují jako primární, ale jsou odkazovány z jiného obsahu, aby se zobrazily jako podstromy v knize, pak při znepřístupnění aktivity JDT dochází ke skrytí podstromů. Příslušná kniha bude v grafickém rozhraní zobrazovat méně hesel.
S použitím určitější vazby lze přiřadit aktivity k vybraným obsahům z modulů plug-in, které přispívají do systému nápovědy větším počtem obsahů. Například následující vazba vzoru aktivity přiřazuje obsah "Příklady" k aktivitě příkladů vývoje v jazyce Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>S takovouto vazbou vzorků dojde při znepřístupnění aktivity příkladů vývoje v jazyce Java ke skrytí sekce "Příklady" v knize "Průvodce vývojáře modulů plug-in JDT (JDT Plug-in Developer Guide)".
Podpora aktivit pracovní plochou zahrnuje rozhraní API určené pro práci s definovanými aktivitami a změnu jejich zpřístupnění. Většina modulů plug-in nevyžaduje zapojení tohoto rozhraní API. Je však užitečné při implementaci funkce, která uživateli umožňuje pracovat s aktivitami, nebo při implementaci spouštěcích bodů, které zpřístupní určitou aktivitu. Předpokládá se, že všechny moduly plug-in manipulující s aktivitami prostřednictvím rozhraní API mají k dispozici informace o způsobu konfigurace aktivit pro určitý produkt. Například samotná pracovní plocha používá rozhraní API ke spouštění zpřístupnění aktivity, např. vývoje v jazyce Java. Podívejme se na způsob, kterým pracovní plocha používá generické rozhraní API aktivity k implementaci spouštěčů.
Centrálním bodem všech aktivit pracovní plochy je IWorkbenchActivitySupport. Podpora aktivity spolupracuje s IActivityManager. Moduly plug-in získávají instanci podpory aktivity od pracovní plochy a od nich i správce aktivit.
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();Následující úsek zpřístupňuje aktivitu vývoje v jazyce Java (pokud ještě není zpřístupněna). Obsahuje zjednodušenou verzi spouštěče.
... //uživatel provedl úkony související s prostředím Java. Povolit aktivitu Java. Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
ActivityManager definuje rovněž protokol pro získání ID všech definovaných aktivit a kategorií a dále pro získání IActivity nebo ICategory přiřazených určitému ID. Tyto objekty lze použít k procházení definice aktivity nebo kategorie v rozhraní API a dále pro získání vazeb vzorů či vazeb požadavku. Příjemci mohou být registrováni u správce aktivit nebo u samotných aktivit a kategorií za účelem rozpoznání změn v definici určité aktivity nebo v samotném správci aktivit. Více informací naleznete v balíčku org.eclipse.ui.activities.