Tema 5 - Soporte a meta-modelado - Technical University of ...
Transcript of Tema 5 - Soporte a meta-modelado - Technical University of ...
eclipse en el soporte al desarrollo de softwaredesarrollo de software
Abel Gómez Llana [agomez@dsic upv es]Abel Gómez Llana [[email protected]].15-19 de Septiembre 2008.Universidad Politécnica de Valencia. Facultad de Informática.
1
Eclipse y el soporte a modelado/metamodeladomodelado/metamodelado
19 de Septiembre de 200819 de Septiembre de 2008
2
Contenido
• Introducción a Eclipse Modeling Framework
– Antecedentes
– Vista general de EMF
– El metamodelo Ecore
– Creación de un metamodelo
– Generación de código y editores
– Uso del código generado y persistencia
• Generación de editores visuales: Graphical Modeling
FrameworkFramework
3Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
El estándar MOF• MOF (Meta-Object Facility) es un estándar para ingeniería
dirigida por modelos propuesto por el OMG (ObjectM t G )Management Group).
• Entre los objetivos de MOF están la definición de un marco que dé soporte a modelado y metamodelado, así como proporcionar mecanismos de interoperabilidad eproporcionar mecanismos de interoperabilidad e intercambio de modelos.
• El estándar proporciona una estricta arquitectura de 4 niveles, donde cada elemento del nivel x es instancia de un elemento del nivel x+1.
• El lenguaje MOF puede considerarse como un subconjunto del diagrama de clases UML, y en su versión actual, proporciona dos variantes: EMOF (Essential MOF) y CMOFproporciona dos variantes: EMOF (Essential MOF) y CMOF (Complete MOF).
• MOF se relaciona con otros numerosos estándares: UML, OCL, XMI, JMI, QVT, etc.XMI, JMI, QVT, etc.
6Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Arquitectura de niveles MOFq
MOFEcore MOF
M3
Leve
l Ecore
UMLmetamodel
relationalmetamodel
OWL
M2
Leve
l
C lase1
Clase2
1
*
DC1-codigo : int-fecha : Date
Factura-descripcion : string-horas : float
LineaFactura-codigo : int-descriptor : string-precio/hora : float
Tarea
-dni : string-nom bre : string
Propietario -codigo : int-situacion : string-descripcion : string-tam año : float
Propiedad-codigo : int-nom bre : string-dni : string-telefono : string
Trabajador
1 *0..* 1
0..*
1..*
0..*
1
1 0..*
DC2
Invo ice
PK code
date
InvoiceLine
PK invoice_codePK num ber
price hoursFK 1 code
relational schema ontology
M1
Leve
l
codigo : int = 0fecha : Date = 01/12/2004
F1 : Facturadescripcion : string = ""horas : float = 2
LF1 : LineaFactura
descripcion : stringLF2 : L ineaFactura
codigo : int = 002descriptor : string = podaprecio /hora : float = 7
T1 : Tarea
Instances TuplesOntology instance
0 Le
vel
7Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
descripcion : stringhoras : float = 2 ,5M
0
Eclipse Modeling Framework• EMF es un framework que proporciona herramientas
para creación de modelos.
p g
para creación de modelos.• EMF proporciona capacidades de generación de código
Java de forma automática.Ad á i d f t áti l• Además, proporciona de forma automática los mecanismos de persistencia para las instancias de estos modelos en formato XMI.
• Como lenguaje de modelado (meta-metamodelo) proporciona el lenguaje Ecore. Ecore puede considerarse como una implementación del lenguaje EMOF.
• En la distribución clásica de Eclipse no se incluye EMF. Para poder usarse de instalarse mediante un sitio de actualizaciones.actualizaciones.
9Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Eclipse Modeling Framework• Componentes EMF
Core Runtime
p g
– Core Runtime• Provee la generación básica y el soporte de ejecución para la
creación de la implementación de las clases Java de un modelo.
• Metamodelo Ecore• Persistencia, validación y cambios del modelo.
– EMF.edit framework• Extiende el modelo base de EMF con clases genéricas reusables
para el soporte de:– Visores de modelos– Modificaciones del modelo basada en línea de comandos– Editores para los modelos EMF
– CodegenP i l i d ió d ódi• Proporciona los mecanismos de generación de código.
10Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Eclipse Modeling Framework
• Arquitectura de EMF
p g
Aplicación usuario Modelo Editor
EMF Runtime
Herramientas EMF Codegen
EditCore
Plataforma Eclipse
11Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Eclipse Modeling Framework• ¿Qué es un modelo EMF?
– La especificación de los datos de una aplicación
p g
La especificación de los datos de una aplicación• Atributos de los objetos• Relaciones entre objetos• Operaciones que puede realizar cada objeto• Restricciones simples en objetos y relaciones (multiplicidad)
– En esencia, el diagrama de clases de UML.• EMF utiliza XMI como la forma canónica para la
definición de un modelo. Existen varias formas para de definirlo:– Java anotado (interfaces).– Diagrama de clases UML (Proyecto UML2 de Eclipse o
Rational Rose).– XML Schema.
12Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
El metamodelo Ecore• Subconjunto simplificado de Ecore (especificado en el mismo Ecore
—Ecore se define a sí mismo—):
lowerBound: EIntmany: EBooleanordered: EBooleanrequired: EBoolean
i EB l
ETypedElement
name: EString
ENamedElement
)
EClassifier EPackage EStructuralFeature
unique: EBooleanupperBound: EInt
ePackage
0 1
eClassifiers
*
*
eSubpackages
S P k
0..1
nsPrefix: EStringnsURI: EString
EClassEDataType
derived: EBooleantransient: EBoolean
0..1 eSuperPackage
*eSuperTypes
EAttribute
containment: EBoolean
EReferenceabstract: EBooleaninterface: EBoolean
EClassEDataType
eAttributeType
1
eAttributes *
eReferenceType
1
eReferences*
14Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
EAttribute
El metamodelo Ecore• EClassifier — Tipo abstracto que agrupa a todos los elementos que
describen conceptosEDataType representa el tipo de un atributo Un tipo de datos puede ser• EDataType — representa el tipo de un atributo. Un tipo de datos puede ser un tipo básico como int o float, o un objeto, como por ejemplo java.util.Date.
• EAttribute — Tipo que permite definir los atributos de una clase. Éstos tienen nombre y tipo Como especialización de ETypedElement EAttributetienen nombre y tipo. Como especialización de ETypedElement, EAttributehereda un conjunto de propiedades como cardinalidad (lowerBound, upperBound), si es un atributo requerido o no, si es derivado, etc.
• EReference — Modelar las relaciones entre clases. En concreto EReferencepermite modelar las relaciones de asociación, agregación y composición p , g g y pque aparecen en UML. Al igual que EAttribute, es una especialización de ETypedElement, y hereda las mismas propiedades. Además define la propiedad containment mediante la cual se modelan las agregaciones disjuntas (denominadas composiciones en UML).
• EPackage — Agrupa un conjunto de clases en forma de módulo, de forma similar a un paquete en UML. Sus atributos más importantes son el nombre, el prefijo y la URI. La URI es un identificador único gracias al cual el paquete puede ser identificado unívocamente.
15Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Definición de modelos Ecore
• Históricamente, un modelo Ecore se puede d fi i d dif tdefinir de diferentes maneras:
UML
Modelo EMF
XMLJava
16Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Definición de modelos Ecore
• Mediante UML:– Modelo de Rational Rose («*.mdl»)
– Del proyecto de UML2 de Eclipse (últimas versiones)
17Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Definición de modelos Ecore
• Mediante interfaces Java anotadas:/*** @model*/public interface Family {
/*** Return the father* @return the father* @model
/*** @model*/public interface FamilyTree {
/*** Return a list of contained families
/*** @model abstract="true"*/public interface Individual {
/*** Return the individuals name.* @return the name
**/Male getFather();
/*** Return the mother* @return the mother* @model**/
Return a list of contained families* @model type="Family" containment="true" **/
java.util.List getFamilies();
/*** Return a list of contained individuals* @model type="Individual" containment="true" **/
* @model**/String getName();
}
Female getMother();
/*** Return children* @return list of child Individuals* @model type="Individual" containment="true“**/
java.util.List getChildren();
/java.util.List getIndividuals();
}
}
/*** @model*/
/*** @model*/public interface Male extends Individual {}
18Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
/public interface Female extends Individual {}
Definición de modelos Ecore• Mediante esquema XML
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
<xsd:element name="comment" type="xsd:string"/>
<xsd:complexType name="PurchaseOrderType">d<xsd:sequence><xsd:element name="shipTo" type="USAddress"/><xsd:element name="billTo" type="USAddress"/><xsd:element ref="comment" minOccurs="0"/><xsd:element name="items" type="Items"/>
</xsd:sequence><xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress"><xsd:sequence>
<xsd:element name="name" type="xsd:string"/><xsd:element name="street" type="xsd:string"/><xsd:element name="city" type="xsd:string"/><xsd:element name="state" type="xsd:string"/><xsd:element name="zip" type="xsd:decimal"/>
</xsd:sequence></xsd:sequence><xsd:attribute name="country" type="xsd:NMTOKEN"
fixed="US"/></xsd:complexType>
<!—-...
-->
19Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
</xsd:schema>
Definición de modelos Ecore• Todas las representaciones previas, son equivalentes
entre síentre sí.• No obstante, EMF aún proporciona una cuarta forma de
representar un modelo Ecore, en XMI.• XMI es el formato de «representación canónica» de un
modelo Ecore.U d l E d dit t bié di t t• Un modelo Ecore puede editarse también directamente en XMI (o mediante los editores que proporciona Eclipse por defecto).
• En la práctica, en la mayoría de los casos, un modelo Ecore se creará y editará directamente de esta manera.
20Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Para crear un nuevo proyecto EMF se debe partir de un modelo
Ecore pre-existente, en cualquiera de las representaciones p , q panteriores.
• A lo largo de la sesión de hoy emplearemos como ejemplo de modelo Ecore el siguiente metamodelo simplificado de bases de g pdatos relacionales:
22Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Para crear un nuevo modelo Ecore, podemos emplear el asistente
de ejemplo, al que se accede desde el menú habitual («New…»).j p , q ( )
23Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Generalmente, un modelo Ecore tiene un único elemento raíz. El
metamodelo Ecore, puesto que también está definido en Ecore, proporciona de forma natural el elemento EPackage como el elementoproporciona de forma natural el elemento EPackage como el elemento raíz.
• Un modelo Ecore se representa de forma arbórea. Esto se debe a que su representación está íntimamente relacionada con el formato de persistencia (XMI).
• Esta consideración debe tenerse en• Esta consideración debe tenerse en cuenta también al definir modelos Ecorepropios, para evitar problemas en la generación de editores y en la persistencia en XMIpersistencia en XMI.
• De esta manera, toda clase (salvo la que se vaya a considerar como raíz) debe estar contenida en otra (debe recibir una
24Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
(referencia de tipo contaiment).
Creación de un nuevo proyecto de EMF• Una vez creado el modelo, se abre automáticamente
con el editor en árbol por defecto de EMFcon el editor en árbol por defecto de EMF
Editor en árbolEditor en árbol
Edición de propiedades del elemento seleccionadoEdición de propiedades del elemento seleccionado
25Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Edición de propiedades del elemento seleccionadoEdición de propiedades del elemento seleccionado
Creación de un nuevo proyecto de EMF• Para añadir nuevos elementos en el editor en árbol, se
hace uso del menú contextual «New Child»hace uso del menú contextual «New Child».
26Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Propiedades de una clase
27Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Propiedades de un atributo
28Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Propiedades de una referencia
29Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Propiedades de una operación
P i d d d á t• Propiedades de un parámetro
30Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF
• El editor en árbol de EMF permite además crear t d l d á l t ifitodos los demás elementos que se especifican en el modelo de Ecore de forma similar:
Anotaciones (EAnnotation)– Anotaciones (EAnnotation)• Detalle de entrada (Details)
– Tipos de datos (EDataType)– Enumeraciones (EEnum)
• Literales (EEnumLiteral)
31Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• El editor en árbol es la forma más segura de editar un modelo
Ecore, no obstante puede resultar muy poco amigable para editar modelos complejosmodelos complejos.
• Siendo Ecore un subconjunto del diagrama de clases de UML, lo ideal es poder emplear una metáfora visual similar a éste diagrama.
• Hasta la introducción de GMF no existía ningún editor gráfico g gpropio del proyecto eclipse para la edición de modelos Ecore, a pesar de esto existía el editor Omondo (comercial).
• Tras la introducción de GMF existe un editor gráfico (generado de forma automática, como se verá más adelante) para la edición deforma automática, como se verá más adelante) para la edición de modelos Ecore.
• El editor de GMF es útil y funcional, aunque esconde ciertos detalles del modelo, por ello, siempre es recomendable revisar (o al menos tener en cuenta) la representación en árbol del modelo bajotener en cuenta) la representación en árbol del modelo bajo edición.
• NUNCA editar simultáneamente un modelo mediante el editor en árbol y el editor gráfico.
32Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Si GMF está instalado, un modelo Ecore puede crearse
directamente mediante el editor en árbol.Los asistentes de creación de un nuevo modelo• Los asistentes de creación de un nuevo modelo mediante GMF se encuentran por defecto en la categoría «Other» dentro del menú de creación de nuevo fichero.
• Un modelo gráfico en GMF requiere de dos ficheros:• Un modelo gráfico en GMF requiere de dos ficheros:– El modelo de datos (en este caso, un «*.ecore») donde se salva
la información fundamental del modelo.– El modelo del diagrama (en este caso, un «*.ecore_diagram»)
donde se almacena únicamente la información gráfica sobre como se representará el modelo en pantallacomo se representará el modelo en pantalla.
• De esta forma, se mantiene compatibilidad de los modelos editados de esta manera, y se mantiene bien diferencia la información propia del modelo de su representación.representación.
• Si el editor gráfico para un determinado tipo de modelos está instalado, se puede inicializar el modelo del diagrama a partir de un modelo de datos pre-existente mediante el menú contextual.
33Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF
34Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
¿… y owner…?
Creación de un nuevo proyecto de EMF• Una vez tenemos un primer modelo Ecore, podemos
generar un nuevo proyecto EMFgenerar un nuevo proyecto EMF.• Para ello invocaremos el asistente de nuevo proyecto
«EMF Project» desde la ubicación habitual (New →Project).
35Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF
36Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF
37Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un nuevo proyecto de EMF• Se creará un nuevo proyecto con una carpeta
de código fuente vacía, y una carpeta «model/» con el fichero de nuestro modelo (una copia exacta) y el fichero «*.genmodel».
• A partir de ahora, las ediciones deberemos hacerla sobre el modelo recién creado.
• El fichero «*.genmodel» es el que servirá para la generación de código. Enlaza y consulta al fichero «*.ecore» para saber el código de qué clases debe generar y debe de mantenerseclases debe generar, y debe de mantenerse sincronizado con el modelo Ecore.
• En caso de que se hagan cambios importantes en el modelo, se recomienda recargar (Reload…) el fichero «*.genmodel» (se iniciará un asistente similar al anterior de creación de proyecto)iniciará un asistente similar al anterior de creación de proyecto).
• ¡Atención! ¡La primera vez que se crea un proyecto, el fichero «*.genmodel» enlaza al modelo «*.ecore» original! Se recomienda encarecidamente ejecutar el asistente de recarga, e indicando el nuevo fichero * ecore del proyecto EMF recién
38Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
indicando el nuevo fichero «*.ecore» del proyecto EMF recién creado para evitar confusiones (y pudiendo eliminar el original).
Creación de un nuevo proyecto de EMF
39Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Clases generadas para el modelo• Para cada clase del modelo (EClass):
– Una interfaz Java:
public interface Column …
– Y la correspondiente clase que implementa la interfaz:p q p
public class ColumnImpl extends … implements Column
• Esta separación es una decisión de implementación impuestaEsta separación es una decisión de implementación impuesta por EMF, que permite simular la herencia múltiple que permite EMF en Java.
• Las interfaces se agrupan en el paquete fij b d l«prefijo.nombremodelo».
• Las implementaciones en el paquete «prefijo.nombremodelo.impl».
41Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Clases generadas para el modelo• Además se observa que todas las interfaces extienden directa o
indirectamente de la interfaz EObject (y las clases extienden la clase j (yEObjectImpl):
public interface RModelEment extends EObjectpublic interface RModelEment extends EObject
• EObject es el equivalente de EMF a la clase java.lang.Object, esto es, una clase base para todos los objetos modelados EObject introduceuna clase base para todos los objetos modelados. EObject introduce tres comportamientos básicos:
– eClass() — devuelve el metaobjeto del objeto (una EClass).
eContainer() y eResource devuelve el objeto contedor y el recurso del objeto– eContainer() y eResource — devuelve el objeto contedor y el recurso del objeto.
– eGet(), eSet(), eIsSet() y eUnset() — proporcionan una API para acceder al objeto de forma reflexiva. Éstos son ligeramente más ineficientes que los métodos generados pero abren el modelo a un acceso completamente genéricogenerados, pero abren el modelo a un acceso completamente genérico.
42Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Clases generadas para el modelo• La clase EObject proporciona una funcionalidad más:
public interface EObject extends Notifier { public interface EObject extends Notifier {
• La interfaz Notifier introduce notificaciones acerca del cambio del modelo.
• El patrón exacto que se utilizada en los métodos generados para la implementación de una característica dada (atributo o referencia) depende del tipo y otras propiedades ajustables por el usuario. Veamos como ejemplo el atributo type de una Columna (para otros atributos se emplean patrones más complejos, especialmente en referencias bidireccionales).
public String getType() {return type;
public void setType(String newType) {String oldType = type;type = newType;if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SETRdbmsPackage COLUMN TYPE oldType type));
return type;}
43Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
RdbmsPackage.COLUMN__TYPE, oldType, type));}
Clases generadas para el modelo• Para cada modelo, además, se crean dos clases
adicionales:adicionales:– Una factoría, que proporciona un método create para
cada clase del modelo.• El modelo de programación de EMF recomienda
encarecidamente el uso de la factoría (aunque no lo obliga).• Se recomienda escribir
Rdb F t INSTANCE t C l () l d«RdbmsFactory.eINSTANCE.createColumn()» en lugar de «new ColumnImpl()».
– Una clase que representa al paquete. Esta clase contiene todos los metadatos Ecore del metamodelocontiene todos los metadatos Ecore del metamodelo(nombre, ns prefix, URI, etc) así como métodos de acceso a las EClasses, EReferences, etc. del modelo.
44Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Invocación del generadorg
45Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Generación de editores en árbol• Además del código del modelo, EMF permite
generar editores en árbol específicos para un g p pmodelo Ecore concreto (registrando una extensión por defecto para ellos, iconos personalizados, etc).
• Para este caso, el código generado no se genera enPara este caso, el código generado no se genera en el mismo proyecto que el del modelo, sino que se genera por separado, y además en dos plug-ins.– * edit en este plug-in se incluyen clases de ayuda a la.edit, en este plug in se incluyen clases de ayuda a la
edición, pero independientes del editor concreto (etiquetas que identifican un determinado elemento del modelo, icono asociado, hijos para los que se deben dar opciones de creación etc)opciones de creación, etc).
– *.editor, este plug-in implementa el propio editor, y hace uso del plug-in anterior. Registra la extensión por defecto, etc.etc.
46Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Generación del código EMF.Edit• «Generate edit code» creará un plug-in completo
conteniendo la parte independiente del editor concreto,
g
conteniendo la parte independiente del editor concreto, esto es:
– Un conjunto de item providers (etiquetas, iconos, etc), uno para cada clase en el modelo.
– Una clase item provider adapter factory que creará los itemproviders generados.
– Una clase Plugin que incluye los métodos para localizar los g yrecursos de texto e iconos del plug-in.
– Archivos de manifiesto del plug-in, (plug-in.xml, MANIFEST.MF), especificando las dependencias requeridas.
– Un archivo de propiedades, plugin.properties, conteniendo las cadenas de texto externalizadas necesarias por las clases generadas y el framework.Un directorio de iconos uno para cada clase del modelo– Un directorio de iconos, uno para cada clase del modelo.
47Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Generación del editor• En el plug-in del editor, se generarán los siguientes
elementos:– Un editor integrado en el workbench de Eclipse.– Un asistente para crear documentos con nuevas instancias del
modelo (se incluirá en el menú por defecto, bajo la categoría «Example EMF Model Creation Wizards»).p
– Una contribución a las barras de menús, de herramientas y menús contextuales.
– Una clase Plugin que incluye los métodos para localizar los recursos de cadenas de texto e iconosde cadenas de texto e iconos.
– Archivos de manifiesto del plug-in, que especifican las dependencias requeridas y extensiones del editor, asistente, y puntos de extensión de las acciones del workbench.Un archivo de propiedades plugin properties conteniendo las– Un archivo de propiedades, plugin.properties, conteniendo las cadenas de texto externalizadas necesarias para las clases generadas y para el framework.
– Un directorio conteniendo iconos para el editor y el asistente de «Nuevo modelo»«Nuevo modelo».
48Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Uso del código generado
• Además de los plug-ins del modelo, del soporte l di ió d l dit d
g g
a la edición, y del editor, se puede generar automáticamente un plug-in de pruebas mediante la opción «Generate test code» delmediante la opción «Generate test code» del fichero «*.genmodel».
• Este plug-in de pruebas sirve como ejemplo deEste plug in de pruebas sirve como ejemplo de cómo se usa el código generado tanto desde un plug-in que se ejecuta dentro de Eclipse, como de una aplicación Java independiente.
50Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación/carga-edición de una instancia1. Crear un nuevo ResourceSet:
ResourceSet resourceSet = new ResourceSetImpl();
2. Registrar la ResourceFactory:resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Facto
ry.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
3 Registrar el paquete:3. Registrar el paquete:resourceSet.getPackageRegistry().put(RdbmsPackage.eNS_URI, RdbmsPackage.eINSTANCE);
4. Crear/Cargar:– Crear un nuevo Resource:
Resource resource = resourceSet.createResource(URI.createURI("http:///My.rdbms"));
– Cargar un nuevo Resource:Resource resource = resourceSet.getResource(uri, true);
()Resource.load();
5. Editar el modelo:– Se accede a las instancias del Resource mediante el método resource.getContents().
6 Salvar el modelo:6. Salvar el modelo:resource.save(outputStream, null);
51Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Introducción a GMF• Eclipse proporciona desde sus inicios un framework gráfico llamado
Graphical Editor Framework.p• No obstante, su uso para la creación de editores es complejo,
puesto que es un entorno de creación de editores genérico e independiente del modelo subyacente.p y
• GEF se basa en el paradigma Modelo-Vista-Controlador. Esto ocasionó que inicialmente la mayor parte de los desarrolladores emplease sus propios modelos (generalmente objetos Java).p p p g j
• El problema del uso de modelos propios radica en que gran parte del esfuerzo de implementación se invierte en mecanismos para tratar con ellos, así como en tareas de carga/serialización.g
• El siguiente paso lógico en el desarrollo de editores gráficos fue adoptar el uso de EMF como framework de modelado subyacente. No obstante, la integración de EMF y GEF no es trivial, y presenta g y y pdiversas dificultades tecnlógicas.
54Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Introducción a GMF• GMF surge como un framework capaz de unificar ambos entornos,
siguiendo una filosofía dirigida por modelos: en GMF no se g g pprograma, se modela:
GEF
(frameworkgráfico)
EMF
(frameworkde modelado)
GMF
(frameworkd d l d
g
de modelado gráfico)
55Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Introducción a GMF• Proceso de desarrollo con GMF:
56Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
*Extraído del manual de GMF (http://wiki.eclipse.org/index.php/GMF_Tutorial)
Creación de un editor gráfico• A continuación, vamos a crear un primer prototipo rudimentario de un
editor gráfico visual, de esquemas de bases de datos relacionales.
g
• El editor permitirá dibujar:– Tablas.– Columnas como elementos dentro de una tabla.– Claves (indicando el nombre de la clave).– Claves ajenas (como un enlace entre una tabla y una clave de otra tabla).
Tabla 1Columna11
C l 12
Tabla 2Columna21
C l 22Columna12
Clave1
Columna22
Clave2
58Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• Como se vio anteriormente, el flujo de trabajo para crear un editor
basado en GMF es complejo, y consta de diversos modelos que se
g
p j , y qrelacionan entre sí.
• Por ello, la mejor forma de crear un nuevo proyecto de GMF, es empleando la vista «GMF Dashboard», que muestra de forma p , qesquemática el proceso a seguir, y proporcionando atajos para la creación/derivación de los modelos intermedios.
59Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• En primer lugar, hemos de empezar el proceso seleccionando los
dos modelos que ya hemos creado en el paso previo: el «*.ecore» y
g
q y p p yel «*.genmodel»
60Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• El siguiente paso es crear el conjunto de elementos gráficos de los
que dispondrá nuestro modelo.
g
q p• Para ello, lanzaremos el asistente que nos permitirá derivarlos a
partir del modelo «*.ecore».• Se aconseja guardar todos los modelos intermedios en la mismaSe aconseja guardar todos los modelos intermedios en la misma
carpeta que los ficheros «*.ecore» y «*.genmodel».
61Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• Para la creación del «*.gmfgraph» se debe seleccionar en primer
lugar cuál será el elemento que representará el canvas del editor
g
g q p(esto es generalmente el elemento raíz de nuestro modelo).
• En el caso de los esquemas de bases de datos relacionales, este será el elemento Schema.
62Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• En segundo lugar, marcaremos cuáles serán los elementos para los
que necesitaremos alguna representación gráfica, y de qué tipo
g
q g p g , y q pserá esta. Por defecto, el asistente muestra una propuesta inicial.
Elemento del diagrama independiente
El elemento denota un enlace entre elementosEl elemento denota un enlace entre elementos
El elemento es un atributo de otro principal
63Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• En este punto, podremos
editar el modelo
g
«*.gmfgraph» para completar y definir las primitivas gráficas que deseemos.
• Al finalizar, podremos generar el modelo de herramientas «*.gmftool»
64Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráficog• El modelo «*.gmftool» marcará las primitivas disponibles en el panel
de dibujo.j
65Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• El siguiente paso es el más importante del proceso:
la creación del fichero «*.gmfmap».
g
g p• En este paso se combinarán todos los modelos
anteriores, especificando qué primitivas gráficas representan qué elementos del modelo original.representan qué elementos del modelo original.
66Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• En primer lugar se debe seleccionar cuál será el
elemento del modelo que representará el canvas y a
g
q p ycontinuación, se debe de seleccionar cuaál es el modelo de los elementos gráficos a emplear.
67Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• En primer lugar se debe seleccionar cuál será el elemento del
modelo que representará el canvas y a continuación, se debe d l i ál l d l d h i t l
g
de seleccionar cuál es el modelo de herramientas, y el modelo de los elementos gráficos a emplear.
68Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• El último paso del asistente permite inicializar el modelo de
mappings seleccionando qué elementos del modelo de datos se
g
pp g qrepresentarán como nodos en el área de dibujo, y qué elementos representarán conexiones.
69Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• Una vez generado el modelo de mappings, se debe editar y
comprobar que se ha definido toda la información necesaria.
g
• Para ello, es recomendable empezar validando el modelo. Esto nos mostrará qué partes del modelo están aún incompletas y han de rellenarse a mano.
d d l d l d• La edición del modelo de mappings es compleja, costosa, propensa a introducir errores y ademásintroducir errores y además está poco documentada.
• Antes de continuar con el proceso se ha de validar SIEMPRE este modelo. Aún así, que el modelo valide no es garantía de que vaya a generar código válido
70Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
generar código válido.
Creación de un editor gráfico• Cuando se ha completado
el modelo (y hecho las difi i
g
modificaciones pertinentes, como añadir los contenedores anidados, etc.), se puede pproceder a la generación del fichero «*.gmfgen», que finalmente dará lugar al código generado.al código generado.
71Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
Creación de un editor gráfico• Una vez se ha generado el código, se puede iniciar un nuevo editor
mediante el asistente de creación de nuevo fichero.
g
• Nuestro prototipo de editor se mostrará de la siguiente manera:
• A partir de este punto, se puede refinar el editor, modificando las figuras, personalizando iconos y colores, tamaño y alineaciones de
72Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]
contenedores, etc.
Ejercicio de evaluación
• Crear un nuevo proyecto de EMF que represente un modelo que permita representar grafos como el
j
modelo que permita representar grafos como el siguiente (similar a una red de Petri):
• Generar un prototipo de editor gráfico con GMF que permita dibujarlos de forma sencilla.
74Eclipse en el soporte al desarrollo de software.
Universidad Politécnica de Valencia. Abel Gómez [[email protected]]