Eclipse Modeling Framework EMF Lavoro di Antonio Cuccu



































- Slides: 35
Eclipse Modeling Framework (EMF) Lavoro di: Antonio Cuccu Agile Group – DIEE, Università degli studi di Cagliari
Sommario • • • Che cosa è EMF Ecore di EMF Come installare EMF Come lavorare con EMF La persistenza degli oggetti con EMF Conclusioni Agile Group – DIEE, Università degli studi di Cagliari
Che cosa è EMF • EMF è un plug-in di Eclipse • EMF è un progetto open source • EMF consente: - La generazione automatica di codice Java a partire da un modello preesistente - La generazione di un XMI Schema a partire dal modello dei dati - La serializzazione delle istanze (oggetti) del modello in XMI - La deserializzazione di un’istanza del modello a partire da un documento XMI Agile Group – DIEE, Università degli studi di Cagliari
Ecore di EMF Agile Group – DIEE, Università degli studi di Cagliari
Come installare EMF • EMF Download http: //www. eclipse. org/emf • Aggiungere EMF nella cartella plugins di Eclipse Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • EMF consente la generazione di codice Java a partire da un modello che può essere specificato in diversi modi: 1) XML Schema 2) Annotated Java interfaces 3) Rational Rose Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • XML schema <xsd: schema target. Namespace="http: ///library. ecore" xmlns=http: ///library. ecore xmlns: xsd="http: //www. w 3. org/2001/XMLSchema"> <xsd: complex. Type name="Book"> <xsd: sequence> <xsd: element name="title" type="xsd: string"/> <xsd: element name="pages" type="xsd: integer"/> </xsd: sequence> </xsd: complex. Type> </xsd: schema> Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Annotated Java interfaces /** @model */ public interface Book { /** * @model */ String get. Title(); /** * @model */ int get. Pages(); } Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Rational Rose (UML) Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Un esempio in Rational Rose Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Importazione del modello UML Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Importazione del modello UML Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Importazione del modello UML Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Importazione del modello UML Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Importazione del modello UML Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Importazione del modello UML Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione dell’XMI Schema Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione dell’XMI Schema Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione dell’XMI Schema Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione dell’XMI Schema Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione dell’XMI Schema Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione dell’XMI Schema Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione del codice Java Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione del codice Java Agile Group – DIEE, Università degli studi di Cagliari
Come lavorare con EMF • Generazione del codice Java public interface Videocassetta extends EObject { String get. Titolo(); void set. Titolo(String value); String get. Codice(); void set. Codice(String value); Videoteca get. Videoteca(); void set. Videoteca(Videoteca value); } Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • EMF fornisce un insieme di classi che consentono la creazione oggetti persistenti • EMF fornisce un insieme di classi che consentono di “manipolare” oggetti persistenti • La creazione degli oggetti persistenti avviene attraverso una serializzazione XMI Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Serializzazione //Crea un'istanza della Esempioemf. Factory factory = Esempioemf. Factory. e. INSTANCE; //L'oggetto factory crea un oggetto della classe videoteca Videoteca videoteca=factory. create. Videoteca(); videoteca. set. Indirizzo("Via Is Maglias 12 Cagliari"); videoteca. set. Nome("Unica. Video"); //L'oggetto factory crea un oggetto della classe videocassetta Videocassetta video. One = factory. create. Videocassetta(); video. One. set. Codice("vid 12 cc"); video. One. set. Titolo("Kill Bill volume primo"); video. One. set. Videoteca(videoteca); Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Serializzazione //L'oggetto factory crea un oggetto della classe videocassetta Videocassetta video. Two = factory. create. Videocassetta(); video. Two. set. Codice("vid 13 cc"); video. Two. set. Titolo("Kill Bill volume secondo"); video. Two. set. Videoteca(videoteca); //Creazione di un resource set. Resource. Set resource. Set = new Resource. Set. Impl(); //Inizializzazione del resource set. resource. Set. get. Resource. Factory. Registry(). get. Extension. To. Factory. Map(). p ut(Resource. Factory. Registry. DEFAULT_EXTENSION, new XMIResource. Factory. Impl()); Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Serializzazione //Viene creato l'URI per il file. URI = URI. create. File. URI(new File("Videoteca. xmi"). get. Absolute. Path()); //Creazione di una resource a cui andranno associati gli oggetti da serializzare Resource resource = resource. Set. create. Resource(file. URI); //Gli oggetti da serializzare vengono associati alla resource. get. Contents(). add(videoteca); resource. get. Contents(). add(video. One); resource. get. Contents(). add(video. Two); //Il file con gli oggetti serializzati vengono salvati nel workspace del progetto try { resource. save(Collections. EMPTY_MAP); } catch (IOException e) { } Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Serializzazione <? xml version="1. 0" encoding="ASCII"? > <xmi: XMI xmi: version="2. 0" xmlns: xmi="http: //www. omg. org/XMI" xmlns: _videoteca="http: ///_videoteca. ecore"> <_videoteca: Videoteca nome="Unica. Video" indirizzo="Via Is Maglias 12 Cagliari" Videocassette="/1 /2"/> <_videoteca: Videocassetta titolo="Kill Bill volume primo" codice="vid 12 cc" Videoteca="/0"/> <_videoteca: Videocassetta titolo="Kill Bill volume secondo" codice="vid 13 cc" Videoteca="/0"/> </xmi: XMI> Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Deserializzazione //Creazione di un resource set. Resource. Set resource. Set 2 = new Resource. Set. Impl(); //Inizializzazione del resource set. resource. Set 2. get. Resource. Factory. Registry(). get. Extension. To. Factory. Map(). put( Resource. Factory. Registry. DEFAULT_EXTENSION, new XMIResource. Factory. Impl()); //Si ottiene una URI per il file. URI = URI. create. File. URI(new File("Videoteca. xmi"). get. Absolute. Path()); // Creazione di una risorsa per il file. Resource resource=resource. Set 2. get. Resource(file. URI, true); Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Deserializzazione for(int i=0; i<resource. get. Contents(). size(); i++) if(resource. get. Contents(). get(i) instanceof Videocassetta) { videocassette. Array[x]=(Videocassetta)resource. get. Videoteca. get(i); x=x+1; } else { videoteca. Array[y]=(Videoteca)resource. get. Videoteca. get(i); y=y+1; } Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Deserializzazione for(int i=0; i<Num. Videocassette; i++) { System. out. println(videocassette. Array[i]. get. Titolo()); System. out. println("reperibile nella videoteca: “ +videocassette. Array[i]. get. Contiene(). get. Nome()+ videocassette. Array[i]. get. Contiene(). get. Indirizzo()); } Agile Group – DIEE, Università degli studi di Cagliari
Persistenza degli oggetti in EMF • Deserializzazione “Kill Bill volume primo reperibile nella videoteca: Unica. Video Via Is Maglias 12 Cagliari” “Kill Bill volume secondo reperibile nella videoteca: Unica. Video Via Is Maglias 12 Cagliari” Agile Group – DIEE, Università degli studi di Cagliari
Conclusioni • Caratteristiche principali del software EMF: – Generazione automatica di codice Java – Generazione dell’XMI Schema del modello – Serializzazione degli oggetti in XMI – Deserializzazione degli oggetti Agile Group – DIEE, Università degli studi di Cagliari