<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6378418891977934688</id><updated>2011-11-27T16:59:23.169-08:00</updated><category term='ibm redbook'/><category term='emf edit'/><category term='gmf documentation'/><category term='gmf doc'/><category term='emf'/><category term='gmf tutorial'/><category term='intro'/><category term='tutorial'/><category term='generator model'/><category term='features'/><category term='gef'/><category term='uml'/><category term='graphical model'/><category term='eclipse'/><category term='graphical definition'/><category term='mapping model'/><category term='plugins'/><category term='pde'/><category term='generation framework'/><category term='beginner'/><category term='notation model'/><category term='gmf'/><title type='text'>GMF Documentation</title><subtitle type='html'>Grapical Modeling Framework - Documentation</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-8607873933003965686</id><published>2008-04-25T04:56:00.000-07:00</published><updated>2008-05-23T05:04:58.861-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='intro'/><title type='text'>Why this Blog?</title><content type='html'>Hi,&lt;br /&gt; You might be thinking why am writing this blog even though there is plenty of information and help pages available for GMF.&lt;br /&gt;&lt;br /&gt;I worked around 5moths using GMF, and still feel that I did not have proper ideas of how things work in GMF. I could not find any proper documentation that says what exactly the generated code does, how it works, why this code is being generated. So I am writing this blog for those who faced same situation in GMF. I will try to post as many articles as I can and explain everything I have learnt in GMF. I must say there are indeed really cool things one can do with GMF.&lt;br /&gt;This documentation will have *most* part copy-pasted from other sources. I would have provided appropriate links to those sources. This is because the contents present on web requires some more detailed explanation with proper reasoning, which I did not find in most articles.&lt;br /&gt;&lt;br /&gt;If Any reader familiar with GMF, do let me improve this blog and make a better source of learning for those using Eclipse's cool frameworks !!!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Amit M Surana&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-8607873933003965686?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/8607873933003965686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=8607873933003965686' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/8607873933003965686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/8607873933003965686'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/why-this-blog.html' title='Why this Blog?'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-994472238078965405</id><published>2008-04-24T23:28:00.000-07:00</published><updated>2008-12-09T22:41:26.254-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><title type='text'>Eclipse Introduction</title><content type='html'>&lt;div style="text-align: justify;"&gt;If you are new to eclipse then go on and read this.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;" class="Section1"&gt;  &lt;p class="MsoNormal"&gt;Eclipse is an open source software development project, the purpose of which is to provide a highly integrated tool platform. The work in Eclipse consists of a core project, which includes a generic framework for tool integration, and a Java development environment built using it. Other projects extend the core framework to support specific kinds of tools and development environments. The projects in Eclipse are implemented in Java and run on many operating systems including Windows and Linux.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;By involving committed and enthusiastic developers in an environment organized to facilitate the free exchange of technology and ideas, Eclipse is hoping to create the best possible integration platform. The software produced by Eclipse is made available under the Common Public License (CPL), which contains the usual legalese, but basically says that you can use, modify, and redistribute it for free, or include it as part of a proprietary product. The CPL is Open Source Initiative (OSI)-approved and recognized by the Free Software Foundation as a free software license. Any software contributed to Eclipse must also be licensed under the CPL.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Eclipse.org is a consortium of a number of companies that have made a commitment to provide substantial support to the Eclipse project in terms of time, expertise, technology, or knowledge. The projects within Eclipse operate under a clearly defined charter that outlines the roles and responsibilities of the various participants including the board, Eclipse users, developers, and the project management committees.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="mk:@MSITStore:C:%5CAmitStuff%5CPpt%20&amp;amp;%20Books%20--%20Amit%5CEclipse%20Modeling%20Framework.chm::/0131425420_6061533.html"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style="'width:.75pt;" button="t"&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image001.gif" shapes="_x0000_i1025" border="0" height="1" width="1" /&gt;&lt;!--[endif]--&gt;&lt;/a&gt;It is built to meet the following requirements:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Support the construction of a variety of tools for      application development. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Support an unrestricted set of tool providers,      including independent software vendors (ISVs). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Support tools to manipulate arbitrary content types      (e.g., HTML, Java, C, JSP, EJB, XML, and GIF). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Facilitate seamless integration of tools within and      across different content types and tool providers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Support both GUI and non-GUI-based application      development environments. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Run on a wide range of operating systems, including      Windows® and Linux. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;Capitalize on the popularity of the Java      programming language for writing tools. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;/div&gt;&lt;div style="text-align: justify;"&gt;    &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;Eclipse Plug-in Development Environment&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;  &lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mT3fdsUZ7XI/SBAplgxB4dI/AAAAAAAAAGE/rp5vJxU6_yU/s1600-h/pde.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_mT3fdsUZ7XI/SBAplgxB4dI/AAAAAAAAAGE/rp5vJxU6_yU/s400/pde.JPG" alt="" id="BLOGGER_PHOTO_ID_5192696094785659346" border="0" /&gt;&lt;/a&gt;An Eclipse plug-in is the smallest unit of Eclipse Platform function that can be developed and delivered separately. Usually a small tool is written as a single plug-in, whereas a complex tool has its functionality split across several plug-ins. Except for a small kernel known as the Platform Runtime, all of the Eclipse Platform's functionality is located in plug-ins. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;Eclipse Plug-ins are coded in Java. A typical plug-in consists of Java code in a JAR library, some read-only files, and other resources such as images, web templates, message catalogs, native code libraries, etc. Some plug-ins do not contain code at all. One such example is a plug-in that contributes online help in the form of HTML pages. A single plug-in's code libraries and read-only content are located together in a directory in the file system, or at a base URL on a server. There is also a mechanism that permits a plug-in to be synthesized from several separate fragments, each in their own directory or URL. This is the mechanism used to deliver separate language packs for an internationalized plug-in. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;Each plug-in has a manifest file declaring its interconnections to other plug-ins. The interconnection model is simple: a plug-in declares any number of named extension points, and any number of extensions to one or more extension points in other plug-ins. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;A plug-in’s extension points can be extended by other plug-ins. For example, the workbench plug-in declares an extension point for user preferences. Any plug-in can contribute its own user preferences by defining extensions to this extension point. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;An extension point may have a corresponding API interface. Other plug-ins contribute implementations of this interface via extensions to this extension point. Any plug-in is free to define new extension points and to provide new API for other plug-ins to use. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;On start-up, the Platform Runtime discovers the set of available plug-ins, reads their manifest files, and builds an in-memory plug-in registry. The Platform matches extension declarations by name with their corresponding extension point declarations. Any problems, such as extensions to missing extension points, are detected and logged. The resulting plug-in registry is available via the Platform API. Plug-ins cannot be added after start-up. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;Plug-in manifest files contain XML. An extension point may declare additional specialized XML element types for use in the extensions. This allows the plug-in supplying the extension to communicate arbitrary information to the plug-in declaring the corresponding extension point. Moreover, manifest information is available from the plug-in registry without activating the contributing plug-in or loading of any of its code. This property is key to supporting a large base of installed plug-ins only some of which are needed in any given user session. Until a plug-in’s code is loaded, it has a negligible memory footprint and impact on start-up time. Using an XML-based plug-in manifest also makes it easier to write tools that support plug-in creation. The Plug-In Development Environment (PDE), which is included in the Eclipse SDK, is such a tool. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;A plug-in is activated when its code actually needs to be run. Once activated, a plug-in uses the plug-in registry to discover and access the extensions contributed to its extension points. For example, the plug-in declaring the user preference extension point can discover all contributed user preferences and access their display names to construct a preference dialog. This can be done using only the information from the registry, without having to activate any of the contributing plug-ins. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The contributing plug-in will be activated when the user selects a preference from a list. Activating plug-ins in this manner does not happen automatically; there are a small number of API methods for explicitly activating plug-ins. Once activated, a plug-in remains active until the Platform shuts down. Each plug-in is furnished with a subdirectory in which to store plug-in-specific data; this mechanism allows a plug-in to carry over important state between runs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The Platform Runtime declares a special extension point for applications. When an instance of the Platform is launched, the name of an application is specified via the command line; the only plug-in that gets activated initially is the one that declares that application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;By determining the set of available plug-ins up front, and by supporting a significant exchange of information between plug-ins without having to activate any of them, the Platform can provide each plug-in with a rich source of pertinent information about the context in which it is operating. This context cannot change while the Platform is running, so there is no need for complex life cycle events to inform plug-ins when the context changes. A lengthy start-up sequence is avoided, as is a common source of bugs stemming from unpredictable plug-in activation order. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The Eclipse Platform is run by a single invocation of a standard Java virtual machine. Each plug-in is assigned its own Java class loader that is solely responsible for loading its classes (and Java resource bundles). Each plug-in explicitly declares its dependence on other plug-ins from which it expects to directly access classes. A plug-in controls the visibility of the public classes and interfaces in its libraries. This information is declared in the plug-in manifest file; the visibility rules are enforced at runtime by the plug-in class loaders. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The plug-in mechanism is used to partition the Eclipse Platform itself. Indeed, separate plug-ins provides the workspace, the workbench, and so on. Even the Platform Runtime itself has its own plug-in. Non-GUI configurations of the Platform may simply omit the workbench plug-in and the other plug-ins that depend on it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The Eclipse Platform's update manager downloads and installs new features or upgraded versions of existing features (a feature being a group of related plug-ins that get installed and updated together). The update manager constructs a new configuration of available plug-ins to be used the next time the Eclipse Platform is launched. If the result of upgrading or installing proves unsatisfactory, the user can roll back to an earlier configuration. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The Eclipse Platform Runtime also provides a mechanism for extending objects dynamically. A class that implements an “adaptable” interface declares its instances open to third party behavior extensions. An adaptable instance can be queried for the adapter object that implements an interface or class. For example, workspace resources are adaptable objects; the workbench adds adapters that provide a suitable icon and text label for a resource. Any party can add behavior to existing types (both classes and interfaces) of adaptable objects by registering a suitable adapter factory with the Platform. Multiple parties can independently extend the same adaptable objects, each for a different purpose. When an adapter for a given interface is requested, the Platform identifies and invokes the appropriate factory to create it. The mechanism uses only the Java type of the adaptable object (it does not increase the adaptable object's memory footprint). Any plug-in can exploit this mechanism to add behavior to existing adaptable objects, and to define new types of adaptable objects for other plug-ins to use and possibly extend.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-994472238078965405?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/994472238078965405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=994472238078965405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/994472238078965405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/994472238078965405'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/1-eclipse-introduction.html' title='Eclipse Introduction'/><author><name>I, Me, Myself</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://images3.orkut.com/images/medium/900/4822900.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mT3fdsUZ7XI/SBAplgxB4dI/AAAAAAAAAGE/rp5vJxU6_yU/s72-c/pde.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-2714588616632845720</id><published>2008-04-23T00:14:00.000-07:00</published><updated>2008-05-08T05:35:02.551-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='emf edit'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><title type='text'>Eclipse Modeling Framework</title><content type='html'>&lt;div style="text-align: justify;" class="Section1"&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;EMF is a Java framework and code generation facility for building tools and other applications based on a structured model. For those of you that have bought into the idea of object-oriented modeling, EMF helps you rapidly turn your models into efficient, correct, and easily customizable Java code. For those of you that aren't necessarily sold on the value of formal models, EMF is intended to provide you with the same benefits and a very low cost of entry. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;So, what do we mean when we say model? When talking about modeling, we generally think about things like Class Diagrams, Collaboration Diagrams, State Diagrams, and so on. UML (Unified Modeling Language) defines a (the) standard notation for these kinds of diagrams. Using a combination of UML diagrams, a complete model of an application can be specified. This model may be used purely for documentation or, given appropriate tools, it can be used as the input from which to generate part of or, in simple cases, all of an application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;Given that this kind of modeling typically requires expensive Object Oriented Analysis and Design (OOA/D) tools, you might be questioning our assertion, above, that EMF provides a low cost of entry. The reason we can say that is because an EMF model requires just a small subset of the kinds of things that you can model in UML, specifically simple definitions of the classes and their attributes and relations, for which a full-scale graphical modeling tool is unnecessary. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;While EMF uses XMI (XML Metadata Interchange) as its canonical form of a model definition, you have several ways of getting your model into that form: &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;Create the XMI      document directly, using an XML or text editor&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;Export the XMI      document from a modeling tool such as Rational Rose&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;Annotate Java      interfaces with model properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;Use XML Schema to      describe the form of a serialization of the model&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;The first approach is the most direct, but generally only appeals to XML gurus. The second choice is the most desirable if you are already using full-scale modeling tools. The third approach provides pure Java programmers a low-cost way to get the benefits of EMF and its code generator using just a basic Java development environment (for example, Eclipse's Java Development Tools). The last approach is most applicable in creating an application that must read or write a particular XML file format. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;Once you specify an EMF model, the EMF generator can create a corresponding set of Java implementation classes. You can edit these generated classes to add methods and instance variables and still regenerate from the model as needed: your additions will be preserved during the regeneration. If the code you added depends on something that you changed in the model, you will still need to update the code to reflect those changes; otherwise, your code is completely unaffected by model changes and regeneration. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;font style="line-height: 150%;"&gt;In addition to simply increasing your productivity, building your application using EMF provides several other benefits like model change notification, persistence support including default XMI and schema-based XML serialization, a framework for model validation, and a very efficient reflective API for manipulating EMF objects generically. Most important of all, EMF provides the foundation for interoperability with other EMF-based tools and applications. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;EMF consists of two fundamental frameworks: the core framework and EMF.Edit. The core framework provides basic generation and runtime support to create Java implementation classes for a model. EMF.Edit extends and builds on the core framework, adding support for generating adapter classes that enable viewing and command-based (undoable) editing of a model, and even a basic working model editor. &lt;/p&gt;  &lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;br /&gt;&lt;font style="line-height: 150%;" face="Arial" size="11"&gt; &lt;/font&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-2714588616632845720?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/2714588616632845720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=2714588616632845720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/2714588616632845720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/2714588616632845720'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/eclipse-modeling-framework.html' title='Eclipse Modeling Framework'/><author><name>I, Me, Myself</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://images3.orkut.com/images/medium/900/4822900.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-5492085660193944923</id><published>2008-04-22T23:26:00.000-07:00</published><updated>2008-05-08T05:35:02.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ibm redbook'/><category scheme='http://www.blogger.com/atom/ns#' term='gef'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><title type='text'>Graphical Editing Framework</title><content type='html'>&lt;div style="text-align: justify;"&gt;Before we go in depth with GMF there is very much need to understand the MVC architecture of GEF and the working of EMG with GEF. This will be very useful when we start with "understanding generated GMF code".  For more details of EMF with GEF you can read through the &lt;a href="http://www.redbooks.ibm.com/abstracts/sg246302.html"&gt;IBM redbook - Eclipse Development using GEF and EMF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I will simply copy-paste the required contents as my main intention is to explain more on GMF than GEF.&lt;br /&gt;&lt;br /&gt;The Graphical Editing Framework allows us to easily develop graphical representations for existing models. It is possible to develop feature rich graphical editors using GEF.&lt;br /&gt;All graphical visualization is done via the Draw2D framework, which is a standard 2D drawing framework based on SWT from eclipse.org. The editing possibilities of the Graphical Editing Framework allow you to build graphical editors for nearly every model. With these editors, it is possible to do simple modifications to your model, like changing element properties or complex operations like changing the structure of your model in different ways at the same&lt;br /&gt;time.&lt;br /&gt;All these modifications to your model can be handled in a graphical editor using&lt;br /&gt;very common functions like drag and drop, copy and paste, and actions invoked&lt;br /&gt;from menus or toolbars.&lt;br /&gt;&lt;br /&gt;As GEF is based on an MVC architecture, every GEF-based application uses a model to represent the state of the diagrams being created and edited. GEF allows you to use any objects as model objects within your application, however, using an EMF model provides some advantages over using arbitrary objects:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;You can use EMF’s code generation facilities to produce consistent, efficient and easily customizable implementations of your model objects. If your model evolves during development, you can regenerate the code to reflect changes to the model, while preserving your customizations.&lt;/li&gt;&lt;li&gt;The MVC architecture used by GEF relies on controllers that listen for model changes and update the view in response. If you use an EMF model, notification of model change is already in place, as all EMF model objects notify change via EMF’s notification framework.&lt;/li&gt;&lt;li&gt; The implementations generated for your model objects ensure that the model remains consistent, for example, when a reference is updated, the opposite reference is also updated. &lt;/li&gt;&lt;li&gt;EMF provides support for persisting model instances, and the serialization format is easily customizable. &lt;/li&gt;&lt;li&gt;Your applications can use the reflective API provided by EMF to work with any EMF model generically.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Although we can generate EMF.Edit-based editors from EMF models using the org.eclipse.emf.codegen.ecore plug-in, these editors use JFace viewers, such as the TreeViewer to display model instances, and typically provide a view that has a one-to-one correspondence with the model. Sometimes we may wish to create editors where the view is more loosely coupled with the model. This is often the case when we want to use a graphical notation that may hide some of the detail of the underlying model objects, or may impose additional or a different structure to the model, for visualization purposes.&lt;br /&gt;We can think about using GEF and EMF together from two different perspectives; using an EMF model within a GEF application, and augmenting EMF.Edit-based editors using GEF. In this book, we focus on the first perspective only, due to time constraints. The second approach deserves a book of its own, as integrating an EMF.Edit-based editor with GEF provides its own challenges.&lt;br /&gt;&lt;br /&gt;For more details please go through the &lt;a href="http://help.eclipse.org/help33/index.jsp"&gt;GEF and Draw2D developer's guide in Eclipse help&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-5492085660193944923?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/5492085660193944923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=5492085660193944923' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/5492085660193944923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/5492085660193944923'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/graphical-editing-framework.html' title='Graphical Editing Framework'/><author><name>I, Me, Myself</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://images3.orkut.com/images/medium/900/4822900.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-5827352951402963975</id><published>2008-04-21T03:54:00.000-07:00</published><updated>2008-12-09T22:41:26.558-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical definition'/><title type='text'>GMF Introduction</title><content type='html'>&lt;div style="text-align: justify;"&gt;In the previous posts you would have learnt about the basics needed to start-off learning in-depth about Graphical Modeling Framework (GMF). I would suggest you to read this &lt;a href="http://www.eclipsezone.com/files/podcasts/1-GMF-Richard.Gronback.html"&gt;interview&lt;/a&gt; featuring Richard Gronback of GMF Project. It will give you a clear picture as to why and how GMF came into existance.&lt;br /&gt;GMF combines both GEF &amp;amp; EMF for designing powerful graphical editors on fly. GEF as described earlier is used to represent the models created using EMF. The main draw backs are 1. its time consuming, 2. editors do not have extensible features, 3. editor needs to be designed manually from scratch, 4. does not provide extensive support for entire EMF framework.&lt;br /&gt;&lt;br /&gt;Keeping these drawbacks in mind and to enhance more on it GMF was born. GMF sits on GEF and utilizes all the features of EMF and also provides its users with an editor with many re-usable components like zoom, save canvas as png file, draw otehr shapes, change fonts, colors, etc. This made GMF to be readily accepted by the community. A very good example where GMF has found its place is the &lt;a href="http://wiki.eclipse.org/MDT-UML2Tools"&gt;Eclipse UML2Tools&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;GMF basically has two main components:&lt;br /&gt;Runtime&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt; Binds EMF &amp;amp; GEF&lt;/li&gt;&lt;li&gt; Provides service layer and significant diagramming capabilities&lt;/li&gt;&lt;li&gt; Designed for extensibility&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Generation (tooling)&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt; Models used to define graphics, tooling, mapping to domain&lt;/li&gt;&lt;li&gt; Code generation targets runtime&lt;/li&gt;&lt;li&gt; Promotes use of Domain-Specific Languages&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Generation Framework:&lt;/span&gt;&lt;br /&gt;Generation framework of GMF allows users to define their custom diagram structure. &lt;span style="font-style: italic;"&gt;Graphical definition&lt;/span&gt; is used to define how exactly the diagrams of their respective models look on canvas, be it like ellipse, circle, rectangle, compartments, link with arrow decorations. &lt;span style="font-style: italic;"&gt;Tooling definition &lt;/span&gt;lets you define the tools that are to be presented in the palette. Here you can choose custom icons for every tool, group the tools in palette. GMF provides you with a "flyout" palette that can be collapsed or expanded as required. &lt;span style="font-style: italic;"&gt;Domain Mapping&lt;/span&gt; brings together all 3 graphical definition, tooling definitions and domain model (designed using EMF). After the Mapping is over, GMF provides user with a generator model that allows implementation details to be defined for generation phase. More in detail will be posted in forthcoming chapters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Runtime Framework:&lt;/span&gt;&lt;br /&gt;The production of an editor plug-in based on the generator model will target a final model; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mT3fdsUZ7XI/SCGJkf5XC4I/AAAAAAAAAHA/6UmAgnA_9ps/s1600-h/untitled.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 415px; height: 215px;" src="http://4.bp.blogspot.com/_mT3fdsUZ7XI/SCGJkf5XC4I/AAAAAAAAAHA/6UmAgnA_9ps/s320/untitled.JPG" alt="" id="BLOGGER_PHOTO_ID_5197586705092643714" border="0" /&gt;&lt;/a&gt;that is, the diagram runtime (or "notation") model. The runtime is bridge between the notation and domain model(s) when a user is working with a diagram. It also provides for the persistence and synchronization of both. The runtime not only allows easier integration between EMF and GEF, but provides additional services like: transactions support, extended meta-modeling facilities, notation meta-model, variability points used for runtime extensibility of generated code, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-5827352951402963975?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/5827352951402963975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=5827352951402963975' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/5827352951402963975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/5827352951402963975'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/gmf-introduction.html' title='GMF Introduction'/><author><name>I, Me, Myself</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://images3.orkut.com/images/medium/900/4822900.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mT3fdsUZ7XI/SCGJkf5XC4I/AAAAAAAAAHA/6UmAgnA_9ps/s72-c/untitled.JPG' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-888677058832211110</id><published>2008-04-20T23:10:00.000-07:00</published><updated>2008-05-08T05:35:02.558-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='notation model'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical model'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='generator model'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical definition'/><title type='text'>GMF Generation Freamework</title><content type='html'>The generative framework of GMF  provides the possibility to define future diagram using EMF models, and to generate code using this information. A GMF user will get all the advantages of a generative approach – fully functioning diagramming code automatically generated and easily regenerated upon model modification. Additional generator-specific variability points aid in customization of the generated code for the end-user. Generated code is optimized. As you will recognize, the generative part mostly involves working on developing a new language for describing diagrams and fits perfectly into the Generative Programming or Software Factories concepts.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;GMF defines a specific numer of  metamodels using Eclipse's EMF. Some of these meta-models will be instantiated during editor-generation. Eclipse has a GMF Dashboard view that will show how these metamodels are related to generate the GMF Editor. This looks pretty much like &lt;a href="http://wiki.eclipse.org/images/5/59/Overview.png"&gt;this&lt;/a&gt;.&lt;br /&gt;The following are the metamodels used:&lt;br /&gt;- Notation metamodel&lt;br /&gt;- Graphical Definition Metamodel&lt;br /&gt;- Tooling Definition Metamodel,&lt;br /&gt;- Mapping metamodel&lt;br /&gt;- Generator metamodel&lt;br /&gt;&lt;br /&gt;You can define graphical representations and tooling before the semantic model, as all these 3 are independently developed. I will not explain the generation framework part in much detail. GMF Tutorials are pretty good enough for using these models. If possible I can provide links to the specific tutotrials for each model.&lt;br /&gt;Eclipse has something called &lt;a href="http://wiki.eclipse.org/GMF_Documentation_Index"&gt;GMF Documentation Index&lt;/a&gt; but the index contain many repeated stuffs. I also felt that its not properly organized. There are many presentation available too. I hope this can be pretty useful to understand GMF better. &lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-888677058832211110?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/888677058832211110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=888677058832211110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/888677058832211110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/888677058832211110'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/gmf-generation-freamework.html' title='GMF Generation Freamework'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-3281340010938080417</id><published>2008-04-19T02:33:00.000-07:00</published><updated>2008-05-08T05:35:02.562-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical definition'/><title type='text'>Notational Model</title><content type='html'>&lt;div style="text-align: justify;"&gt;The notation model (&lt;a href="http://wiki.eclipse.org/images/f/f3/Notation.png"&gt;metamodel image&lt;/a&gt;) is used to store visual information necessary for diagram drawing and is independent from the underlying semantic model (instantiated from EMF metamodel). For example, it is used to store the position and size of nodes, bounds of the nodes, link bend point locations, linkcolor styles,  etc.&lt;br /&gt;The notation model is mostly based on the following sub-classes of abstract class &lt;font style="font-style: italic;"&gt;View: Diagram, Node and Edge&lt;/font&gt;. Each of these subclasses is used to store a corresponding set of properties specific for Diagram, Node or Edge visual representation, respectively. The notation model can be extended with some userdefined data by attaching specific Style to the existing View instance. Each opened diagram editor has own notation model instance attached and is actively used by the runtime as an API for storing and loading diagram-specific information.&lt;br /&gt;The unifying force of GMF is the notation meta-model which provides the concrete link between the EMF and GEF.&lt;font style=""&gt;  &lt;/font&gt;It is the scaffolding around which GMF diagram capability is built.&lt;font style=""&gt;  &lt;/font&gt;The most important aspect about the notation meta-model is that it is completely domain independent.&lt;font style=""&gt;  &lt;/font&gt;By having it be generic across domains, this allows the engine to behave in a common way and provide a common feature set that can be absorbed into those domains.&lt;font style=""&gt;  &lt;/font&gt;The only link to the semantic model is a reference stored on the View element in the hierarchy.&lt;font style=""&gt;  &lt;/font&gt;The GMF editparts always navigate to the semantic model through this reference.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-3281340010938080417?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/3281340010938080417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=3281340010938080417' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/3281340010938080417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/3281340010938080417'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/05/notational-model.html' title='Notational Model'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-2842988219931069000</id><published>2008-04-18T02:39:00.000-07:00</published><updated>2008-12-09T22:41:26.961-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical definition'/><title type='text'>Graphical Definition Model</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_DorbBswdPYM/SCLH5eSCWnI/AAAAAAAAAAg/fIohOA1PiiI/s1600-h/gmfgraphmetamodel.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;span style="text-decoration: none;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="BLOGGER_PHOTO_ID_5197936710134159986" spid="_x0000_i1025" type="#_x0000_t75" alt="" href="http://4.bp.blogspot.com/_DorbBswdPYM/SCLH5eSCWnI/AAAAAAAAAAg/fIohOA1PiiI/s1600-h/gmfgraphmetamodel.JPG" style="'width:240pt;height:126.75pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg" href="http://4.bp.blogspot.com/_DorbBswdPYM/SCLH5eSCWnI/AAAAAAAAAAg/fIohOA1PiiI/s320/gmfgraphmetamodel.JPG"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;br /&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The &lt;a href="http://wiki.eclipse.org/images/9/9d/Graphical.png"&gt;Graphical Definition model&lt;/a&gt; is instantiated to gather information about the diagram editor from a toolsmith. The graphical definition model is used to describe composition of GEF figures forming diagram elements – Nodes, Connections, Compartments and Labels. Diagram element figures can be composed either from standard GEF figures or from custom figures. Every custom figure should implement the IFigure interface. Either standard GEF&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_DorbBswdPYM/SCLKruSCWoI/AAAAAAAAAAo/c4647L-7Nrk/s320/gmfgraphmetamodel.JPG" alt="" id="BLOGGER_PHOTO_ID_5197939772445842050" border="0" /&gt; layouts or custom layouts can be used to arrange nested figures in accordance with attached layout data (Custom Layout Data). The information stored in this model is enough to generate the code of described composite figures. Generated figures can be instantiated later on by the diagram editor and used to visualize diagram elements. The graphical definition model can fully describe composite figure structures. If there is need to describe more behavioral aspect of generated figures, either custom figures should be used or generated code can be customized by user.&lt;br /&gt;Since Graphical Definition model deals only with graphical elements and have no connections to domain-model aspects, this model can be used to generate plain GEF figures for any GEFbased applications. In other words, this model could be presented as an internal model for a GEF visual editor. Moreover, Graphical Definition meta-model was designed to describe generic graphical shapes with no dependencies on GEF so this model potentially could be used as a source of information to visualize described figures using any other diagram editor(s).&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;The &lt;a href="http://wiki.eclipse.org/GMF_Tutorial"&gt;GMF tutorials&lt;/a&gt; page gives fair amount of details on how-to create graphical definitions and play around with it. For more indepth details you can also look at the &lt;a href="http://wiki.eclipse.org/GMFGraph_Hints"&gt;hints page&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-2842988219931069000?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/2842988219931069000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=2842988219931069000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/2842988219931069000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/2842988219931069000'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/05/develop-graphical-definition-model.html' title='Graphical Definition Model'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_DorbBswdPYM/SCLKruSCWoI/AAAAAAAAAAo/c4647L-7Nrk/s72-c/gmfgraphmetamodel.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-7434171501618515718</id><published>2008-04-17T03:04:00.000-07:00</published><updated>2008-05-08T05:35:02.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical definition'/><title type='text'>Tooling Definition Model</title><content type='html'>Tooling definition model is yet another important aspect of diagram editor description. It is similarly designed like the &lt;a href="http://gmfdoc.blogspot.com/2008/05/develop-graphical-definition-model.html"&gt;graphical definition model&lt;/a&gt; and it is also independent of the domain model  It includes the definitions of diagram palette (toolbar), additional main menu items, popup menus, other UI actions. This aspect of the diagram description is covered by &lt;a href="http://wiki.eclipse.org/images/2/20/Tooling.png"&gt;Tooling Definition model&lt;/a&gt;. Currently, the Tooling Definition is basically used to describe desired diagram palette tools set, The palette consists of standard tools like Selection Tool, Zoom Tool and Creation Tool. It is possible to organize tools into groups and attach appropriate icons. Based on information stored in this model, the PaletteFactory code will be generated. This model is likely to evolve in the future in order to provide user with more options. Unlike Graphical Definition model, it is not possible to generate code only using information stored in this model. The Tooling Definition model should be referenced from Mapping Model to generate reasonable code.&lt;br /&gt;&lt;br /&gt;One main problem that I faced using tooling definition was: If at all I changed the order of the tools after creating both graphical definitions and mapping model, the tools ID in the mapping model will not change. Hence I ended up drawing 'class' using 'interface' tool in class diagrams. The tooling model is mapped to domain model using some unique ID.&lt;br /&gt;Reading the &lt;a href="http://wiki.eclipse.org/GMF_Tutoria"&gt;GMF tutorial&lt;/a&gt; will help you in creating tooling definitions. Its fairly simple and understandable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-7434171501618515718?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/7434171501618515718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=7434171501618515718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/7434171501618515718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/7434171501618515718'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/05/tooling-definition-model.html' title='Tooling Definition Model'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-4018022185418572351</id><published>2008-04-16T04:28:00.000-07:00</published><updated>2008-05-09T03:02:21.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping model'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><category scheme='http://www.blogger.com/atom/ns#' term='gmf doc'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='graphical definition'/><title type='text'>Mapping Model</title><content type='html'>&lt;div style="text-align: justify;"&gt;GMF distinguishes between two independent aspects of diagram definition – &lt;a href="http://gmfdoc.blogspot.com/2008/05/develop-graphical-definition-model.html"&gt;Graphical&lt;/a&gt; and &lt;a href="http://gmfdoc.blogspot.com/2008/05/tooling-definition-model.html"&gt;Tooling.&lt;/a&gt; Another important aspect of future diagram is underlying (semantic) meta-model. Since GMF was designed to create diagrams based on EMF, this aspect is covered with a user-defined &lt;a href="http://gmfdoc.blogspot.com/2008/04/eclipse-modeling-framework.html"&gt;EMF model&lt;/a&gt; (.ecore file). To fulfill the diagram description, it is necessary to &lt;a href="http://wiki.eclipse.org/images/5/59/Overview.png"&gt;bind these three aspects together&lt;/a&gt;, and this is responsibility of &lt;a href="http://wiki.eclipse.org/GMF_Tutorial#Mapping_Definition"&gt;Mapping model&lt;/a&gt;. While working with mapping definition, the toolsmith can create such elements as: CanvasMapping, NodeMapping, &lt;a href="http://wiki.eclipse.org/GMF_Links"&gt;LinkMapping&lt;/a&gt;. These mappings are used to fully describe the diagram surface, diagram nodes, and diagram links, respectively. Each mapping connects the domain model element from EMF model with its corresponding visual representation from Graphical Definition model, and to a necessary set of tools from Tooling model. In addition, LinkMappings and NodeMappings could own &lt;a href="http://wiki.eclipse.org/GMF_Labels"&gt;LabelMappings&lt;/a&gt; used to visualize some attributes of underlying semantic model elements as a diagram labels. The &lt;a href="http://wiki.eclipse.org/GMF_Labels"&gt;LabelMapping&lt;/a&gt; keeps references to attributes from semantic model and to a Label element from Graphical Definition model. NodeMappings optionally own CompartmentMappings, which are used to logically group a set of child nodes inside compartment figure. CompartmentMapping keep a reference to Compartment from Graphical Definition model. Node and LinkMappings store all the necessary information to present some particular semantic model element as a diagram link, or a node with labels and compartments. However, this information is not enough to embed one diagram node into another. ChildReference instances were designed to solve this problem. Each Canvas or NodeMapping can contain arbitrary number of ChildReferences. A ChildReference used to point to another NodeMapping which could be located in this Canvas or NodeMapping. In addition, a ChildReference keeps the necessary information for getting corresponding semantic children and storing a newly created one. In other words, ChildReferences capture information about the child-parent relationship for different types of diagram nodes. Each Mapping model represents complete diagram description while Tooling and Graphical models are used to describe only some particular aspects of diagram definition. As a result, the same Tooling/Graphical models could be reused across different Mapping models representing different diagrams.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-4018022185418572351?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/4018022185418572351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=4018022185418572351' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/4018022185418572351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/4018022185418572351'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2008/04/mapping-model.html' title='Mapping Model'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6378418891977934688.post-1203090942258250997</id><published>2008-04-15T21:52:00.000-07:00</published><updated>2009-02-19T22:21:02.719-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmf'/><category scheme='http://www.blogger.com/atom/ns#' term='generator model'/><category scheme='http://www.blogger.com/atom/ns#' term='generation framework'/><title type='text'>Generator Model</title><content type='html'>&lt;div style="text-align: justify;"&gt;A good description of Generator Model is given &lt;a href="http://wiki.eclipse.org/GMF_GenModel"&gt;here&lt;/a&gt;. &lt;a name="The_GMF_Generator_Model_Reconciler"&gt;&lt;/a&gt;&lt;br /&gt;Graphical, Tooling definition and Mapping model (high-level models) together with EMF meta-model description completely determine future diagram structure. These models organize a kind of specific language for diagram definition.  But these high level descriptions are not well-suited for code generation tasks. A code generator needs some more generation-specific details like class/package names for some particular generated classes, and some implementation-specific parameters to allow fine-tuning of generated code, etc. Moreover, code generation templates are able to be significantly simplified by introducing a specific Generator model.&lt;br /&gt;&lt;br /&gt;This model operates as an intermediary between code level and design level with elements like: GenPlugin (used to hold necessary parameters for generating Eclipse plug-in), GenDiagram (used to generate diagram editor), GenClass (used to generate GEF EditParts and EditPolicies), etc. The idea of this model is to reflect all of the necessary details and simplify the code generation process as much as possible by moving some parts of code generator logic to the process of transformation from high-level GMF models to the Generator model.&lt;br /&gt;&lt;br /&gt;GMF significantly reorganizes the diagram description while creating Generator model. The transformation from high-level GMF models to Generator model is not one-to-one transformation. GMF uses an internal, transparent transformation from the map model to the gmfgen model. GMF generator has a property that allows generated code to store model elements in two ways: Either as     Single file keeping diagram visual information together with model structure or     Two different files - first for model contents and second for diagram-specific visual information. The structure of model file in this situation will correspond to the file structure created by standard generated EMF editor for this domain model.&lt;br /&gt;&lt;br /&gt;Most of the diagram code can be generated without any modifications to the Generator model that is created by automatic transformation process, or with simple modifications like:&lt;br /&gt;changing diagramming plug-in name, ID, package statements, etc. These changes can be done in dedicated places in the Generator model so it is not necessary to change properties of all the elements in Generator model. Corresponding changes should be preserved on the next high-level model -&gt; Generator model transformation such that a toolsmith will be able to change the high-level models later on and regenerate diagramming code for the updated description.&lt;br /&gt;&lt;br /&gt;For more details on gmfgen model hints and properties supported, you can refer to &lt;a href="http://wiki.eclipse.org/GMF_GenModel_Hints"&gt;this &lt;/a&gt;Eclipse wiki page.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6378418891977934688-1203090942258250997?l=gmfdoc.smargav.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gmfdoc.smargav.com/feeds/1203090942258250997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6378418891977934688&amp;postID=1203090942258250997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/1203090942258250997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6378418891977934688/posts/default/1203090942258250997'/><link rel='alternate' type='text/html' href='http://gmfdoc.smargav.com/2009/02/generator-model.html' title='Generator Model'/><author><name>Amit S</name><uri>http://www.blogger.com/profile/07460965113500342158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://bp0.blogger.com/_DorbBswdPYM/SCKGJuSCWkI/AAAAAAAAAAM/1Q1RNJVfhOM/S220/4822900.jpg'/></author><thr:total>0</thr:total></entry></feed>
