Uma atividade é um agrupamento lógico de funções que está centrado em um determinado tipo de tarefa. Por exemplo, desenvolver um software Java é uma atividade normalmente executada por usuários da plataforma e o JDT define muitas contribuições de UI (visualizações, editores, perspectivas, preferências, etc.) que são somente úteis ao executar esta atividade. Antes de verificar os mecanismos para definir uma atividade, vamos verificar como eles costumam ajudar a "separar" a UI.
O conceito de uma atividade é exposto ao usuário, embora talvez não seja aparente para um novo usuário. Quando uma atividade é ativada na plataforma, as contribuições da UI associadas a essa atividade são mostradas. Quando uma atividade é desativada na plataforma, suas contribuições da UI não são mostradas. Os usuários podem ativar e desativar as atividades conforme necessário utilizando a página de preferências Workbench>Recursos. (As atividades são chamadas de "recursos" na interface com o usuário, embora a terminologia da atividade seja utilizada na API).
Determinadas operações do usuário servem como pontos acionadores para ativar uma atividade. Por exemplo, criar um novo projeto Java poderia acionar a ativação da atividade de desenvolvimento Java. Desse modo, os usuários são expostos à nova função na medida em que precisam e aprendem gradualmente sobre as atividades que estão disponíveis para eles e como elas afetam a UI. Quando um usuário inicia a plataforma, é desejável que sejam desativadas quantas atividades forem possíveis, para que o aplicativo seja o mais simples possível. As escolhas feitas na página de boas-vindas podem ajudar a determinar quais atividades devem ser ativadas.
Vimos (em Perspectivas) como as perspectivas são utilizadas para organizar diferentes layouts de visualização e conjuntos de ações em tarefas. Por que precisamos das atividades? Enquanto as perspectivas e as atividades definem tipos semelhantes de tarefas, a principal diferença é como as contribuições da UI para um plug-in estão associadas a elas. As contribuições da UI estão associadas às perspectivas na definição de extensão da contribuição. Ou seja, um plug-in está encarregado de determinar a quais perspectivas suas visualizações e conjuntos de ações pertencem. Os plug-ins também estão livres para definir suas próprias perspectivas. Mesmo quando uma perspectiva não está ativa, o usuário pode acessar as visualizações e ações associadas à perspectiva por meio de comandos como Mostrar Visualização.
As atividades são um nível mais alto da organização. As contribuições de Ui individuais não estão conscientes das atividades não se referem às atividades em suas definições de extensão. De preferência, espera-se que as atividades sejam configuradas em um nível mais alto como a integração/configuração da plataforma ou a instalação do produto. Os plug-ins individuais normalmente não definem novas atividades, a menos que o plug-in seja um plug-in do nível do sistema definido por um integrador de sistemas. Em um cenário típico, um integrador de sistemas determina como a função é agrupada em atividades e quais são ativadas por padrão. As atividades estão associadas às contribuições de UI utilizando as ligações do padrão de atividade, padrões que correspondem ao id das contribuições de UI feitas pelos plug-ins. Um exemplo ajudará a demonstrar esses conceitos.
As atividades são definidas utilizando o ponto de extensão org.eclipse.ui.activities. Verificaremos uma versão simplificada de como o plug-in SDK do Eclipse define duas atividades - uma para desenvolver software Java e uma para desenvolver plug-ins:
<extension point="org.eclipse.ui.activities"> <activity name="Java Activity" description="Developing Java Software" id="org.eclipse.javaDevelopment"> </activity> <activity name="Plug-in Activity" description="Developing Eclipse Plug-ins" id="org.eclipse.plugInDevelopment"> </activity> ...
As atividades recebem um nome e uma descrição que podem ser mostrados para o usuário sempre que o usuário estiver ativando e desativando as atividades ou, de qualquer forma, as informações mostradas sobre uma atividade. O id da atividade é utilizado ao definir ligações padrão ou outros relacionamentos entre as atividades. Por exemplo, podemos decidir que uma atividade requer outra atividade.
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
A ligação de requisito afirma que a atividade de desenvolvimento de plug-in pode ser ativada somente quando a atividade de desenvolvimento Java estiver ativada. As atividades relacionadas também podem estar restritas às categorias, que são mostradas para o usuário quando ele está trabalhando com atividades.
<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>
Os grupos de categoria relacionam as atividades de desenvolvimento juntas. Essa categoria é mostrada para o usuário quando ele configura as atividades manualmente.
AS atividades estão associadas às contribuições de UI utilizando a correspondência padrão. A correspondência padrão utilizada nas ligações padrão da atividade segue as regras descritas no pacote java.util.regex para expressões regulares. Os padrões utilizados pelo workbench são compostos de duas partes. A primeira parte utiliza o identificador do plug-in que está contribuindo com a extensão de UI. A segunda parte é o id utilizado pelo plug-in em si ao definir a contribuição (que pode ou não incluir o id de plug-in como parte do identificador). O seguinte formato é utilizado:
identificador de plug-in + "/" + identificador localPor exemplo, a seguinte ligação de padrão de atividade afirma que uma contribuição de UI de qualquer id de plug-in JDT (org.eclipse.jdt.*) está associado à atividade de desenvolvimento Java sem considerar o seu identificador local (.*).
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>A próxima ligação é mais específica. Ela afirma que a contribuição chamada de javanature definida no núcleo JDT (org.eclipse.jdt.core) está associada à atividade de desenvolvimento Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>Como você pode ver, as ligações do padrão de atividade podem ser utilizadas para associar grupos grandes de contribuições a uma atividade específica ou associar contribuições muito específicas a uma atividade. As seguintes contribuições são afetadas pelas atividades:
A convenção utilizada pelo workbench (id de plug-id + id local) permite a fácil ligação para plug-ins que não necessariamente seguem a prática de denominação de prefixar seus identificadores de contribuição de UI com o identificador do plug-in. Os plug-ins que interagem diretamente com a API da atividade estão livres para utilizar seu próprio formato para identificar contribuições e para a correspondência de padrão desses nomes.
As atividades estão associadas às contribuições de ajuda utilizando o mesmo esquema de correspondência padrão utilizado para contribuições de UI. A segunda parte do identificador (o identificador local) indica o nome do arquivo do TOC (Índice). Por exemplo, a seguinte ligação padrão da atividade associa todos os arquivos TOC contribuídos pelos plug-ins JDT (org.eclipse.jdt.*) à atividade de desenvolvimento Java:
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Quando a atividade de desenvolvimento Java está desativada, os manuais de ajuda contribuídos pelos plug-ins JDT ou quaisquer submanuais (vinculados aos TOCs ou pelos manuais JDT), mesmo se contribuídos por um plug-in diferente, não serão mostrados na UI da ajuda. Os tópicos definidos nesses manuais também não serão mostrados nos resultados de procura. No caso em que os JDT TOCs não foram exibidos como TOCs principais, mas em vez disso foram vinculados de outro TOC para aparecerem como subárvores em um manual, desativar a atividade JDT tem o efeito de ocultar as subárvores. O manual será exibido para definir menos tópicos na UI.
Utilizando ligações mais específicas, é possível associar atividades com TOCs selecionados de plug-ins que contribuem com vários TOCs para o sistema de ajuda. Por exemplo, a seguinte ligação do padrão de atividade associa o TOC "Exemplos" à atividade dos exemplos de desenvolvimento Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>Com essa ligação padrão, desativar a atividade de exemplos de desenvolvimento Java ocultará a seção "Exemplos" do manual "Guia do Desenvolvedor de Plug-in JDT".
O suporte de atividade do workbench inclui uma API para trabalhar com as atividades definidas e alterar seu estado ativado. A maioria dos plug-ins não precisa se preocupar com essa API, mas é útil ao implementar uma função que permite que o usuário trabalhe com atividades ou para implementar os pontos acionadores que ativam uma atividade específica. Presume-se que qualquer plug-in que esteja manipulando atividades por meio da API esteja bastante consciente das maneiras que as atividades são configuradas para um produto específico. Por exemplo, o workbench em si utiliza a API para acionar a ativação de atividades como o desenvolvimento Java. Observaremos como o workbench utiliza a API de atividade genérica para implementar acionadores.
O hub de toda a atividade no workbench é IWorkbenchActivitySupport. O suporte de atividade trabalha junto com o IActivityManager. Os plug-ins podem obter a instância do suporte de atividade a partir do workbench e o gerenciador de atividade de lá.
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();O seguinte fragmento ativa a atividade de desenvolvimento Java (se já não estiver ativada). Mostra uma versão simplificada de um acionador.
... //o usuário fez algo relacionado à Java. Ative a atividade Java. Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
O IActivityManager também define o protocolo para obter todos os ids definidos para a atividade e a categoria e para obter a IActivity ou a ICategory associadas para um id específico. Esses objetos podem ser utilizados para atravessar a definição para uma atividade ou categoria na API, como obter as ligações padrão ou as ligações de requisito. Os listeners podem ser registrados no gerenciador de atividades ou nas atividades e categorias em si para detectar alterações na definição de uma atividade específica ou no gerenciador de atividades em si. Consulte o pacoteorg.eclipse.ui.activities para obter informações adicionais.