eclipse modeling framework

41
Eclipse Modeling Framework [email protected] http:// www.theenmusketeers.com EMF

Upload: ajay-kemparaj

Post on 11-May-2015

2.463 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Eclipse Modeling Framework

Eclipse Modeling [email protected]

http://www.theenmusketeers.com

EMF

Page 2: Eclipse Modeling Framework

What is Eclipse ?

Eclipse is a Java IDE

Eclipse is an IDE Framework

Eclipse + JDT = Java IDE First class framework for Java Language aware editor Incremental build Integrated debugging

Eclipse + CDT = C/C++ IDE First class framework for C/C++ Language aware editor Refactoring, search

Eclipse + PHP = PHP IDEEclipse + JDT + CDT + PHP = Java, C/C++, PHP IDE………….

Page 3: Eclipse Modeling Framework

Eclipse is a Tools Framework

Tools extend the Eclipse platform using plug-ins

Business Intelligence and Reporting Tools (BIRT)Eclipse Communications Framework (ECF)Web Tools Project (WTP)Eclipse Modelling Framework (EMF)Graphical Editing Framework (GEF)Test and Performance Tooling Project (TPTP

Plug-in

Plug-in

Plug-in

Page 4: Eclipse Modeling Framework

Eclipse is a Application Framework

Remove the IDE elements, Java language support, team development support, … and you’re left with a pretty comprehensive general application framework

Support for multiple platformsLinux, Windows, Mac OSX, UNIX, embedded

Rich widget set, graphicsNative-OS integration (drag and drop, OLE/XPCOM integration)

A platform for rich clients

Page 5: Eclipse Modeling Framework

Eclipse is all these things

A Java IDEAn IDE FrameworkA Tools FrameworkAn Application FrameworkAn Open Source EnablerA communityAn eco-systemA foundation

Page 6: Eclipse Modeling Framework

Model Driven Architecture (MDA)• A software architecture proposed by the OMG (Object Management Group)• Application specified in high-level, Platform Independent Model (PIM)• Transformation technologies used to convert PIM toPlatform Specific Model (PSM), implementation code• Includes several open modeling standards: UML™ (Unified Modeling Language) MOF (Meta-Object Facility) XMI (XML Metadata Interchange) CWM (Common Warehouse Model)

Page 7: Eclipse Modeling Framework

What is EMF ?EMF is a simple, pragmatic approach to modeling: Allows us to generate some of the code that we write over and over, paving the way for more complex systems Models are simple, but meant to be mixed with hand-written code It’s real, proven technology (since 2002)

Page 8: Eclipse Modeling Framework

What EMF is ?

•A Model for describing other Model (Meta Model) •Runtime Emulator for your model•generator for Java Implementation of your Model

EMF is a framework converting various forms of model into core model description called Ecore

Page 9: Eclipse Modeling Framework

Why EMF ?

EMF is middle ground in the modeling vs. programming worldsFocus is on class diagram subset of UML modeling (object model)Transforms models into Java codeProvides the infrastructure to use models effectively in your application

Very low cost of entry EMF is free and open sourceFull scale graphical modeling tool not requiredReuses your knowledge of UML, XML Schema, or Java

It’s real, proven technology (since 2002)

Page 10: Eclipse Modeling Framework

Some of Eclipse projects which are using EMF• Tools Project: UML2 and Visual Editor (VE)• Web Tools Platform (WTP) Project• Test and Performance Tools Platform (TPTP) Project• Business Intelligence and Reporting Tools (BIRT) Project• Data Tools Platform (DTP) Project• Modeling : Graphical Modeling Framework (GMF)

Page 11: Eclipse Modeling Framework

What is an EMF “Model”?• Specification of an application’s data

Object attributes Relationships (associations) between objectsOperations available on each object Simple constraints (e.g. multiplicity) on objects and

relationships• Essentially, the Class Diagram subset of UML

Page 12: Eclipse Modeling Framework

EMF Architecture

Page 13: Eclipse Modeling Framework

EMF Components• Core Runtime Notification framework

Ecore meta model Persistence (XML/XMI), validation, change model• EMF.Edit Support for model-based editors and viewers Default reflective editor• Codegen Code generator for application models and editors Extensible model importer/exporter framework

Page 14: Eclipse Modeling Framework

The Ecore(Meta) Model• EMF’s metamodel (model of a model)

Page 15: Eclipse Modeling Framework
Page 16: Eclipse Modeling Framework

Model Sources

• EMF models can be defined in (at least) three ways:1. Java Interfaces2. UML Class Diagram3. XML Schema

Page 17: Eclipse Modeling Framework
Page 18: Eclipse Modeling Framework

Java Interfaces

• Classes can be defined completely by a subset of members, supplemented by annotations

public interface Item{ String getProductName(); void setProductName(String value); int getQuantity(); void setQuantity(int value) float getPrice(); void setPrice(float value);}

public interface PurchaseOrder{ String getShipTo(); void setShipTo(String value); String getBillTo(); void setBillTo(String value); List getItems(); // List of Item}

Page 19: Eclipse Modeling Framework

UML Class Diagram

• Built-in support for Rational Rose®• UML2 support available with UML2 (from MDT)

PurchaseOrder

shipTo : StringbillTo : String

Item

productName : Stringquantity : intprice : float0..*

items

0..*

Page 20: Eclipse Modeling Framework

XML Schema<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.com/SimplePO"xmlns:po="http://www.example.com/SimplePO"><xsd:complexType name="PurchaseOrder"><xsd:sequence><xsd:element name="shipTo" type="xsd:string"/><xsd:element name="billTo" type="xsd:string"/><xsd:element name="items" type=“po:Item"minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="Item"><xsd:sequence><xsd:element name="productName" type="xsd:string"/><xsd:element name="quantity" type="xsd:int"/><xsd:element name="price" type="xsd:float"/></xsd:sequence></xsd:complexType></xsd:schema>

Page 21: Eclipse Modeling Framework

Direct Ecore Modeling• Ecore models can be created directly Sample Ecore editor (in EMF) Ecore Tools graphical editor (from EMFT)

Page 22: Eclipse Modeling Framework

Code Generation (Simple)

Page 23: Eclipse Modeling Framework

Code Generation (Full)

Page 24: Eclipse Modeling Framework
Page 25: Eclipse Modeling Framework

Generated Model Code• Interface and implementation for each modeled class Includes get/set accessors for attributes and references

Interfacepublic interface PurchaseOrder extends EObject{String getShipTo();void setShipTo(String value);String getBillTo();void setBillTo(String value);EList<Item> getItems();}

Implementation Classpublic class PurchaseOrderImpl extends EObjectImplimplements PurchaseOrder{...}

Page 26: Eclipse Modeling Framework

Change Notification• Every EObject is also a notifier Sends notification whenever an attributeor reference is changed Observers can update views, dependentobjects Observers are also adapters

AdapterAdapter adapter = ...purchaseOrder.eAdapters().add(adapter);

Page 27: Eclipse Modeling Framework

Factories and Packages

• Factory to create instances of model classes

• Package provides access to metadata

POFactory factory = POFactory.eINSTANCE;PurchaseOrder order = factory.createPurchaseOrder();POPackage poPackage = POPackage.eINSTANCE;EClass itemClass = POPackage.Literals.ITEM;//or poPackage.getItem()EAttribute priceAttr = POPackage.Literals.ITEM__PRICE;//or poPackage.getItem_Price()//or itemClass.getEStructuralFeature(POPackage.ITEM__PRICE)

Page 28: Eclipse Modeling Framework

Persistence• Persisted data is referred to a resource• Objects can be spread out among a number ofresources, within a resource set• Proxies represent referenced objects in otherresources

Page 29: Eclipse Modeling Framework

Resource Set• Context for multiple resources that may have references among them• Usually just an instance of ResourceSetImpl• Provides factory method for creating new resources in the setResourceSet rs = new ResourceSetImpl();URI uri = URI.createFileURI("C:/data/po.xml");Resource resource = rs.createResource(uri);

• Also provides access to the registries, URI converterand default load options for the set

Page 30: Eclipse Modeling Framework

Resource• Container for objects that are to be persisted together

• Convert to and from persistent form via save() and load()

• Access contents of resource via getContents()URI uri = URI.createFileURI("C:/data/po.xml");Resource resource = rs.createResource(uri);resource.getContents().add(p1);resource.save(null);

• EMF provides generic XMLResource implementation• Other, customized implementations.

<PurchaseOrder><shipTo>John Doe</shipTo><next>p2.xml#p2</next></PurchaseOrder>

Page 31: Eclipse Modeling Framework

Registries• Resource Factory Registry

• Returns a resource factory for a given type of resource• Based on URI scheme, filename extension or content type• Determines the format for save/load• If no registered resource factory found locally, delegates to

global registry: Resource.Factory.Registry.INSTANCE• Package Registry

• Returns the package identified by a given namespace URI• Used during loading to access factory for instantiating classes• If no registered package found locally, delegates to global

registry: EPackage.Registry.INSTANCE

Page 32: Eclipse Modeling Framework

Reflective EObject API• All EMF classes implement EObject interface• Provides an efficient API for manipulating objectsreflectively Used by framework (e.g. persistence framework, copy utility,editing commands)

public interface EObject{EClass eClass();Object eGet(EStructuralFeature sf);void eSet(EStructuralFeature sf, Object val);...}

Page 33: Eclipse Modeling Framework

Reflective EObject API• Efficient generated switch-based implementation of reflective methods

public Object eGet(int featureID, ...){switch (featureID){case POPackage.PURCHASE_ORDER__ITEMS:return getItems();case POPackage.PURCHASE_ORDER__SHIP_TO:return getShipTo();case POPackage.PURCHASE_ORDER__BILL_TO:return getBillTo();...}...}

Page 34: Eclipse Modeling Framework
Page 35: Eclipse Modeling Framework

Regeneration and Merge• The EMF generator is a merging generator

/*** <!-- begin-user-doc -->* <!-- end-user-doc -->* @generated*/public String getName(){return name;}

•@generated elements are replaced/removed• To preserve changes mark @generated NOT

Page 36: Eclipse Modeling Framework

Recording Changes EMF provides facilities for recording the changes made toinstances of an Ecore model

Change Model

An EMF model for representing changes to objects

Directly references affected objects

Includes “apply changes” capability

Change Recorder

EMF adapter

Monitors objects to produce a change description (an instance ofthe change model)

Page 37: Eclipse Modeling Framework
Page 38: Eclipse Modeling Framework

Change Recorder Can be attached to EObjects, Resources, and ResourceSets Produces a description of the changes needed to return to theoriginal state (a reverse delta)

PurchaseOrder order = ...order.setBillTo("123 Elm St.");ChangeRecorder recorder = new ChangeRecorder();recorder.beginRecording(Collections.singleton(order));order.setBillTo("456 Cherry St.");ChangeDescription change = recorder.endRecording();

Result: a change description with one change, setting billTo to“123 Elm St.”

Page 39: Eclipse Modeling Framework

Diagnostician• Diagnostician walks a containment tree of objects,dispatching to package-specific validators Diagnostician.validate() is the usual entry point Detailed results accumulated as DiagnosticsDiagnostician validator = Diagnostician.INSTANCE;Diagnostic diagnostic = validator.validate(order);if (diagnostic.getSeverity() == Diagnostic.ERROR){// handle error}for (Diagnostic child : diagnostic.getChildren()){// handle child diagnostic}

Page 40: Eclipse Modeling Framework

Demo

1) Creation of ecore 2) Code Generation3) Code Walkthrough

Page 41: Eclipse Modeling Framework

Resources• EMF documentation in Eclipse Help Overviews, tutorials, API reference• EMF project Web site http://www.eclipse.org/modeling/emf/ Downloads, documentation, FAQ,newsgroup, Bugzilla, Wiki• Eclipse Modeling Framework, by Frank Budinsky Ed Merks