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 targetNamespace="http:///library.ecore" xmlns=http:///library.ecore xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="Book"> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pages" type="xsd:integer"/> </xsd:sequence> </xsd:complexType> </xsd:schema> Agile Group – DIEE, Università degli studi di Cagliari Come lavorare con EMF • Annotated Java interfaces /** @model */ public interface Book { /** * @model */ String getTitle(); /** * @model */ int getPages(); } 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 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 getTitolo(); void setTitolo(String value); String getCodice(); void setCodice(String value); Videoteca getVideoteca(); void setVideoteca(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 EsempioemfFactory EsempioemfFactory factory = EsempioemfFactory.eINSTANCE; //L'oggetto factory crea un oggetto della classe videoteca Videoteca videoteca=factory.createVideoteca(); videoteca.setIndirizzo("Via Is Maglias 12 Cagliari"); videoteca.setNome("UnicaVideo"); //L'oggetto factory crea un oggetto della classe videocassetta Videocassetta videoOne = factory.createVideocassetta(); videoOne.setCodice("vid12cc"); videoOne.setTitolo("Kill Bill volume primo"); videoOne.setVideoteca(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 videoTwo = factory.createVideocassetta(); videoTwo.setCodice("vid13cc"); videoTwo.setTitolo("Kill Bill volume secondo"); videoTwo.setVideoteca(videoteca); //Creazione di un resource set. ResourceSet resourceSet = new ResourceSetImpl(); //Inizializzazione del resource set. resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().p ut(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); Agile Group – DIEE, Università degli studi di Cagliari Persistenza degli oggetti in EMF • Serializzazione //Viene creato l'URI per il file. URI fileURI = URI.createFileURI(new File("Videoteca.xmi").getAbsolutePath()); //Creazione di una resource a cui andranno associati gli oggetti da serializzare Resource resource = resourceSet.createResource(fileURI); //Gli oggetti da serializzare vengono associati alla resource resource.getContents().add(videoteca); resource.getContents().add(videoOne); resource.getContents().add(videoTwo); //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="UnicaVideo" indirizzo="Via Is Maglias 12 Cagliari" Videocassette="/1 /2"/> <_videoteca:Videocassetta titolo="Kill Bill volume primo" codice="vid12cc" Videoteca="/0"/> <_videoteca:Videocassetta titolo="Kill Bill volume secondo" codice="vid13cc" Videoteca="/0"/> </xmi:XMI> Agile Group – DIEE, Università degli studi di Cagliari Persistenza degli oggetti in EMF • Deserializzazione //Creazione di un resource set. ResourceSet resourceSet2 = new ResourceSetImpl(); //Inizializzazione del resource set. resourceSet2.getResourceFactoryRegistry().getExtensionToFactoryMap().put( Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); //Si ottiene una URI per il file. URI fileURI = URI.createFileURI(new File("Videoteca.xmi").getAbsolutePath()); // Creazione di una risorsa per il file. Resource resource=resourceSet2.getResource(fileURI,true); Agile Group – DIEE, Università degli studi di Cagliari Persistenza degli oggetti in EMF • Deserializzazione for(int i=0;i<resource.getContents().size();i++) if(resource.getContents().get(i) instanceof Videocassetta) { videocassetteArray[x]=(Videocassetta)resource.getVideoteca.get(i); x=x+1; } else { videotecaArray[y]=(Videoteca)resource.getVideoteca.get(i); y=y+1; } Agile Group – DIEE, Università degli studi di Cagliari Persistenza degli oggetti in EMF • Deserializzazione for(int i=0;i<NumVideocassette;i++) { System.out.println(videocassetteArray[i].getTitolo()); System.out.println("reperibile nella videoteca:“ +videocassetteArray[i].getContiene().getNome()+ videocassetteArray[i].getContiene().getIndirizzo()); } Agile Group – DIEE, Università degli studi di Cagliari Persistenza degli oggetti in EMF • Deserializzazione “Kill Bill volume primo reperibile nella videoteca:UnicaVideo Via Is Maglias 12 Cagliari” “Kill Bill volume secondo reperibile nella videoteca:UnicaVideo 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