Działanie to logiczna grupa funkcji koncentrujących się wokół pewnego rodzaju czynności. Na przykład tworzenie oprogramowania w języku Java to działanie często wykonywane przez użytkowników platformy, a pakiet JDT definiuje wiele elementów wnoszonych interfejsu użytkownika (widoki, perspektywy, preferencje itp.), które są użyteczne wyłącznie podczas wykonywania tego działania. Przed omówieniem mechanizmów służących do definiowania działań warto poznać sposoby ich użycia do "odśmiecenia" interfejsu użytkownika.
Pojęcie działania dotyczy użytkownika, chociaż dla nowego użytkownika nie musi być ono oczywiste. Gdy dane działanie w platformie jest włączone, wyświetlane są wnoszone elementy interfejsu użytkownika powiązane z tym działaniem. Gdy działanie jest wyłączone, elementy wnoszone interfejsu użytkownika dla tego działania nie są wyświetlane. Użytkownicy mogą włączać i wyłączać działania odpowiednio do potrzeb, używając strony preferencji Środowisko robocze>Możliwości. W interfejsie użytkownika działania są określane terminem "możliwości", chociaż w interfejsie API używa się terminu "działanie".
Niektóre operacje użytkowników są punktami wyzwalania włączającymi działanie. Na przykład utworzenie projektu Java może wyzwalać włączanie działania obejmującego programowanie w języku Java. W ten sposób użytkownicy uzyskują dostęp do nowych funkcji, gdy ich potrzebują, i stopniowo poznają dostępne działania oraz ich wpływ na interfejs użytkownika. Gdy użytkownik po raz pierwszy uruchamia platformę, wskazane jest, aby możliwie wiele działań było wyłączonych, dzięki czemu aplikacja będzie maksymalnie uproszczona. Wybór opcji na stronie powitalnej może pomóc w określeniu, jakie działania powinny zostać włączone.
Wiadomo już (z opisu w sekcji Perspektywy), w jaki sposób używa się perspektyw do organizowania różnych układów widoków i zbiorów akcji w czynności. Po co potrzebne są działania? Chociaż perspektywy i działania definiują podobne rodzaje czynności, główna różnica polega na sposobie powiązania z nimi elementów wnoszonych interfejsu użytkownika dla modułu dodatkowego. Elementy wnoszone interfejsu użytkownika są powiązane z perspektywami w definicji rozszerzenia elementu wnoszonego. To znaczy, że moduł dodatkowy określa, do jakich perspektyw należą jego widoki i zbiory akcji. Moduły dodatkowe mogą także swobodnie definiować swoje własne perspektywy. Nawet gdy perspektywa nie jest aktywna, użytkownik ma dostęp do powiązanych z nią widoków i akcji za pośrednictwem komend, na przykład komendy Pokaż widok.
Działania znajdują się na wyższym poziomie organizacji. Poszczególne elementy wnoszone interfejsu użytkownika nie są informowane o działaniach i nie odnoszą się do nich w swoich definicjach rozszerzeń. Działania są zwykle konfigurowane na wyższym poziomie, takim jak konfiguracja/integracja platformy lub instalacja produktu. Poszczególne moduły dodatkowe nie definiują zazwyczaj nowych działań, o ile nie są to moduły systemowe definiowane przez integratorów systemów. W typowym scenariuszu integrator systemów określa, w jaki sposób funkcje mają być pogrupowane w działania, i które z tych działań są włączone domyślnie. Do powiązania działań z elementami wnoszonymi interfejsu użytkownika służą powiązania wzorców działań. Wzorce te są dopasowywane do identyfikatorów elementów interfejsu użytkownika wnoszonych przez moduły dodatkowe. W przybliżeniu tych pojęć pomoże poniższy przykład.
Działania definiuje się przy użyciu punktu rozszerzenia org.eclipse.ui.activities. Poniżej przedstawiono uproszczony sposób definiowania przez moduł dodatkowy Eclipse SDK dwóch działań - jednego dla tworzenia oprogramowania w języku Java i drugiego dla tworzenia modułów dodatkowych:
<extension point="org.eclipse.ui.activities"> <activity name="Działanie Java" description="Tworzenie oprogramowania Java" id="org.eclipse.javaDevelopment"> </activity> <activity name="Działanie modułów dodatkowych" description="Tworzenie modułów dodatkowych Eclipse" id="org.eclipse.plugInDevelopment"> </activity> ...
Działaniom przypisuje się nazwę i opis, które mogą być wyświetlane, gdy użytkownik włącza lub wyłącza działania, lub informacje o działaniach wyświetlaną w innych sytuacjach. Identyfikator działania jest używany podczas definiowania powiązań wzorców lub innych relacji między działaniami. Można na przykład zdecydować, że jedno działanie wymaga innego działania.
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
Powiązanie wymagania stanowi, że działanie tworzenia modułu dodatkowego może być włączone tylko wtedy, gdy włączone jest działanie programowania w języku Java. Pokrewne działania można także wiązać w kategorie, które są wyświetlane, gdy użytkownik pracuje z działaniami.
<category name="Programowanie" description="Tworzenie oprogramowania" 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>
Ta kategoria grupuje pokrewne działania programistyczne. Jest ona wyświetlana, gdy użytkownik ręcznie konfiguruje działania.
Działania są powiązane z elementami wnoszonymi interfejsu użytkownika na podstawie dopasowywania wzorca. Dopasowywanie wzorca używane w powiązaniach wzorców działań jest zgodne z regułami opisanymi w pakiecie java.util.regex dla wyrażeń regularnych. Powiązania używane przez środowisko robocze składają się z dwóch części. Pierwsza część używa identyfikatora modułu dodatkowego, który wnosi rozszerzenie interfejsu użytkownika. Druga część to identyfikator używany przez sam moduł dodatkowy podczas definiowania elementu wnoszonego (który może, ale nie musi, zawierać identyfikator modułu dodatkowego jako część identyfikatora). Stosowany jest następujący format:
identyfikator_modułu_dodatkowego + "/" + identyfikator_lokalnyNa przykład poniższe powiązanie wzorca działania stanowi, że element wnoszony interfejsu użytkownika przez moduł dodatkowy JDT o dowolnym identyfikatorze (org.eclipse.jdt.*) jest powiązany z działaniem programowania Java niezależnie od jego identyfikatora lokalnego (.*).
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Kolejne powiązanie jest konkretniejsze. Określa ono, że element wnoszony o nazwie javanature, definiowany w module podstawowym JDT (org.eclipse.jdt.core), jest powiązany z działaniem programowania Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>Jak widać, powiązania wzorców działań mogą służyć do wiązania dużych grup elementów wnoszonych z określonym działaniem lub do powiązania z działaniem bardzo konkretnych elementów wnoszonych. Działania mają wpływ na następujące elementy wnoszone:
Konwencja używana w środowisku roboczym (identyfikator modułu dodatkowego + identyfikator lokalny) umożliwia łatwe tworzenie powiązań z modułami dodatkowymi, które nie muszą być zgodne z praktyką nadawania nazw polegającą na poprzedzaniu identyfikatora elementu wnoszonego interfejsu użytkownika identyfikatorem modułu dodatkowego. Moduły dodatkowe bezpośrednio współdziałające z interfejsem API działań mogą bez ograniczeń korzystać z własnego formatu identyfikowania elementów wnoszonych i dopasowywania wzorca do tych nazw.
Do powiązywania działań z elementami wnoszonymi pomocy używa się tego samego schematu dopasowywania wzorca, którego używa się dla elementów wnoszonych interfejsu użytkownika. Druga część identyfikatora (identyfikator lokalny) wskazuje nazwę pliku ze spisem treści (TOC). Na przykład poniższe powiązanie wzorca działania wiąże wszystkie pliki TOC wnoszone przez moduły dodatkowe JDT (org.eclipse.jdt.*) z działaniem programowania Java:
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Gdy działanie programowania w języku Java jest wyłączone, podręczniki pomocy wnoszone przez moduły dodatkowe JDT oraz wszelkie podręczniki podrzędne (pliki TOC podłączone do podręczników JDT lub przez podręczniki JDT), nawet wnoszone przez inny moduł dodatkowy, nie są wyświetlane w interfejsie użytkownika pomocy. Tematy zdefiniowane w tych podręcznikach nie będą także wyświetlane w wynikach wyszukiwania. W sytuacji, gdy spisy treści modułów JDT nie były wyświetlane jako główne spisy treści, ale były podłączone z innego spisu treści i wyświetlane jako poddrzewa w podręczniku, wyłączenie działania JDT spowoduje ukrycie tych poddrzew. W interfejsie użytkownika podręcznik, który je zawiera, będzie wyglądał, jak gdyby obejmował mniejszą liczbę tematów.
Używając bardziej konkretnych powiązań, można wiązać działania z wybranymi spisami treści z modułów dodatkowych, które wnoszą wiele spisów treści do systemu pomocy. Na przykład poniższe powiązanie wzorca działania wiąże spis treści sekcji "Przykłady" z działaniem przykładów programowania Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>Dzięki takiemu powiązaniu wzorca wyłączenie działania przykładów programowania w języku Java spowoduje, że sekcja "Przykłady" w "Podręczniku programisty modułów dodatkowych JDT" zostanie ukryta.
Obsługa działań w środowisku roboczym obejmuje interfejs API przeznaczony do definiowania działań oraz zmieniania ich stanu włączenia. Interfejs ten nie dotyczy większości modułów dodatkowych, ale przydaje się podczas implementowania funkcji umożliwiających użytkownikowi pracę z działaniami lub podczas implementowania punktów wyzwalania, które włączają konkretne działania. Zakłada się, że dowolny moduł dodatkowy, który manipuluje działaniami za pośrednictwem interfejsu API, ma znaczną liczbę informacji o konfiguracji działań na potrzeby danego produktu. Na przykład samo środowisko robocze używa tego interfejsu API do wyzwalania włączenia działań, takich jak programowanie w języku Java. Poniżej przedstawiono sposób użycia ogólnego interfejsu API działań do zaimplementowania wyzwalaczy w środowisku roboczym.
Koncentratorem wszelkich działań w środowisku roboczym jest interfejs IWorkbenchActivitySupport. Obsługa działań pracuje w parze z interfejsem IActivityManager. Moduły dodatkowe mogą uzyskiwać dostęp do instancji obsługi działań ze środowiska roboczego, a stamtąd z menedżera działań.
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();Poniższy fragment kodu włącza działanie programowania w języku Java (o ile nie zostało ono włączone wcześniej). Stanowi on uproszczoną wersję wyzwalacza.
... //użytkownik wykonał dowolną czynność dotyczącą programowania w języku Java. Należy włączyć działanie programowania w języku Java. Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
Interfejs IActivityManager definiuje także protokół uzyskiwania identyfikatorów wszystkich zdefiniowanych działań i kategorii oraz interfejsu IActivity lub ICategory dla danego identyfikatora. Obiektów tych można użyć do przechodzenia definicji działania lub kategorii w interfejsie API, na przykład uzyskania powiązań wzorca lub powiązań wymagań. W menedżerze działań lub w działaniach i kategoriach można zarejestrować funkcje nasłuchiwania, które będą wykrywać zmiany w definicji danego działania lub w samym menedżerze działań. Więcej informacji na ten temat zawiera opis pakietu org.eclipse.ui.activities.