ASE

Descripción

La principal novedad en el desarrollo de AFRYCA se produce con el lanzamiento de ASE en la versión 3 de AFRYCA. ASE, acrónimo de AFRYCA Scripting Environment, es un entorno integrado para el desarrollo y ejecución de scripts en diversos lenguajes de programación.

ASE está construido sobre la especificación JSR 223 y emplea el engine Nashorn de JavaScript. El entorno ofrece una consola en la que ejecutar scripts JavaScript desde los que es posible acceder a las datos de la aplicación e incluso modificar las diferentes clases que conforman AFRYCA en tiempo de ejecución, permitiendo de este modo hacer casi cualquier cosa que se desee.

Además, el entorno despliega a su vez diferentes engines que permiten programar en Groovy, Scala, Ruby, Python y Lua. Adicionalmente, ofrece facilidades para utilizar el entorno estadístico R como un engine de ASE más.

Features

La funcionalidad se proporciona desde las siguientes features:

afryca.ase.feature

Plug-ins para la funcionalidad básica de ASE

  • Plug-ins incluidos:
    • afryca.ase

afryca.ase.gui.feature

Plug-ins para la funcionalidad gráfica de ASE

  • Plug-ins incluidos:
    • afryca.ase.gui
    • afryca.parametervalueconverterhelper
    • org.eclipse.wb.swt
  • Features incluidas:
    • afryca.ase.feature

afryca.ase.engine.default.feature

Plug-ins que añaden engines a ASE

  • Plug-ins incluidos:
    • afryca.ase.engine.Groovy
    • afryca.ase.engine.JRuby
    • afryca.ase.engine.Jython
    • afryca.ase.engine.LuaJ
    • afryca.ase.engine.R
    • afryca.ase.engine.R.gui
    • afryca.ase.engine.Scala
    • Jython
    • org.codehaus.groovy
    • org.eclipse.wb.swt
    • org.jruby
    • org.luaj
    • scala
  • Features incluidas:
    • afryca.ase.gui.feature

Plug-ins

Los plug-ins desarrollados de forma específica para proveer su funcionalidad son los siguientes:

afryca.ase

Funcionalidad básica de ASE

  • Dependencias:
    • afryca.parametervalueconverterhelper
    • afryca.workspace.service.events
    • org.eclipse.core.runtime
    • org.eclipse.core.commands
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.model.workbench
    • org.apache.commons.io
    • org.eclipse.ui
    • org.eclipse.e4.core.di.extensions

afryca.ase.gui

Funcionalidad gráfica de ASE

  • Dependencias:
    • afryca.ase
    • afryca.parametervalueconverterhelper
    • org.eclipse.wb.swt
    • org.eclipse.core.runtime
    • org.eclipse.core.expressions
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.commands
    • org.eclipse.e4.ui.di
    • org.eclipse.e4.ui.services
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.model.workbench
    • org.eclipse.jface
    • org.eclipse.ui

afryca.ase.engine.Groovy

Engine para Groovy

  • Dependencias:
    • org.codehaus.groovy
    • afryca.ase
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.model.workbench

afryca.ase.engine.JRuby

Engine para Ruby

  • Dependencias:
    • org.jruby
    • afryca.ase
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.model.workbench

afryca.ase.engine.Jython

Engine para Python

  • Dependencias:
    • Jython
    • afryca.ase
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.model.workbench

afryca.ase.engine.LuaJ

Engine para Lua

  • Dependencias:
    • org.luaj
    • afryca.ase
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.model.workbench

afryca.ase.engine.R

Engine para R

  • Dependencias:
    • afryca.ase
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.model.workbench

afryca.ase.engine.R

Funcionalidad gráfica para el engine R

  • Dependencias:
    • afryca.ase.engine.R
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.di.extensions
    • org.eclipse.e4.ui.services
    • org.eclipse.jface
    • org.eclipse.e4.ui.model.workbench
    • afryca.ase
    • org.eclipse.wb.swt
    • org.eclipse.e4.ui.di

afryca.ase.engine.Scala

Engine para Scala

  • Dependencias:
    • scala
    • afryca.ase
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.model.workbench

afryca.rcp.ase.context

Ejecución de ASE en el contexto de la aplicación AFRYCA y así acceder a toda su funcionalidad. Es añadido desde la feature de la aplicación RCP.

  • Dependencias:
    • afryca.ase
    • afryca.birt
    • afryca.simulation
    • afryca.workspace
    • org.apache.commons.math3
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.di.extensions
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.ui.di
    • org.eclipse.e4.ui.model.workbench

Estructura

La utilidad de los diferentes paquetes y clases que conforman los plug-ins es la siguiente:

afryca.ase

  • afryca.ase
    • Binding: Modelo para representar el enlace de una variable.
    • ExecutionBuilder: Constructor de ejecuciones en ASE.
    • Fragment: Modelo para representar un fragmento de código.
    • FragmentBuilder: Constructor para la ejecución de fragmentos en ASE.
    • Function: Modelo para representar una función.
    • IASEContext: Interfaz del contexto de ejecución de ASE. Debe ser inyectada por una función contextual con acceso a la aplicación principal (ver afryca.rcp.ase.context).
    • ICategory: Interfaz para la definición de categorías de scripts.
    • IScript: Interfaz para la definición de scripts categorizables.
    • Module: Modelo para representar un módulo.
    • ModuleBinding: Modelo para representar un enlace a módulo.
    • ParametersBuilder: Constructor para la definición de los parámetros de una ejecución.
    • Repository: Modelo para representar un repositorio.
    • RunnableFragment: Modelo para la definición de fragmentos ejecutables en el contexto de ASE.
    • RunnableScript: Modelo para la definición de scripts ejecutables en el contexto de ASE.
    • Snippet: Modelo para la representación de un snippet de código.
    • Variable: Modelo para representar una variable.
  • afryca.ase.command
    • EvalScript: Controlador para la evaluación de un script.
    • OpenCategory: Controlador para la lectura de una categoría de scripts.
    • OpenModuleBinding: Controlador para la lectura de un enlace a módulo.
    • OpenScript: Controlador para la lectura de un script categorizable.
    • RemoveVariable: Controlador para la eliminación de una variable.
    • SaveCategory: Controlador para el almacenamiento de una categoría de scripts.
    • SaveModuleBinding: Controlador para el almacenamiento de un enlace a módulo.
    • SaveScript: Controlador para el almacenamiento de un script categorizable.
  • afryca.ase.command.parameter
    • ​CategoryParameterValueConverter: Conversor de parámetro Category.
    • ​CategoryParameterValueConverterHelper: Asistente para el conversor de parámetro Category.
    • ​FunctionParameterValueConverter: Conversor de parámetro Function.
    • ​FunctionParameterValueConverterHelper: Asistente para el conversor de parámetro Function.
    • ​ModuleBindingParameterValueConverter: Conversor de parámetro ModuleBinding.
    • ​ModuleBindingParameterValueConverterHelper: Asistente para el conversor de parámetro ModuleBinding.
    • ​ModuleValueConverter: Conversor de parámetro Module.
    • ​ModuleValueConverterHelper: Asistente para el conversor de parámetro Module.
    • ​RepositoryParameterValueConverter: Conversor de parámetro Repository.
    • ​RepositoryParameterValueConverterHelper: Asistente para el conversor de parámetro Repository.
    • ​ScriptParameterValueConverter: Conversor de parámetro Script.
    • ​ScriptParameterValueConverterHelper: Asistente para el conversor de parámetro Script.
    • ​SnippetParameterValueConverter: Conversor de parámetro Snippet.
    • ​SnippetParameterValueConverterHelper: Asistente para el conversor de parámetro Snippet.
  • afryca.ase.definition
    • PreloadedClass: Definición de elementos del punto de extensión de clases precargadas.
  • afryca.ase.engine
    • IEngine: Interfaz a implementar por los engines de ASE.
    • OSGiScriptEngine: Adaptación de la especificación JSR 223 a OSGi.
    • OSGiScriptEngineFactory: Adaptación de ScriptEngineFactory a OSGi.
    • OSGiScriptEngineManager: Adaptación de ScriptEngineManager a OSGi.
  • afryca.ase.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.ase.service
    • IASEService: Interfaz del servicio ASE.​
  • afryca.ase.service.events
    • IASEServiceEvents: Definición de eventos lanzados por el servicio ASE a través del broker de E4.​
  • afryca.ase.service.provider
    • ASEServiceContextFunction: Función contextual empleada para instanciar el servicio ASE cuando se solicita su inyección.
    • ASEServiceProvider: Proveedor del servicio ASE.
  • afryca.ase.service.provider.job
    • ExecuteModuleBindingScriptsJob: Trabajo eclipse para la ejecución de los scripts de un enlace a módulo.

afryca.ase.gui

  • afryca.ase.gui.addon
    • ToolItemVisibilityAddon: Add-on para la gestión de la visibilidad de los toolitems en función de la perspectiva seleccionada.
  • afryca.ase.gui.command
    • ClearEditor: Controlador para limpiar el contenido del editor de la consola.
    • EditFunction: Controlador para editar una función.
    • EditModule: Controlador para editar un módulo.
    • EditModuleBinding: Controlador para editar un enlace a módulo.
    • EditRepository: Controlador para editar un repositorio.
    • EditSnippet: Controlador para editar un snippet.
    • EvalEditor: Controlador para evaluar el contenido del editor de la consola.
    • GetBinding: Controlador para la obtención del binding seleccionado.
    • GetEditor: Controlador para la obtención del editor.
    • GetEval: Controlador para la obtención de la evaluación seleccionada.
    • GetPreloadedElement: Controlador para la obtención del elemento precargado seleccionado.
    • GetVariable: Controlador para la obtención de la variable seleccionada.
    • NewFunction: Controlador para crear una nueva función solicitando sus valores.
    • NewModule: Controlador para crear un nuevo módulo solicitando sus valores.
    • NewModuleBinding: Controlador para crear un nuevo enlace a módulo solicitando sus valores.
    • NewRepository: Controlador para crear un nuevo repositorio solicitando sus valores.
    • NewSnippet: Controlador para crear un nuevo snippet solicitando sus valores.
    • PasteBinding: Controlador para pegar en enlace seleccionado en la consola.
    • PasteEval: Controlador para pegar la evaluación seleccionada en la consola.
    • PasteFunction: Controlador para pegar la función seleccionada en la consola.
    • PasteInEditor: Controlador para pegar un elemento en la consola.
    • PasteInstruction: Controlador para pegar una instrucción generada a partir de un elemento precargado en la consola.
    • PastePreloadedElement: Controlador para pegar el elemento precargado seleccionado en la consola.
    • PasteSnippet: Controlador para pegar el snippet seleccionado en la consola.
    • PasteVariable: Controlador para pegar la variable seleccionada en la consola.
    • ReadEditor: Controlador para la obtención del contenido de la consola.
    • RemoveVariable: Controlador para la eliminación de una variable.
    • ReplaceEditorContent: Controlador para reemplazar el contenido de la consola con un nuevo valor.
    • RaplaceEditorContentWithBinding: Controlador para reemplazar el contenido de la consola con el enlace seleccionado.
    • RaplaceEditorContentWithEval: Controlador para reemplazar el contenido de la consola con la evaluación seleccionada.
    • RaplaceEditorContentWithFunction: Controlador para reemplazar el contenido de la consola con la función seleccionada.
    • RaplaceEditorContentWithInstruction: Controlador para reemplazar el contenido de la consola con la instrucción generada a partir del elemento precargado seleccionado.
    • RaplaceEditorContentWithPreloadedElement: Controlador para reemplazar el contenido de la consola con el elemento precargado seleccionado.
    • RaplaceEditorContentWithSnippet: Controlador para reemplazar el contenido de la consola con el snippet seleccionado.
    • RaplaceEditorContentWithVariable: Controlador para reemplazar el contenido de la consola con la variable seleccionada.
    • SaveAsSnippet: Controlador para guardar un fragmento de código como un snippet.
  • afryca.ase.gui.command.parameter
    • ​BooleanParameterValueConverter: Conversor de parámetro boolean.
    • ​BooleanParameterValueConverterHelper: Asistente para el conversor de parámetro booleano.
    • ​StringSetParameterValueConverter: Conversor de parámetro para un conjunto de strings.
    • ​StringSetParameterValueConverterHelper: Asistente para el conversor de parámetro de un conjunto de strings.
  • afryca.ase.gui.composite
    • IModuleBindingTableViewerContainer: Interfaz a implementar por un visor de tablas de enlaces a módulos.
    • JavaScriptEditor: Widget SWT para la edición de texto con resaltado de sintaxis JavaScript.
    • JavaScriptLineStyler: Listener para el resaltado de sintaxis JavaScript.
    • ModuleBindingsComposite: Composite para la visualización de un conjunto de tablas de enlaces a módulos.
    • ModuleBindingsTableViewer: Composite para la visualización de una tabla de enlaces a módulos.
    • OutputLineStyler: Widget SWT para la visualización de los resultados de ASE.
    • OutputStyledText: Listener para el resaltado de los valores de un OutputLineStyler. 
  • afryca.ase.gui.composite.job
    • ExecuteModuleBindingJob: Trabajo eclipse para la ejecución de un enlace a módulo.
  • afryca.ase.gui.composite.provider
    • ModuleBindingContentProvider: Proveedor de contenido de enlaces a módulos.
    • ModuleBindingFunctionNameColumnLabelProvider: Proveedor de etiqueta de nombre de función en enlace a módulo.
    • ModuleBindingFunctionValueColumnLabelProvider: Proveedor de etiqueta de valor de función en enlace a módulo.
  • afryca.ase.gui.dialog
    • BindingDialog: Ventana de diálogo para la edición de un enlace de un enlace a módulo.
    • FunctionDialog: Ventana de diálogo para la edición de una función.
    • ModuleBindingDialog: Ventana de diálogo para la edición de un enlace a módulo.
    • ModuleDialog: Ventana de diálogo para la edición de un módulo.
    • ParameterDialog: Ventana de diálogo para la edición de un parámetro de un módulo.
    • RepositoryDialog: Ventana de diálogo para la edición de un repositorio.
  • afryca.ase.gui.dialog.provider
    • BindingsColumnLabelProvider: Proveedor de etiqueta de enlaces.
    • BindingsContentProvider: Proveedor de contenido de enlaces.
    • InputContentProvider:  Proveedor de contenido para un valor de entrada.
    • InputParameterColumnLabelProvider: Proveedor de etiqueta para un parámetro de entrada.
    • InputValueColumnLabelProvider: Proveedor de etiqueta para el valor de un parámetro de entrada.
  • afryca.ase.gui.icons: Rutas localizadas a los iconos usados en diferentes idiomas.
  • afryca.ase.gui.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.ase.gui.part
    • BindingsPart: Parte para la gestión de los enlaces del entorno.
    • ConsolePart: Parte para la interacción con ASE empleando fragmentos de código.
    • EvalsPart: Para para la gestión de las evaluaciones realizadas en la consola.
    • IASEEditor: Interfaz a implementar por un editor de ASE.
    • PreloadedClassesPart: Parte para la gestión de las clases precargadas en ASE.
    • ScriptsPart: Parte abstracta a implementar para la gestión de scripts categorizables.
    • VariablesPart: Parte para la gestión de las variables del entorno.
  • afryca.ase.gui.part.provider
    • BindingNameColumnLabelProvider: Proveedor de etiqueta de nombre de enlace.
    • BindingsContentProvider: Proveedor de contenido de enlaces.
    • BindingValueColumnLabelProvider: Proveedor de etiqueta de valor de enlace.
    • EvalLabelProvider: Proveedor de etiqueta de evaluación.
    • EvalsContentProvider: Proveedor de contenido de evaluaciones.
    • PreloadedClassesContentProvider: Proveedor de contenido de clases precargadas.
    • ProloadedClassesLabelProvider: Proveedor de etiqueta de clases precargadas.
    • ScriptsContentProvider: Proveedor de contenido de scripts categorizable.
    • ScriptsLabelProvider: Proveedor de etiquetas de scripts categorizables.
    • VariableNameColumnLabelProvider: Proveedor de etiqueta de nombre de variable.
    • VariablesContentProvider: Proveedor de contenido de variables.
    • VariableValueColumnLabelProvider: Proveedor de etiqueta de valor de variable.

afryca.ase.engine.Groovy

  • afryca.ase.engine.Groovy
    • Groovy: Engine para ASE.
  • afryca.ase.engine.Groovy.addon
    • GroovyEngineAddon: Add-on para la carga en segundo plano del engine al iniciar la aplicación. Dentro del trabajo solicita la inyección del proveedor del engine, para lo cual es invocada la función contextual e instanciada la implementación por defecto del proveedor.
  • afryca.ase.engine.Groovy.provider
    • IGroovyEngineProvider: Proveedor de engine.
  • afryca.ase.engine.Groovy.provider.internal
    • GroovyEngineDefaultProvider: Implementación por defecto del proveedor del engine. 
    • GroovyEngineProviderContextFunction: Función contextual para la inyección del proveedor del engine. Configurada en OSGI-INF/groovy_engine_provider_context_function.xml.

afryca.ase.engine.JRuby

  •  afryca.ase.engine.JRuby 
    • JRuby: Engine para ASE.
  • afryca.ase.engine.JRuby.addon
    • JRubyEngineAddon: Add-on para la carga en segundo plano del engine al iniciar la aplicación. Dentro del trabajo solicita la inyección del proveedor del engine, para lo cual es invocada la función contextual e instanciada la implementación por defecto del proveedor.
  • afryca.ase.engine.JRuby.provider
    • IJRubyEngineProvider: Proveedor de engine.
  • afryca.ase.engine.JRuby.provider.internal
    • JRubyEngineDefaultProvider: Implementación por defecto del proveedor del engine. 
    • JRubyEngineProviderContextFunction: Función contextual para la inyección del proveedor del engine. Configurada en OSGI-INF/jruby_engine_provider_context_function.xml.

afryca.ase.engine.Jython

  • afryca.ase.engine.Jython
    • Jython: Engine para ASE.
  • afryca.ase.engine.Jython.addon
    • JythonEngineAddon: Add-on para la carga en segundo plano del engine al iniciar la aplicación. Dentro del trabajo solicita la inyección del proveedor del engine, para lo cual es invocada la función contextual e instanciada la implementación por defecto del proveedor.
  • afryca.ase.engine.Jython.provider
    • IJythonEngineProvider: Proveedor de engine.
  • afryca.ase.engine.Jython.provider.internal
    • JythonEngineDefaultProvider: Implementación por defecto del proveedor del engine. 
    • JythonEngineProviderContextFunction: Función contextual para la inyección del proveedor del engine. Configurada en OSGI-INF/jython_engine_provider_context_function.xml.

afryca.ase.engine.LuaJ

  • afryca.ase.engine.LuaJ
    • LuaJ: Engine para ASE.
  • afryca.ase.engine.LuaJ.addon
    • LuaJEngineAddon: Add-on para la carga en segundo plano del engine al iniciar la aplicación. Dentro del trabajo solicita la inyección del proveedor del engine, para lo cual es invocada la función contextual e instanciada la implementación por defecto del proveedor.
  • afryca.ase.engine.LuaJ.provider
    • ILuaJEngineProvider: Proveedor de engine.
  • afryca.ase.engine.LuaJ.provider.internal
    • LuaJEngineDefaultProvider: Implementación por defecto del proveedor del engine. 
    • LuaJEngineProviderContextFunction: Función contextual para la inyección del proveedor del engine. Configurada en OSGI-INF/luaj_engine_provider_context_function.xml.

afryca.ase.engine.R

  • afryca.ase.engine.R
    • R: Engine para ASE.
  • afryca.ase.engine.R.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.ase.engine.R.provider
    • IREngineProvider: Proveedor de engine.
  • afryca.ase.engine.R.provider.internal
    • REngineDefaultProvider: Implementación por defecto del proveedor del engine. 
    • REngineProviderContextFunction: Función contextual para la inyección del proveedor del engine. Configurada en OSGI-INF/rengine_provider_context_function.xml.

afryca.ase.engine.R.gui

  • afryca.ase.engine.R.gui.addon
    • REngineAddon: Add-on para la carga en segundo plano del engine al iniciar la aplicación. Dentro del trabajo solicita la inyección del proveedor del engine, para lo cual es invocada la función contextual e instanciada la implementación por defecto del proveedor.
  • afryca.ase.engine.R.gui.command
    • ModifyREnginePreferences: Controlador para la modificación de las preferencias de R.
    • ShowRStatus: Controlador para la visualización del estado de R.
  • afryca.ase.engine.R.gui.dialog
    • REnginePreferencesDialog: Cuadro de diálogo para la modificación de las preferencias de R.
  • afryca.ase.engine.icons: Rutas localizadas a los iconos usados en diferentes idiomas.
  • afryca.ase.engine.R.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.ase.engine.R.gi.prefrences
    • PreferenceConstants: Constantes usadas para las preferencias establecidas en el archivo 'preferences.ini'.

afryca.ase.engine.Scala

  • afryca.ase.engines.Scala
    • Scala: Engine para ASE.
  • afryca.ase.engine.Scala.addon
    • ScalaEngineAddon: Add-on para la carga en segundo plano del engine al iniciar la aplicación. Dentro del trabajo solicita la inyección del proveedor del engine, para lo cual es invocada la función contextual e instanciada la implementación por defecto del proveedor.
  • afryca.ase.engine.Scala.provider
    • IScalaEngineProvider: Proveedor de engine.
  • afryca.ase.engine.Scala.provider.internal
    • ScalaEngineDefaultProvider: Implementación por defecto del proveedor del engine. 
    • ScalaEngineProviderContextFunction: Función contextual para la inyección del proveedor del engine. Configurada en OSGI-INF/luaj_engine_provider_context_function.xml.

afryca.rcp.ase.context

  • afryca.rcp.ase.context
    • ASEContextContextFunction: Función contextual para la inyección del contexto de ASE definido por AFRYCA. Configurada en OSGI-INF/ase_context_context_function.xml.
    • ASEContextProvider: Implementación por defecto del proveedor de contexto ASE.
  • afryca.rcp.ase.context.definition
    • EBinding: Enumerado de los elementos de AFRYCA enlazados en ASE.
    • EComparableFunction: Enumerado de las funciones de comparación empleadas para comparar enlaces ASE.
    • EReadableFunction: Enumerado de las funciones empleadas para leer enlaces ASE.
  • afryca.rcp.ase.context.l10n: Mensajes de localización en diferentes idiomas.

Add-ons

La función de los add-ons proporcionados por los plug-ins se indica seguidamente:

afryca.asi.gui.addon.ToolItemVisibilityAddon

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.addon.ToolItemVisibilityAddon. Registra los cambios de perspectiva para mostrar únicamente en la toolbar de la aplicación los comandos de ASE cuando estos pueden ser de utilidad para el usuario.

afryca.asi.engine.Groovy.addon.GroovyEngineAddon

Definido en el plug-in afryca.ase.engine.Groovy e implementado por la clase afryca.ase.engine.Groovy.addon.GroovyEngineAddon. Carga en segundo plano del engine al iniciar la aplicación.

afryca.asi.engine.JRuby.addon.JRubyEngineAddon

Definido en el plug-in afryca.ase.engine.JRuby e implementado por la clase afryca.ase.engine.JRuby.addon.JRubyEngineAddon. Carga en segundo plano del engine al iniciar la aplicación.

afryca.asi.engine.Jython.addon.JythonEngineAddon

Definido en el plug-in afryca.ase.engine.Jython e implementado por la clase afryca.ase.engine.Jython.addon.JythonEngineAddon. Carga en segundo plano del engine al iniciar la aplicación.

afryca.asi.engine.LuaJ.addon.LuaJEngineAddon

Definido en el plug-in afryca.ase.engine.LuaJ e implementado por la clase afryca.ase.engine.LuaJ.addon.LuaJEngineAddon. Carga en segundo plano del engine al iniciar la aplicación.

afryca.asi.engine.R.gui.addon.REngineAddon

Definido en el plug-in afryca.ase.engine.R.gui e implementado por la clase afryca.ase.engine.R.gui.addon.REngineAddon. Carga en segundo plano del engine al iniciar la aplicación.

afryca.asi.engine.Scala.addon.ScalaEngineAddon

Definido en el plug-in afryca.ase.engine.Scala e implementado por la clase afryca.ase.engine.Scala.addon.ScalaEngineAddon. Carga en segundo plano del engine al iniciar la aplicación.

Puntos de extensión

Los puntos de extensión ofrecidos por los plug-ins se describen a continuación:

afryca.ase.preloadedclass

El plug-in afryca.ase define el punto de extensión afryca.preloadedclass con el esquema definido en el archivo schema/afryca.preloadedclass.exsd. El punto de extensión permite definir clases Java a precargar en los scripts ASE.

  • Definición:
    • Extensión
      • (1 - *) PreloadedClass.
    • PreloadedClass (asociado a afryca.ase.definition.PreloadedClass)
      • class: Clase a precargar.

Servicio

El plug-in afryca.ase define un servicio declarativo OSGi para ASE. El servicio se define en el archivo OSGI-INF/ase_service_context_function.xml y hace uso de una función contextual eclipse, la cual realiza una instanciación de la clase afryca.ase.service.provider.ASEServiceContextFunction cuando se solicita la inyección del servicio cuya interfaz define afryca.ase.service.IASEService.

  • Interfaz del servicio
    • groupUpdatesActive(boolean) // Cambio manual de indicación de actualización grupal. No usar fuera de contexto ASE.
    • groupUpdatesStates() : boolean // Información de estado de actualización grupal.
    • getEngines() : Map<String, IEngine> // Obtención de los engines ASE.
    • addEngine(IEngine) // Adición de un engine ASE.
    • getRepositories() : Map<String, Repository> // Obtención de los repositorios del workspace.
    • getRepositoryByName(String) : Repository // Devuelve un repositorio dado su nombre.
    • getSnippets() : Map<String, Snippet> // Obtención de los snippets del workspace.
    • getSnippetByName(String) : Snippet // Obtención de un snippet dado su nombre.
    • getRepositorySnippets(String) : List<String> // Obtención del listado de los nombres de los snippets de un repositorio.
    • getModules() : Map<String, Module> // Obtención de los módulos del workspace.
    • getModuleByName(String) : Module // Obtención de un módulo dado su nombre.
    • getModuleFunctions(String) : List<String> // Obtención del listado de los nombres de las funciones de un módulo.
    • getFunctions() : Map<String, Function> // Obtención de las funciones del workspace.
    • getFunctionByName(String) : Function // Obtención de una función dado su nombre.
    • getModuleBindings() : Map<String, ModuleBinding> // Obtención de los enlaces a módulos del workspace.
    • getModuleBindingByName(String) : ModuleBinding // Obtención de un enlace a módulo dado su nombre.
    • setSelectedRepository(Repository) // Establecimiento del repositorio seleccionado.
    • getSelectedRepository() : Repository // Obtención del repositorio seleccionado.
    • setSelectedSnippet(Snippet) // Establecimiento del snippet seleccionado.
    • getSelectedSnippet() : Snippet // Obtención del snippet seleccionado.
    • setSelectedModule(Module) // Establecimiento del módulo seleccionado.
    • getSelectedModule() : Module // Obtención del módulo seleccionado.
    • setSelectedFunction(Function) // Establecimiento de la función seleccionada.
    • getSelectedFunction() : Function // Obtención de la función seleccionada.
    • setSelectedModuleBinding(ModuleBinding) // Establecimiento del enlace a módulo seleccionado.
    • getSelectedModuleBinding() : ModuleBinding // Obtención del enlace a módulo seleccionado.
    • getPreloadedClasses() : List<Class<?>> // Obtención del listado de clases precargadas.
    • getBindings() : Map<String, Binding> // Obtención de los enlaces a ASE.
    • bind(Binding) // Establecimiento de un enlace a ASE.
    • getLibraries() : Map<String, Object> // Obtención de las bibliotecas de ASE.
    • getVariables() : Map<String, Variable> // Obtención de las variables de ASE.
    • addVariable(Variable) // Establecimiento de una variable en ASE.
    • removeVariable(Variable) // Eliminación de una variable de ASE.
    • createFragmentBuilder() : FragmentBuilder // Creación de un constructor de fragmentos para la ejecución en ASE.
    • eval(Fragment) : RunnableFragment // Evaluación de un fragmento en ASE.
    • eval(IScript) : RunnableScript // Evaluación de un script en ASE.
    • evalCode(String, String) : Object // Evaluación de un código en un engine ASE indicando el nombre del engine.
    • evalCode(Object, String) : Object // Evaluación de un código en un engine ASE indicando el engine.
    • evalSnippet(String, String) : Object // Evaluación de un snippet en un engine ASE indicando el nombre del engine y el nombre del snippet.
    • evalSnippet(Object, String) : Object // Evaluación de un snippet en un engine ASE indicando el engine y el nombre del snippet.
    • simulateFunction(String) : RunnableScript // Simulación de una función dado su nombre.
    • simulateModule(String) : Map<String, RunnableScript> // Simulación de todas las funciones de un módulo dado su nombre.
    • createExecutionBuilder() : ExecutionBuilder // Creación de un constructor de ejecuciones.
    • executeFunction(String, String, Map<String, Object>) : RunnableScript // Ejecución de una función dado su nombre, sus parámetros y las variables de la aplicación.
    • executeFunction(String, String) : RunableScript // Ejecución de una función dado su nombre y sus parámetros.
    • executeModule(String, String) : Map<String, RunnableScript> // Ejecución de todas las funciones de un módulo dado su nombre y sus parámetros.
    • executeModule(String, String, Map<String, Object>) : Map<String, RunnableScript> // Ejecución de todas las funciones de un módulo dado su nombre, sus parámetros y las variables de la aplicación.
    • generateFunctionCode(String) : String // Generación del código empleado para invocar una función dado su nombre.
    • loadSnippet(String) : Object // Carga de un snippet en ASE dado su nombre.
    • getModuleBindingStates() : Map<String, Boolean> // Información sobre las condiciones para la ejecución de los enlaces a módulos.
    • executeModuleBinding(String) : Map<String, Optional<RunnableScript>> // Ejecución de un enlace a módulo dado su nombre.
    • abortModuleBindingExecution(String) // Cancelación de la ejecución de un enlace a módulo.

Broker

El servicio hace uso del broker de E4 para notificar de diversa información de interés.

  • Topics:
    • ASE // Raíz.
    • ASE/GROUP_UPDATES // Cambio de estado de actualización grupal.
    • ASE/ENGINE/NEW // Nuevo engine de ASE
    • ASE/PRELOADED_CLASS/UPDATED // Actualización de clases precargadas
    • ASE/BINDINGS/NEW // Nuevo enlace
    • ASE/BINDING/UPDATED // Actualización de enlace.
    • ASE/REPOSITORY/SELECTION // Actualización de repositorio seleccionado.
    • ASE/REPOSITORY/CODE // Actualización de repositorio.
    • ASE/SNIPPET/SELECTION // Actualización de snippet seleccionado.
    • ASE/SNIPPET/CODE // Actualización de snippet.
    • ASE/MODULE/SELECTION // Actualización de módulo seleccionado.
    • ASE/MODULE/CODE // Actualización de módulo.
    • ASE/FUNCTION/SELECTION // Actualización de función seleccionada.
    • ASE/FUNCTION/CODE // Actualización de función.
    • ASE/VARIABLE/NEW // Nueva variable.
    • ASE/VARIABLE/UPDATED // Variable actualizada.
    • ASE/VARIABLE/REMOVED // Variable eliminada.
    • ASE/LIBRARY/NEW // Biblioteca añadida.
    • ASE/LIBRARY/UDPATED // Biblioteca actualizada.
    • ASE/EVAL/NEW // Evaluación añadida.
    • ASE/MODULE_BINDING/SELECTION // Actualización de enlace a módulo seleccionado.
    • ASE/MODULE_BINDING/UPDATED // Actualización de enlace a módulo.

Comandos

Los comandos añadidos por los plug-ins son los siguientes: POR AQUÍ

afryca.ase.command.eval_script

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.EvalScript. Realiza la evaluación de un script categorizable.

afryca.ase.command.open_script

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.OpenScript. Realiza la lectura de un script categorizable.

afryca.ase.command.save_script

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.SaveScript. Realiza el almacenamiento de un script categorizable.

afryca.ase.command.open_category

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.OpenCategory. Realiza la lectura de una categoría de scripts.

afryca.ase.command.save_category

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.SaveCategory. Realiza el almacenamiento de una categoría de scripts.

afryca.ase.command.remove_variable

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.RemoveVariable. Realiza la eliminación de una variable.

afryca.ase.command.open_module_binding

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.OpenModuleBinding. Realiza la lectura de un enlace a módulo.

afryca.ase.command.save_module_binding

Definido en el plug-in afryca.ase e implementado por la clase afryca.ase.command.SaveModuleBinding. Realiza el almacenamiento de un enlace a módulo.

afryca.ase.gui.command.new_repository

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.NewRepository. Realiza la creación de un repositorio solicitando sus valores.

afryca.ase.gui.command.edit_repository

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.EditRepository. Realiza la edición de un repositorio.

afryca.ase.gui.command.read_editor

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReadEditor. Permite obtener el contenido del editor de la consola de ASE.

afryca.ase.gui.command.eval_editor

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.EvalEditor. Realiza la evaluación del editor de la consola de ASE.

afryca.ase.gui.command.paste_in_editor

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteInEditor. Pega un elemento en el editor de la consola de ASE.

afryca.ase.gui.command.paste_binding

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteBinding. Pega el enlace seleccionado en el editor de la consola de ASE.

afryca.ase.gui.command.get_editor

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.GetEditor. Permite obtener el editor activo para ASE.

afryca.ase.gui.command.clear_editor

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ClearEditor. Realiza la limpieza del editor de la consola de ASE.

afryca.ase.gui.command.replace_editor_content

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContent. Reemplaza el contenido del editor de la consola de ASE con un nuevo valor.

afryca.ase.gui.command.replace_editor_content_with_binding

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithBinding. Reemplaza el contenido del editor de la consola de ASE con el enlace seleccionado.

afryca.ase.gui.command.get_binding

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.GetBinding. Permite obtener el binding seleccionado.

afryca.ase.gui.command.get_preloaded_element

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.GetPreloadedElement. Permite obtener el elemento precargado seleccionado.

afryca.ase.gui.command.paste_preloaded_element

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PastePreloadedElement. Pega el elemento precargado seleccionado en el editor de la consola de ASE.

afryca.ase.gui.command.replace_editor_content_with_preloaded_element

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithPreloadedElement. Reemplaza el contenido del editor de la consola de ASE con el elemento precargado seleccionado.

afryca.ase.gui.command.paste_instruction

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteInstruction. Pega la instrucción generada a partir del elemento precargado seleccionado en el editor de la consola de ASE.

afryca.ase.gui.command.replace_editor_content_with_instruction

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithInstruction. Reemplaza el contenido del editor de la consola de ASE con la instrucción generada a partir del elemento precargado seleccionado.

afryca.ase.gui.command.new_snippet

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.NewSnippet. Realiza la creación de un snippet solicitando sus valores.

afryca.ase.gui.command.edit_snippet

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.EditSnippet. Realiza la edición de un snippet.

afryca.ase.gui.command.paste_snippet

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteSnippet. Pega el snippet seleccionado en el editor de la consola de ASE.

afryca.ase.gui.command.replace_editor_content_with_snippet

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithSnippet. Reemplaza el contenido del editor de la consola de ASE con el snippet seleccionado.

afryca.ase.gui.command.save_as_snippet

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.SaveAsSnippet. Almacena el contenido del editor de la consola de ASE como un nuevo snippet.

afryca.ase.gui.command.get_variable

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.GetVariable. Permite obtener la variable seleccionada.

afryca.ase.gui.command.paste_variable

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteVariable. Pega la variable seleccionada en el editor de la consola de ASE.

afryca.ase.gui.command.replace_editor_content_with_variable

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithVariable. Reemplaza el contenido del editor de la consola de ASE con la variable seleccionada.

afryca.ase.gui.command.remove_variable

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.RemoveVariable. Elimina la variable seleccionada.

afryca.ase.gui.command.get_eval

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.GetEval. Permite obtener la evaluación seleccionada.

afryca.ase.gui.command.paste_eval

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteEval. Pega la evaluación seleccionada en el editor de la consola se ASE.

afryca.ase.gui.command.replace_editor_content_with_eval

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithEval. Reemplaza el contenido del editor de la consola de ASE con la evaluación seleccionada.

afryca.ase.gui.command.new_module

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.NewModule. Realiza la creación de un módulo solicitando sus valores.

afryca.ase.gui.command.new_function

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.NewFunction. Realiza la creación de una función solicitando sus valores.

afryca.ase.gui.command.edit_module

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.EditModule. Realiza la edición de un módulo.

afryca.ase.gui.command.edit_function

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.EditFunction. Realiza la edición de una función.

afryca.ase.gui.command.paste_function

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.PasteFunction. Pega la función seleccionada en el editor de la consola de ASE.

afryca.ase.gui.command.replace_editor_content_with_function

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.ReplaceEditorContentWithFunction. Reemplaza el contenido del editor de la consola de ASE con la función seleccionada.

afryca.ase.gui.command.new_module_binding

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.NewModuleBinding. Realiza la creación de un enlace a módulo solicitando sus valores.

afryca.ase.gui.command.edit_module_binding

Definido en el plug-in afryca.ase.gui e implementado por la clase afryca.ase.gui.command.EditModuleBinding. Realiza la edición de un enlace a módulo.

afryca.ase.engine.R.gui.command.modify_r_engine_preferences

Definido en el plug-in afryca.ase.engine.R.gui e implementado por la clase afryca.ase.engine.R.gui.command.ModifyREnginePreferences. Lanza la ventana de diálogo para la modificación de las preferencias asociadas a R.

afryca.ase.engine.R.gui.command.show_r_status

Definido en el plug-in afryca.ase.engine.R.gui e implementado por la clase afryca.ase.engine.R.gui.command.ShowRStatus. Despliega un ventana de diálogo con la información del estado de R.

Partes

Las partes definidas por los plug-ins son las siguientes:

afryca.ase.bindings.part

Definida en el plug-in afryca.ase.gui e implementada por la clase afryca.ase.gui.part.BindingsPart. Muestra los enlaces ASE existentes.

afryca.ase.classes.part

Definida en el plug-in afryca.ase.gui e implementada por la clase afryca.ase.gui.part.ClassesPart. Muestra las clases precargadas en ASE.

afryca.ase.variables.part

Definida en el plug-in afryca.ase.gui e implementada por la clase afryca.ase.gui.part.VariablesPart. Muestra las variables en ASE existentes y permite su gestión.

afryca.ase.evals.part

Definida en el plug-in afryca.ase.gui e implementada por la clase afryca.ase.gui.part.EvalsPart. Muestra los evaluaciones realizadas desde la consola de ASE.

afryca.ase.console.part

Definida en el plug-in afryca.ase.gui e implementada por la clase afryca.ase.gui.part.ConsolePart. Implementación de un editor ASE interactivo. Permite introducir fragmentos de código, ejecutarlos y visualizar el resultado.

Preferencias

Los plug-ins emplean las siguientes preferencias.

not.show.again

Usada por el plug-in afryca.ase.engine.R.gui. Indicación de si se debe mostrar o no un posible mensaje de error de R si falla su carga.

Notas finales

  1. Si se prevé que un único cambio provocará múltiples notificaciones por el broker se notifica una notificación grupal con el topic 'ASE/GROUP_UPDATES'. Por ejemplo, el cambio de selección de un repositorio puede hacer necesario cambio el snippet seleccionado, si los subscriptores controlan los cambios de 'ASE/GROUP_UPDATES' pueden evitar realizar acciones innecesarias y posponer cualquier cambio hasta la finalización de la actualización grupal.
  2. Los snippets, repositorios, funciones, módulos y enlaces a módulos devueltos por el servicio de ASE son inyectados por el servicio de workspace, siendo este servicio el que gestiona los elementos disponibles en cada momento.
  3. Para permitir que ASE tenga acceso a clases que desconoce, ASE delega la ejecución de los script a un objeto que implemente la interfaz afryca.ase.IASEContext y que le es inyectado. La implementación de IASEContext se realiza desde el plug-in afryca.rcp.ase.context, el cual forma parte de la feature afryca.rcp.feature.
  4. La implementación de IASEContext realizada por afryca.rcp.ase.context es también utilizada para establecer los enlaces de la aplicación con ASE y gestionar los cambios de estos.
  5. La implementación de Nashorn usada no realiza correctamente la eliminación de variables, por lo que su eliminación es simulada estableciendo su valor a null.
  6. La API de ASE ofrece diferentes modos de realizar las mismas acciones, debiéndose analizar en cada caso específico el modo más apropiado de realizar las acciones. AFRYCA 3 incluye un repositorio de snippets denominado 'ASE-API' en el que se incluyen diferentes snippets que muestran el uso de la API para realizar diferentes tareas.
  7. Al realizar una ejecución se debe tener claro que se entiende como parámetros y variables de invocación:
    1. Un parámetro es un valor pasado como argumento a la ejecución.
    2. Una variable es un valor que será leído del entorno de ejecución.
  8. La mayoría de las evaluaciones realizadas en Nashorn son ejecutadas en aislamiento instanciando un nuevo engine dentro de este. Por tanto es necesario considerar los ámbitos de las variables al ejecutar en ASE, pasando una variable al código ejecutar si es necesario a través de los constructores ExecutionBuilder o FragmentBuilder.
  9. El repository 'Library' es un repositorio especial destinado al desarrollo de bibliotecas desde ASE. Su contenido son snippets normales pero con las siguientes diferencias:
    1. Los snippets de este repositorio son compilados al iniciar la aplicación.
    2. Su código sigue un formato definido.
var <nombre> = (typeof exports === "undefined")?(function <nombre>() {}):(exports);
if(typeof global !== "undefined") { global.<nombre> = <nombre>; }

<código>

<nombre>