Diapositiva 1 - Java User Group Sardegna

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