Actividades

Una actividad es una agrupación lógica de funciones que se centra en un determinado tipo de tarea. Por ejemplo, el desarrollo de software Java es una actividad realizada habitualmente por los usuarios de la plataforma, y JDT define muchas contribuciones de UI (vistas, editores, perspectivas, preferencias, etc.) que sólo son de utilidad al realizar esta actividad. Antes de examinar la mecánica necesaria para definir una actividad, observaremos cómo se utilizan para ayudar a "ordenar" la UI.

El concepto de actividad queda expuesto al usuario, aunque quizás no sea visible para los usuarios nuevos. Cuando se habilita una actividad en la plataforma, se muestran las contribuciones de UI asociadas con dicha actividad. Cuando se inhabilita una actividad en la plataforma, sus contribuciones de UI no se muestran. Los usuarios pueden habilitar e inhabilitar actividades según sus necesidades mediante la página de preferencias Entorno de trabajo>Posibilidades. (Las actividades se conocen como "posibilidades" en la interfaz de usuario, aunque en la API se utiliza el término "actividad").

Determinadas operaciones de usuario actúan como puntos desencadenantes para la habilitación de una actividad. Por ejemplo, la creación de un proyecto Java puede desencadenar la habilitación de la actividad de desarrollo Java. De ese modo, los usuarios se exponen a la función nueva cuando la necesitan y obtienen gradualmente información acerca de las actividades disponibles y cómo afectan a la UI. Cuando un usuario inicia por primera vez la plataforma, es aconsejable inhabilitar cuantas actividades sea posible a fin de que la aplicación sea lo más simple posible. Las elecciones efectuadas en la página de bienvenida pueden ayudar a determinar qué actividades deben habilitarse.

Actividades y perspectivas

En la sección Perspectivas hemos visto cómo se utilizan las perspectivas para organizar diseños de vistas y conjuntos de acciones diferentes en tareas. ¿Por qué necesitamos actividades? Aunque las perspectivas y actividades definen tipos de tareas similares, la diferencia principal estriba en cómo se asocian con ellas las contribuciones de UI de un conector. Las contribuciones de UI se asocian con las perspectivas en la definición de extensión de la contribución. Es decir, un conector es el encargado de determinar a qué perspectivas pertenecen sus vistas y conjuntos de acciones. Los conectores también pueden definir sus propias perspectivas. Incluso cuando una perspectiva no está activa, el usuario puede acceder a las vistas y acciones asociadas con ella mediante mandatos tales como Mostrar vista.

Las actividades representan un nivel de organización superior. Las contribuciones de UI individuales no tienen conocimiento de las actividades y no hacen referencia a ellas en sus definiciones de extensión. En lugar de ello, se espera que las actividades se configuren a un nivel superior, como por ejemplo en la integración/configuración de la plataforma o en la instalación del producto. Generalmente, los conectores individuales no definen actividades nuevas, a menos que el conector sea un conector a nivel de sistemas definido por un integrador de sistemas. En un caso típico, un integrador de sistemas determina cómo se agrupan las funciones en actividades y cuáles se habilitan por omisión. Las actividades se asocian con contribuciones de UI mediante enlaces de patrón de actividad, patrones que se comparan con el ID de las contribuciones de UI efectuadas por los conectores. Un ejemplo ayudará a ilustrar estos conceptos.

Definir una actividad

Las actividades se definen mediante el punto de extensión org.eclipse.ui.activities. Examinemos una versión simplificada de la forma en que el conector del SDK de Eclipse define dos actividades: una para desarrollar software Java y otra para desarrollar conectores:

<extension
	point="org.eclipse.ui.activities">
	<activity
		name="Actividad Java"
		description="Desarrollar software Java"
		id="org.eclipse.javaDevelopment">
	</activity>
	
	<activity
		name="Actividad de conector"
		description="Desarrollar conectores de Eclipse"
		id="org.eclipse.plugInDevelopment">
	</activity>
	...

Las actividades reciben un nombre y una descripción que el usuario puede visualizar al habilitar o inhabilitar actividades; el usuario también puede visualizar información relativa a una actividad. El ID de la actividad se utiliza al definir enlaces de patrón u otras relaciones entre actividades. Por ejemplo, podemos decidir que una actividad requiere otra actividad.

<activityRequirementBinding
	activityId="org.eclipse.plugInDevelopment"
	requiredActivityId="org.eclipse.javaDevelopment">
</activityRequirementBinding>

El enlace requisito indica que la actividad de desarrollo de conector sólo puede habilitarse cuando se habilita la actividad de desarrollo Java. También pueden enlazarse actividades relacionadas en categorías, que se muestran al usuario cuando éste trabaja con las actividades.

         <category
	name="Development"
	description="Desarrollo de software"
	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>

La categoría agrupa las actividades de desarrollo relacionadas. Esta categoría se muestra cuando el usuario configura actividades manualmente.

Enlazar actividades con contribuciones de UI

Las actividades de asocian con contribuciones de UI mediante la comparación de patrones. La comparación de patrones utilizada en los enlaces de patrón de actividad sigue las normas descritas en el paquete java.util.regex para las expresiones regulares. Los patrones utilizados por el entorno de trabajo se componen de dos partes. La primera parte utiliza el identificador del conector que añade la extensión de UI. La segunda parte es el ID utilizado por el propio conector al definir la contribución (que puede o no incluir también el ID de conector como parte del identificador). Se utiliza el siguiente formato:

identificador-conector + "/" + identificador-local
Por ejemplo, el siguiente enlace de patrón de actividad indica que una contribución de UI de cualquier ID de conector JDT (org.eclipse.jdt.*) se asocia con la actividad de desarrollo Java independientemente de su identificador local (.*).
<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\..*/.*">
</activityPatternBinding>
El próximo enlace es más específico. Indica que la contribución denominada javanature definida en el núcleo de JDT (org.eclipse.jdt.core) se asocia con la actividad de desarrollo Java.
<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\.core/javanature">
</activityPatternBinding>
Como puede observar, los enlaces de patrón de actividad pueden utilizarse para asociar grandes grupos de contribuciones con una actividad determinada o para asociar contribuciones muy específicas con una actividad. Las siguientes contribuciones resultan afectadas por las actividades:

El convenio utilizado por el entorno de trabajo (ID de conector + ID local) permite un enlace fácil con los conectores que no siguen necesariamente la práctica de denominación de prefijar sus identificadores de contribución de UI con el identificador de su conector. Los conectores que interaccionan directamente con la API de actividad pueden utilizar su propio formato para identificar contribuciones y para la comparación de patrones entre dichos nombres.

Enlazar actividades con contribuciones de ayuda

Las actividades se asocian con contribuciones de ayuda mediante el mismo esquema de comparación de patrones utilizado para las contribuciones de UI. La segunda parte del identificador (el identificador local) indica el nombre del archivo de tabla de contenido (TOC). Por ejemplo, el siguiente enlace de patrón de actividad asocia todos los archivos TOC añadidos por los conectores JDT (org.eclipse.jdt.*) con la actividad de desarrollo Java:

<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\..*/.*">
</activityPatternBinding>
Cuando la actividad de desarrollo Java se inhabilite, los libros de ayuda añadidos por los conectores JDT o los sublibros (archivos TOC enlazados a o por libros JDT) no se mostrarán en la UI de ayuda, aunque los haya añadido otro conector. Los temas definidos en estos libros tampoco se mostrarán en los resultados de búsqueda. En caso de que los TOC de JDT no se hayan visualizado como TOC primarios, sino que se hayan enlazado desde otro TOC para aparecer como subárboles de un libro, el hecho de inhabilitar la actividad JDT tiene el efecto de ocultar los subárboles. El libro que los contiene parecerá definir menos temas en la UI.

Utilizando un enlace más específico, es posible asociar actividades con TOC seleccionados de conectores que añaden varios TOC al sistema de ayuda. Por ejemplo, el siguiente enlace de patrón de actividad asocia el TOC "Examples" con la actividad de ejemplos de desarrollo Java.

<activityPatternBinding
	activityId="org.eclipse.javaDevelopmentExamples"
	pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml">
</activityPatternBinding>
Con un enlace de patrón de este tipo, al inhabilitar la actividad de ejemplos de desarrollo Java se ocultará la sección "Examples" del libro "JDT Plug-in Developer Guide".

Utilizar la API de actividades

El soporte de actividades del entorno de trabajo incluye una API para trabajar con las actividades definidas y cambiar su estado de habilitación. La mayoría de conectores no están concernidos por esta API, pero resulta de utilidad al utilizar una función que permite al usuario trabajar con actividades o al implementar los puntos desencadenantes que habilitan una actividad determinada. Se presupone que cualquier conector que manipule actividades a través de la API tiene un conocimiento suficiente de las modalidades de configuración de las actividades para un producto determinado. Por ejemplo, el propio entorno de trabajo utiliza la API para desencadenar la habilitación de actividades tales como el desarrollo Java. Examinaremos cómo utiliza el entorno de trabajo la API de actividades genéricas para implementar desencadenantes.

El concentrador de roda la actividad del entorno de trabajo es IWorkbenchActivitySupport. El soporte de actividades trabajo en combinación con un IActivityManager. Los conectores pueden obtener la instancia de soporte de actividades del entorno de trabajo, y el gestor de actividades desde allí.

IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
IActivityManager activityManager = workbenchActivitySupport.getActivityManager();
El siguiente fragmento de código habilita la actividad de desarrollo Java (si aún no está habilitada). Muestra una versión simplificada de un desencadenante.
...
//el usuario ha hecho algo relacionado con Java. Habilitar la actividad Java.
Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());
if (enabledIds.add("org.eclipse.javaDevelopment"))
	workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);

IActivityManager también define un protocolo para obtener todos los ID de categoría y actividad definidos y para obtener la IActivity o ICategory asociada a un ID determinado. Estos objetos pueden utilizarse para cruzar la definición de una actividad o categoría en la API, como por ejemplo para obtener los enlaces de patrón o de requisito. Pueden registrarse escuchas en el gestor de actividades o en las propias categorías o actividades para detectar los cambios efectuados en la definición de una actividad determinada o en el propio gestor de actividades. Consulte el paquete org.eclipse.ui.activities para obtener más información.