Uma actividade é um agrupamento lógico de funcionalidades centrado em certo tipo de tarefa. Por exemplo, desenvolver software Java é uma actividade geralmente realizada por utilizadores da plataforma e as JDTs definem muitos contributos de UI (vistas, editores, perspectivas, preferências, etc.) que só são úteis quando se realiza esta actividade. Anets de abordarmos a mecânica para definir uma actividade, vejamos como são usadas para "despojarr" a UI.
O conceito de actividade está exposto ao utilizador, embora talvez não seja aparente para um novo utilizador. Quando uma actividade fica activada na plataforma, os contributos da UI associados a essa actividade são mostrados. Quando uma actividade fica desactivada na plataforma, os seus contributos de UI não são mostrados.
Os utilizadores podem activar e desactivar actividades conforme seja necessário
através da utilização da página de preferências
Geral > Capacidades. (As actividades são referenciadas como "capacidades" na interface de utilizador, mesmo que empreguemos terminologia d e actividades na API).
Certas operações de utilizador servem de pontos de activação para fomentar uma actividade. Por exemplo, a criação de um novo projecto Java poderia desencadear a activação da actividade de desenvolvimento Java. Desta forma, os utilizadores ficam expostos a novas funcionalidades à medida que delas necessitarem e aprendem gradualmente as actividades que estão disponíveis e como afectam a UI. Quando um utilizador inicia a plataforma pela primeira vez, é desejável que estejam desactivadas tantas actividades quanto possível, para que a aplicação seja tão simples quanto possível. As escolhas feitas na página de boas-vindas podem ajudar a determinar quais as actividades que devem ser activadas.
Vimos (em Perspectivas) how como as perspectivas são utilizadas para organizar diferentes disposições de vistas e conjuntos de acções em tarefas. Por que razão precisamos de actividades? Porquanto as perspectivas e actividades definam tipos de tarefas semelhantes, a principal diferença é o modo como os contributos de UI de um plug-in são associados com elas. Os contributos de UI são associados a perspectivas na definição de extensão do contributo. Significa isto que um plug-in se encarrega de determinar quais as perspectivas a que pertencem as suas vistas e conjuntos de acções. Os plug-ins também são livres de definir as suas próprias perspectivas. Mesmo quando uma perspectiva não está activa, o utilizador pode aceder às vistas e acções associadas à perspectiva mediante comandos como Mostrar Vista.
As actividades são um nível superior de organização. Os contributos de UI individuais não conhecem actividades e não remetem para elas nas suas definições de extensão. Em contrapartida, espera-se que as actividades estejam configuradas ao mais alto nível como, por exemplo, integração/configuração da plataforma ou instalação do produto. Os plug-ins individuais geralmente não definem novas actividades, a menos que o plug-in seja de nível de sistema definido por um integrador de sistemas. Regra geral, um integrador de sistemas determina como as funcionalidades são agrupadas em actividades e quais as activadas por predefinição. As actividades são associadas a contributos de UI com associações de padrões de actividade, padrões esses que correspondem ao ID dos contributos de UI feitos pelos plug-ins. Passamos a demonstrar estes conceitos com um exemplo.
As actividades são definidas com o ponto de extensão org.eclipse.debug.ui.activities. Vejamos uma versão simplificada do modo como o plug-in do SDK Eclipse define duas actividades - uma para desenvolver software Java e outra para desenvolver plug-ins:
<extension point="org.eclipse.ui.activities"> <activity name="Actividade Java" description="Desenvolver Software Java" id="org.eclipse.javaDevelopment"> </activity> <activity name="Actividade Plug-in" description="Desenvolver Plug-ins Eclipse" id="org.eclipse.plugInDevelopment"> </activity> ...
As actividades recebem nome e descrição que podem ser mostrados ao utilizador sempre que este as esteja a activar e desactivar ou a receber informações sobre uma actividade. O ID da actividade é usado ao definir associações de padrões ou outras relações entre actividades. Por exemplo, podemos decidir que uma actividade precisa de outra actividade.
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
A associação de requisito afirma que a actividade de desenvolvimento de plug-ins só pode ser activada quandofor activada a actividade de desenvolvimento Java. As actividades relacionadas também podem ser associadas em categorias, que são mostradas ao utilizador quando este trabalha com actividades.
<category name="Development" description="Software Development" 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>
A categoria agrupa as actividades de desenvolvimento relacionadas. Esta categoria é apresentada ao utilizador quando este configurar actividades manualmente.
As actividades são associadas a contributos de UI mediante correspondência de padrões. A correspondência de padrões utilizada nas associações de padrões de actividades segue as regras descritas no pacote java.util.regex para expressões regulares. Os padrões usados pela área de trabalho compõem-se de duas partes. A primeira parte utiliza o identificador do plug-in que contribui com a extensão da UI. A segunda parte é o ID usado pelo próprio plug-in ao definir o contributo (o qual pode ou não incluir também o ID do plug-in como parte do identificador). É utilizado o seguinte formato:
identificador-plug-in + "/" + identificador-localPor exemplo, a associação de padrões de actividades seguinte afirma que um contributo de UI de qualquer ID de plug-in JDT (org.eclipse.jdt.*) está associado à actividade de desenvolvimento Java seja qual for o seu identificador local (.*).
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>A associação seguinte é mais específica, pois afirma que o contributo denominado javanature definido no núcleo JDT (org.eclipse.jdt.core) está associado à actividade de desenvolvimento Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>Como vemos, as associações de padrões de actividades podem se rusadas para associar grupos de contributos grandes com determinada actividade ou para associar contributos muito específicos a uma actividade. Os contributos seguintes são afectados pelas actividades:
A convenção usada pela área de trabalho (ID de plug-in + ID local) permite fácil associação a plug-ins que não sigam necessariamente a prática de nomenclatura de atribuir um prefixo aos identificadores de contributos de UI com o identificador do seu plug-in. Os plug-ins que interagem directamente com a API de actividades são livres de usar o seu próprio formato para identificar contributos e para correspondência de padrões com esses nomes.
As actividades são associadas a contributos de ajuda com o mesmo esquema de correspondência de padrões usado para contributos de UI. A segunda parte do identificador (o identificador local) indica o nome do ficheiro de índice (TOC). Por exemplo, a associação de padrões de actividades seguinte associa todos os ficheiros TOC contribuídos por plug-ins JDT(org.eclipse.jdt.*) à actividade de desenvolvimento Java:
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Quando a actividade de desenvolvimento Java está desactivada, não serão apresentados na UI de ajuda manuais de ajuda contribuídos por plug-ins JDT, nem sub-manuais alguns (TOCs ligados ou ligados por manuais JDT), mesmo que seja contributo de um plug-in diferente. Os tópicos definidos nesses manuais também não aparecem em resultados de pesquisa. No caso em que os TOCs de JDT não sejam apresentados como TOCs principais, mas sim ligados de outro TOC para aparecerem como sub-árvores num manual, desactivar a actividade JDT tem o efeito de ocultar as sub-árvores. O manual parecerá que define menos tópicos na UI.
Ao utilizar associações mais específicas, é possível associar actividades a TOCs seleccionados a partir de plug-ins que contribuem com vários TOCs para o sistema de ajuda. Por exemplo, a associação de padrões de actividades seguinte associa o TOC de "Exemplos" à actividade de desenvolvimento Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>Com tal associação de padrões de actividades, desactivar a actividade exemplos de desenvolvimento Java irá ocultar a secção "Examples" do manual "JDT Plug-in Developer Guide".
O suporte de actividades da área de trabalho inclui uma API para trabalhar com actividades definidas e alterar o seu estado activado. A maioria dos plug-ins não tem que se preocupar com esta API, mas é útil quando se implementam funcionalidades que permitam ao utilizador trabalhar com actividades ou para implementar os pontos de activação que activam determinada actividade. Parte-se do princípio de que qualquer plug-in que manipule actividades através da API tenha conhecimento das maneiras em que as actividades estão configuradas para determinado produto. Por exemplo, a própria área de trabalho utiliza a API para desencadear a activação de actividades como, por exemplo, desenvolvimento Java. Veremos como a área de trabalho utiliza a API de actividades genéricas para implementar activadores.
O eixo de toda a actividade na área de trabalho é o IWorkbenchActivitySupport. O suporte de actividades funciona junto com um IActivityManager. Os plug-ins podem obter a instância de suporte de actividades junto da área de trabalho e o gestor de actividades do mesmo.
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();A porção de código seguinte activa a actividade de desenvolvimento Java (se não o estiver já). Mostra uma versão simplificada de um activador.
... //the user did something Java related. Enable the Java activity. Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
OIActivityManager também define protocolo para obter todos os IDs de actividades e categorias definidos e para obter a IActivity ou ICategory associada para determinado ID. Estes objectos podem ser usados para atravessar a definição de uma actividade ou categoria na API como, por exemplo, obter as associações de padrões ou associações de requisitos. Podem ser registados ouvintes no gestor de actividades ou nas próprias actividades ou categorias, a fim de detectar alterações na definição de dada actividade ou no próprio gestor de actividades. Consulte o pacote org.eclipse.ui.activities para mais informações.