blob: dbdf44cc9ba0cf3a5c0231702d658bbd5ea696fa [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
>
<channel>
<title>Epsilon Weblog</title>
<atom:link href="http://epsilonblog.wordpress.com/feed/" rel="self" type="application/rss+xml" />
<link>http://epsilonblog.wordpress.com</link>
<description>... new and noteworthy in the Epsilon Eclipse GMT component</description>
<lastBuildDate>Thu, 15 Apr 2010 11:39:24 +0000</lastBuildDate>
<language>en</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.com/</generator>
<cloud domain='epsilonblog.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
<url>http://0.gravatar.com/blavatar/cb1a619b4d489ef5780b3b2543218f9e?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
<title>Epsilon Weblog</title>
<link>http://epsilonblog.wordpress.com</link>
</image>
<atom:link rel="search" type="application/opensearchdescription+xml" href="http://epsilonblog.wordpress.com/osd.xml" title="Epsilon Weblog" />
<atom:link rel='hub' href='http://epsilonblog.wordpress.com/?pushpress=hub'/>
<item>
<title>Epsilon Flock</title>
<link>http://epsilonblog.wordpress.com/2010/04/15/epsilon-flock/</link>
<comments>http://epsilonblog.wordpress.com/2010/04/15/epsilon-flock/#comments</comments>
<pubDate>Thu, 15 Apr 2010 11:39:24 +0000</pubDate>
<dc:creator>Louis Rose</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=149</guid>
<description><![CDATA[We&#8217;ve just released Epsilon v0.8.9, which includes many improvements and bug fixes, as well as a new task-specific language, Epsilon Flock. Epsilon Flock is a model-to-model transformation language tailored for migrating models following changes to their metamodels. In some cases, specifying migration with existing model-to-model transformation languages can be cumbersome. For example, consider the ETL code [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=149&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>We&#8217;ve just released Epsilon v0.8.9, which includes many improvements and bug fixes, as well as a new task-specific language, Epsilon Flock. Epsilon Flock is a model-to-model transformation language tailored for migrating models following changes to their metamodels.</p>
<p>In some cases, specifying migration with existing model-to-model transformation languages can be cumbersome. For example, consider the ETL code below, for migrating Persons to a metamodel that has extracted a Telephone class:</p>
<pre><code>rule Person2Person
transform old : Old!Person
to p : New!Person {
p.name = old.name;
p.address = old.address;
p.gender = old.gender;
p.dob = old.dob;
p.telephoneNumber = new New!TelephoneNumber;
p.telephoneNumber.areaCode = old.areaCode;
p.telephoneNumber.number = old.number;
}</code></pre>
<p>In the transformation above, there is some redundancy. Firstly, model elements that have not been affected by the metamodel evolution (such as name, address, gender and dob), must be copied from old to new Persons. In Epsilon Flock, the values of these features are copied automatically. Secondly, the Person rule must define a source type and variable and a target type  and variable. In Epsilon Flock, migration rules are scoped to a single type, and two built-in variables (original and migrated) are used to access old and new Persons. The following Epsilon Flock code is equivalent to the ETL above:</p>
<pre><code>migrate Person {
migrated.telephoneNumber = new Migrated!TelephoneNumber;
migrated.telephoneNumber.areaCode = original.areaCode;
migrated.telephoneNumber.number = original.number;
}</code></pre>
<p>Epsilon Flock also provides concise mechanisms for changing the type of  and deleting model elements, and we have plans to enhance the language in future versions of Epsilon.</p>
<p>We&#8217;ve added to the Epsilon website documentation, an <a title="Flock example" href="http://www.eclipse.org/gmt/epsilon/examples/index.php?example=org.eclipse.epsilon.examples.flock.petrinets" target="_blank">example</a> and a <a title="Flock screencast" href="http://www.eclipse.org/gmt/epsilon/cinema/#FlockPetrinets" target="_blank">screencast</a> to help you get started with Epsilon Flock. There&#8217;s also a <a href="http://www.cs.york.ac.uk/ftpdir/reports/2010/YCS/450/YCS-2010-450.pdf">technical report</a>, which includes examples of Epsilon Flock for migrating a Petri nets model and a UML class diagram. The Epsilon Flock paper will appear at <a title="ICMT 2010" href="http://www.model-transformation.org/ICMT2010/">ICMT 2010</a> in late June. As always, please do leave questions and feedback in the <a href="http://www.eclipse.org/forums/index.php?t=thread&amp;frm_id=22">Epsilon Forum</a>, and we&#8217;ll get back to you.</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/149/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/149/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=149&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2010/04/15/epsilon-flock/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<media:content url="http://0.gravatar.com/avatar/6634d495dd596083ec80398d6fbe563a?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Louis Rose</media:title>
</media:content>
</item>
<item>
<title>EuGENia: Polishing your GMF editor</title>
<link>http://epsilonblog.wordpress.com/2009/06/15/eugenia-polishing-your-gmf-editor/</link>
<comments>http://epsilonblog.wordpress.com/2009/06/15/eugenia-polishing-your-gmf-editor/#comments</comments>
<pubDate>Mon, 15 Jun 2009 14:09:36 +0000</pubDate>
<dc:creator>Dimitris Kolovos</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=136</guid>
<description><![CDATA[EuGENia is a front-end for GMF that enables developers to generate a fully functional GMF editor by attaching a few high-level annotations to the Ecore metamodel. The original aim of EuGENia was to lower the entrance barrier for new GMF users and enable people to quickly and easily develop the first version of their editor. [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=136&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p><a href="http://www.eclipse.org/gmt/epsilon/doc/eugenia" target="_blank">EuGENia</a> is a front-end for GMF that enables developers to generate a fully functional GMF editor by attaching a few high-level annotations to the Ecore metamodel. The original aim of EuGENia was to lower the entrance barrier for new GMF users and enable people to quickly and easily develop the first version of their editor.</p>
<p>However, after the initial excitement of (at last) being able to get a working GMF editor with minimal effort and no cryptic error messages, all users (including ourselves) used to come to a dead-end. EuGENia could generate an editor that looked 90% similar to what we wanted but when we started polishing the .gmfgraph, .gmftool, .gmfmap and .gmfgen models manually to get to 100%, it meant we couldn&#8217;t use EuGENia any more as subsequent invocations of the tool would overwrite our manual changes. Obviously, providing support in EuGENia for all the options that GMF provides wouldn&#8217;t be reasonable either as this would progressively make EuGENia as complex as GMF itself.</p>
<p>Our first thought was to try merging (instead of overwriting) the generated with the existing GMF models, but due to the complexity and inter-weaving of these models we’ve found no sensible way of doing this in an automated way. Therefore, we’ve come up with a different solution.</p>
<p>Behind the scenes, EuGENia runs set of model-to-model transformations written in <a href="http://www.eclipse.org/gmt/epsilon/doc/eol" target="_blank">EOL</a> which generate the necessary GMF models from the annotated Ecore metamodel. In order to accommodate the need for persistent customizations, we’re now allowing developers to specify their own little EOL scripts next to the annotated Ecore metamodel, which are responsible for customizing the generated GMF models.</p>
<p>Let’s go straight into a short example. We define this minimal flowchart metamodel using Emfatic.</p>
<pre style="font-size:11px;">@namespace(uri="flowchart", prefix="flowchart")
package flowchart;
@gmf.diagram(foo="bar")
class Flowchart {
val Node[*] nodes;
val Transition[*] transitions;
}
@gmf.node(label="name", label.icon="false")
abstract class Node {
attr String name;
ref Transition[*]#source outgoing;
ref Transition[*]#target incoming;
}
@gmf.link(label="name", source="source",
target="target", target.decoration="arrow")
class Transition {
attr String name;
ref Node#outgoing source;
ref Node#incoming target;
}
class Subflow extends Flowchart, Node{
}
@gmf.node(figure=
"org.eclipse...examples.flowchart.diagram.figures.SquareFigure")
class Action extends Node {
}
@gmf.node(figure=
"org.eclipse...examples.flowchart.diagram.figures.DiamondFigure")
class Decision extends Node {
}</pre>
<p>We then use EuGENia to generate a GMF editor out of it and here is what we get:</p>
<p><a href="http://epsilonblog.files.wordpress.com/2009/06/image.png"><img style="border-width:0;" src="https://epsilonblog.files.wordpress.com/2009/06/image_thumb.png?w=469&#038;h=442" border="0" alt="image" width="469" height="442" /></a></p>
<p>However, what we’d really like to get is this (spot the differences?)</p>
<p><a href="http://epsilonblog.files.wordpress.com/2009/06/image1.png"><img src="https://epsilonblog.files.wordpress.com/2009/06/image_thumb1.png?w=469&#038;h=442" border="0" alt="image" width="469" height="442" /></a></p>
<p>To achieve this we need to tweak a few things in the flowchart.gmfgraph model:</p>
<p><a href="http://epsilonblog.files.wordpress.com/2009/06/image2.png"><img style="border-width:0;" src="https://epsilonblog.files.wordpress.com/2009/06/image_thumb2.png?w=404&#038;h=528" border="0" alt="image" width="404" height="528" /></a></p>
<p>We can either do these changes manually after every invocation of EuGENia (boring), or specify the changes in the following ECore2GMF.eol script next to our metamodel.</p>
<p><a href="http://epsilonblog.files.wordpress.com/2009/06/image3.png"><img style="border-width:0;" src="https://epsilonblog.files.wordpress.com/2009/06/image_thumb3.png?w=267&#038;h=323" border="0" alt="image" width="267" height="323" /></a></p>
<p><strong>ECore2GMF.eol:</strong></p>
<pre style="font-size:11px;">-- Set text of transitionLabel to empty string
var transitionLabel = GmfGraph!Label.
selectOne(l|l.name='TransitionLabelLabel');
transitionLabel.text = '';
-- Add bold font to actionLabel
var actionLabel = GmfGraph!Label.
selectOne(l|l.name='ActionLabelFigure');
actionLabel.font = new GmfGraph!BasicFont;
actionLabel.font.style = GmfGraph!FontStyle#BOLD;
-- Add italic font to actionLabel
var decisionLabel = GmfGraph!Label.
selectOne(l|l.name='DecisionLabelFigure');
decisionLabel.font = new GmfGraph!BasicFont;
decisionLabel.font.style = GmfGraph!FontStyle#ITALIC;</pre>
<p>Now, each time we click <em>Eugenia-&gt;Generate GMF tool, graph and map models</em>, EuGENia will perform the built-in transformation and then it will also run our custom script on the generated models so that we can get the tailored output we need. Similarly, by specifying a transformation named FixGMFGen.eol we can customize the generated .gmfgen model (in this example we <a href="http://dev.eclipse.org/svnroot/modeling/org.eclipse.gmt.epsilon/trunk/examples/org.eclipse.epsilon.eugenia.examples.flowchart/model/FixGMFGen.eol" target="_blank">add a dependency</a> to the figures plugin).</p>
<p>Except for enabling developers to now use EuGENia throughout the GMF editor development process, this extension also provides a good evolution mechanism for EuGENia itself. Reoccurring scripts will be good candidates for inclusion in the form of high-level annotations, that will be natively supported by future versions of the tool.</p>
<p>The complete source code of this example is available (projects named org.eclipse.epsilon.eugenia.examples.flowchart.*) in the <a href="http://dev.eclipse.org/svnroot/modeling/org.eclipse.gmt.epsilon/trunk/examples" target="_blank">SVN</a>. You can also find another example, as well as more technical details about this extension <a href="http://epsilonlabs.wiki.sourceforge.net/EuGENia+Customization" target="_blank">here</a>.</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/136/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/136/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=136&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2009/06/15/eugenia-polishing-your-gmf-editor/feed/</wfw:commentRss>
<slash:comments>9</slash:comments>
<media:content url="http://1.gravatar.com/avatar/7c3777a06d6d0861869ef58dbfe1e26c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Dimitris Kolovos</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/06/image_thumb.png" medium="image">
<media:title type="html">image</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/06/image_thumb1.png" medium="image">
<media:title type="html">image</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/06/image_thumb2.png" medium="image">
<media:title type="html">image</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/06/image_thumb3.png" medium="image">
<media:title type="html">image</media:title>
</media:content>
</item>
<item>
<title>New in Epsilon 0.8.5</title>
<link>http://epsilonblog.wordpress.com/2009/05/24/new-in-epsilon-0-8-5/</link>
<comments>http://epsilonblog.wordpress.com/2009/05/24/new-in-epsilon-0-8-5/#comments</comments>
<pubDate>Sun, 24 May 2009 02:58:39 +0000</pubDate>
<dc:creator>Dimitris Kolovos</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=108</guid>
<description><![CDATA[Apart from adding support for managing inconsistent EMF models with HUTN, and fixing several bugs, version 0.8.5 of Epsilon also includes a few new and noteworthy features. Use of = both for assignment and for comparison As EOL builds on OCL, it (re)uses = for comparison (e.g. if (a = b) {&#8230;}) and := for [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=108&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>Apart from adding support for <a href="http://epsilonblog.wordpress.com/2009/04/27/managing-inconsistent-models-with-hutn/" target="_blank">managing inconsistent EMF models with HUTN</a>, and fixing several <a href="https://bugs.eclipse.org/bugs/buglist.cgi?product=gmt&amp;component=Epsilon&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time" target="_blank">bugs</a>, version 0.8.5 of Epsilon also includes a few new and noteworthy features.</p>
<p><strong>Use of = both for assignment and for comparison</strong></p>
<p>As EOL builds on OCL, it (re)uses = for comparison (e.g. if (a = b) {&#8230;}) and := for assignment (e.g. a := b;). As <a href="http://epsilonblog.wordpress.com/2009/04/20/test-driven-development-for-epsilon/" target="_blank">Louis reported here</a>, this has been a source of confusion and well-camouflaged errors because when a mistyped a = b; assignment statement is executed, it will do nothing, but will not complain either. To deal with this we decided to follow the old <a href="http://en.wikipedia.org/wiki/Visual_Basic" target="_blank">VB6</a> paradigm and support = both for assignment (in addition to the := that of course still works) and for comparison. Therefore, since 0.8.5 the following code runs just fine:</p>
<pre style="font-size:11px;">var x = 2;
(x*x).println(); -- prints 4</pre>
<p><strong>Support for additional options in EuGENia</strong></p>
<p>We&#8217;ve added support for several more options to <a href="http://epsilonblog.wordpress.com/2008/08/04/eugenia-kick-start-your-gmf-editor-development/" target="_blank">EuGENia</a> (the front-end provided by Epsilon for simplifying the development of GMF editors), such as for specifying if the model and the diagram are to be stored in the single file, for defining the extensions of the model and diagram files etc. A complete list of the supported options is available <a href="http://epsilonlabs.wiki.sourceforge.net/EuGENia" target="_blank">here</a>. Kudos to Michael Moser for putting in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=265285" target="_blank">these</a> <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=265609" target="_blank">requests</a> for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268085" target="_blank">enhancement</a> in the bugzilla.</p>
<p><strong>Support for float and double numbers in EOL</strong></p>
<p>The EOL Real type now provides support both for Double and for Float numbers (only floats were supported up to 0.8.4). Kudos to Aleksander Bandelj for raising <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270570" target="_blank">this issue</a> in the bugzilla.</p>
<p><strong>ANT tasks for EMF models</strong></p>
<p>The new epsilon.emf.loadModel task has been added to the list of Epsilon ANT tasks as an alternative for the generic &#8211; but more cumbersome &#8211; epsilon.loadModel task. Using the new task, a sample UML model can be loaded as follows:</p>
<pre style="font-size:11px;">&lt;project default="main"&gt;
&lt;target name="main"&gt;
&lt;epsilon.emf.loadModel
name="MyUMLModel"
modelfile="sample.uml"
metamodeluri="http://www.eclipse.org/uml2/2.1.0/UML"
read="true"
store="false"
/&gt;
&lt;epsilon.eol&gt;
MyUMLModel!Class.all.size().println();
&lt;model ref="MyUMLModel"/&gt;
&lt;/epsilon.eol&gt;
&lt;/target&gt;
&lt;/project&gt;</pre>
<p>We&#8217;ve also added two more EMF-specific tasks. The epsilon.emf.register task, which registers the EPackages of an Ecore file to the EPackage registry:</p>
<pre style="font-size:11px;">&lt;project default="main"&gt;
&lt;target name="main"&gt;
&lt;epsilon.emf.register
file="sample.ecore"
/&gt;
&lt;/target&gt;
&lt;/project&gt;</pre>
<p>and the epsilon.emf.loadRegisteredMetamodel which can load a registered EPackage as a model that can be then accessed by other Epsilon tasks:</p>
<pre style="font-size:11px;">&lt;project default="main"&gt;
&lt;target name="main"&gt;
&lt;epsilon.emf.loadRegisteredMetamodel
name="UMLM2"
metamodeluri="http://www.eclipse.org/uml2/2.1.0/UML"
/&gt;
&lt;epsilon.eol&gt;
UMLM2!EClass.all.size().println(); -- Prints 246
&lt;model ref="UMLM2"/&gt;
&lt;/epsilon.eol&gt;
&lt;/target&gt;
&lt;/project&gt;</pre>
<p>We are working on more enhancements, such as support for multiple iterators in first order logic operations (kudos to Edd Turner), and Java-ifications for the upcoming 0.8.6 which will be made available in late June. Stay tuned!</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/108/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/108/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=108&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2009/05/24/new-in-epsilon-0-8-5/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<media:content url="http://1.gravatar.com/avatar/7c3777a06d6d0861869ef58dbfe1e26c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Dimitris Kolovos</media:title>
</media:content>
</item>
<item>
<title>Managing Inconsistent Models with HUTN</title>
<link>http://epsilonblog.wordpress.com/2009/04/27/managing-inconsistent-models-with-hutn/</link>
<comments>http://epsilonblog.wordpress.com/2009/04/27/managing-inconsistent-models-with-hutn/#comments</comments>
<pubDate>Mon, 27 Apr 2009 12:53:10 +0000</pubDate>
<dc:creator>Louis Rose</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=88</guid>
<description><![CDATA[A model and metamodel are consistent when the metamodel specifies every concept used in the model definition. A metamodel can evolve (be adapted by a developer), which can cause inconsistency. We&#8217;ve recently added a tool to Epsilon, the HUTN / XMI bridge, that seeks to aid developers in manually managing inconsistency. HUTN, an OMG standard, [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=88&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>A model and metamodel are<span> </span><strong><em>consistent</em></strong><span> </span>when the meta<span>model specifies every concept used in the model definition. A metamodel can evolve (be adapted by a developer), which can cause in<span>consistency. We&#8217;ve recently added a tool to Epsilon, the HUTN / XMI bridge, that seeks to aid developers in manually managing inconsistency.</span></span></p>
<p>HUTN, an OMG standard, specifies a human-usable, textual notation for MOF-based models. Epsilon provides an implementation of HUTN for Ecore-based models. HUTN can be thought of as an alternative concrete syntax to XMI. While XMI is optimised for use by machines, HUTN is optimised for use by humans. We discuss HUTN in more detail in <a title="Constructing Models with HUTN at MoDELS '08" href="http://dx.doi.org/10.1007/978-3-540-87875-9_18">this paper at MoDELS 2008</a>.</p>
<p>We have recently extended our HUTN implementation to include an XMI bridge, which allows us to generate HUTN source code from EMF models. Furthermore, the HUTN / XMI bridge can be used to report inconsistencies between a model and its metamodel, and to resolve those inconsistencies using a human-usable notation.</p>
<p><strong>Example</strong></p>
<p>To demonstrate the HUTN / XMI bridge, here&#8217;s a short example. Below is an exemplar metamodel, along with a sample model:</p>
<p><img class="aligncenter size-full wp-image-90" title="channels_mm_before" src="https://epsilonblog.files.wordpress.com/2009/04/channels_mm_before.png?w=386&#038;h=198" alt="channels_mm_before" width="386" height="198" /><img class="aligncenter size-full wp-image-91" title="channels_model_before" src="https://epsilonblog.files.wordpress.com/2009/04/channels_model_before.png?w=450&#038;h=293" alt="channels_model_before" width="450" height="293" /></p>
<p>Channel B has ConnectionPoint both?! as its reader and as its writer.</p>
<p>Suppose we now wish to make distinct ConnectionPoints that are used for writing and ConnectionPoints that are used for reading. We may elect to change our metamodel, as shown in the diagram below:<img class="aligncenter size-full wp-image-92" title="channels_mm_after" src="https://epsilonblog.files.wordpress.com/2009/04/channels_mm_after.png?w=415&#038;h=339" alt="channels_mm_after" width="415" height="339" />When we try to load our model with EMF, we receive a single error, stating, for example, that &#8220;The class &#8216;ConnectionPoint&#8217; is not a valid classifier.&#8221; By contrast, the HUTN/XMI bridge is able to produce a complete list of the inconsistencies:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-94" title="channels_model_hutn_xmi_errors" src="https://epsilonblog.files.wordpress.com/2009/04/channels_model_hutn_xmi_errors.png?w=450&#038;h=147" alt="channels_model_hutn_xmi_errors" width="450" height="147" /><em>(Produced by the <strong>Check Consistency</strong> option, available by right-clicking a .model file).</em></p>
<p>To aid developers in resolving consistency, the HUTN / XMI bridge can generate HUTN from a model&#8217;s XMI, even when that model is inconsistent with its metamodel:</p>
<p><img class="aligncenter size-full wp-image-95" title="channels_hutn_with_errors" src="https://epsilonblog.files.wordpress.com/2009/04/channels_hutn_with_errors.png?w=450&#038;h=400" alt="channels_hutn_with_errors" width="450" height="400" /></p>
<p>Once there are no further inconsistencies, HUTN can be used to generate a model that is now consistent with its metamodel.</p>
<p><strong>Related Work</strong></p>
<p>The HUTN / XMI bridge is a tool for manually managing inconsistency between models and metamodels. There are situations in which an automatic approach is more suitable. For example, perhaps you have a large number of inconsistent models. In those situations, we&#8217;d recommend using a different tool, such as <a title="Couple Evolution of Metamodels and Models for EMF" href="http://cope.in.tum.de/pmwiki.php">COPE</a>. You may also be interested in <a title="Antonio Cicchetti's publications" href="http://www.di.univaq.it/cicchetti/index.php?pageId=publications">Antonio Cicchetti&#8217;s work</a>; Cicchetti advocates a fundamentally different approach to the one used in COPE.</p>
<p><strong>Installation</strong></p>
<p>If you&#8217;d like to try the HUTN / XMI bridge, it&#8217;s available from the Epsilon SVN repository (<a title="Instructions for accessing the Epsilon SVN repository" href="http://www.eclipse.org/gmt/epsilon/doc/EpsilonSVN.pdf">access instructions</a>). <span style="text-decoration:line-through;">It will also appear in the upcoming 0.7.5 HUTN release</span><strong>*</strong>. We&#8217;ll be adding new features and fixing problems per user requests &#8211; do drop by the <a href="news://news.eclipse.org/eclipse.epsilon">Epsilon newsgroup</a> if you have questions, problems or suggestions.</p>
<p><strong>* [Update 27/04/09]</strong> The HUTN XMI Bridge is included in HUTN 0.7.5, which was released today, as part of Epsilon 0.8.5.<strong> </strong></p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/88/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/88/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=88&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2009/04/27/managing-inconsistent-models-with-hutn/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
<media:content url="http://0.gravatar.com/avatar/6634d495dd596083ec80398d6fbe563a?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Louis Rose</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/04/channels_mm_before.png" medium="image">
<media:title type="html">channels_mm_before</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/04/channels_model_before.png" medium="image">
<media:title type="html">channels_model_before</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/04/channels_mm_after.png" medium="image">
<media:title type="html">channels_mm_after</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/04/channels_model_hutn_xmi_errors.png" medium="image">
<media:title type="html">channels_model_hutn_xmi_errors</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/04/channels_hutn_with_errors.png" medium="image">
<media:title type="html">channels_hutn_with_errors</media:title>
</media:content>
</item>
<item>
<title>Test-Driven Development for Epsilon</title>
<link>http://epsilonblog.wordpress.com/2009/04/20/test-driven-development-for-epsilon/</link>
<comments>http://epsilonblog.wordpress.com/2009/04/20/test-driven-development-for-epsilon/#comments</comments>
<pubDate>Mon, 20 Apr 2009 11:45:31 +0000</pubDate>
<dc:creator>Louis Rose</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=85</guid>
<description><![CDATA[Test-Driven Development (TDD) is an approach to software development that advocates writing tests before implementation. TDD has many advantages when compared to other forms of development, in which tests are often an after-thought. Proponents argue that TDD produces clean interfaces, minimal implementations and a suite of tests that can be used to guard against regressions. [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=85&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>Test-Driven Development (TDD) is an approach to software development that advocates writing tests before implementation. TDD has many advantages when compared to other forms of development, in which tests are often an after-thought. Proponents argue that TDD produces clean interfaces, minimal implementations and a suite of tests that can be used to guard against regressions. (See &#8220;TDD by Example,&#8221; Beck and, to some extent, &#8220;Refactoring,&#8221; Fowler).</p>
<p>In the past, we&#8217;ve been reluctant to construct automated unit tests for Epsilon, largely because we lacked structures and processes for constructing and checking models in the context of a testing framework, such as jUnit.</p>
<p>Since developing HUTN, we&#8217;ve been discovering/inventing/hallucinating patterns for constructing and checking models that allowed us to construct tests that were readable and malleable. This week, we wanted to make an enhancement to EOL, and, using these patterns, I was able to do so in a (more) test-driven manner.</p>
<p>EOL defines distinct operators for comparing expressions and for performing assignment. The concrete syntax is = for the former and := for the latter. We&#8217;ve found that we&#8217;ve had a few reports of code like the following:</p>
<pre style="font-size:11px;">var a : Integer;
a = 2;</pre>
<p>EOL compares a and 2 in the second line, rather than assigning a to 2.</p>
<p>We decided that we could change EOL to rewrite statements whose first operator was = to an equivalent statement whose first operator was :=</p>
<p>I started by defining some tests that exercised the EOL execution engine with the old behaviour and with the new behaviour:</p>
<pre style="font-size:11px;">private static final EolEvaluator evaluator = new EolEvaluator();
@Test
public void assignment() {
evaluator.execute("var a; a := 1 + 2;");
assertEquals(new EolInteger(3), evaluator.evaluate("a"));
}
@Test
public void equalityActsAsAssignment() {
evaluator.execute("var a; a = 1 + 2;");
assertEquals(new EolInteger(3), evaluator.evaluate("a"));
}</pre>
<p>I&#8217;m using the EolEvaluator class, which decorates the EOL execution engine and can be used to execute small snippets of EOL code.</p>
<p>The first test passed, and the second test failed as expected. Typically, we&#8217;d now define some unit tests on the unit that needs to change to accommodate those changes, but I&#8217;ll leave that as an exercise for your imagination.</p>
<p>Crucially, because I&#8217;d used TDD, I felt comfortable editing a piece of code that I&#8217;d not developed, and never touched before &#8211; I had tests that verified (to some extent) my work. Plus, we&#8217;ve got tests that guard against regression in this part of EOL.</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/85/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/85/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=85&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2009/04/20/test-driven-development-for-epsilon/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<media:content url="http://0.gravatar.com/avatar/6634d495dd596083ec80398d6fbe563a?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Louis Rose</media:title>
</media:content>
</item>
<item>
<title>Epsilon + AppEngine + Ajax = Epsilon Live</title>
<link>http://epsilonblog.wordpress.com/2009/04/16/epsilon-appengine-ajax-epsilon-live/</link>
<comments>http://epsilonblog.wordpress.com/2009/04/16/epsilon-appengine-ajax-epsilon-live/#comments</comments>
<pubDate>Thu, 16 Apr 2009 10:16:43 +0000</pubDate>
<dc:creator>Dimitris Kolovos</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/2009/04/16/epsilon-appengine-ajax-epsilon-live/</guid>
<description><![CDATA[The Epsilon website already includes several screencasts and examples that demonstrate the tools and languages it provides. The preview release of the Google App Engine for Java has made it possible to go one step further and allow people to actually write and execute EOL (the core language of Epsilon) programs straight from their browser [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=84&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>The Epsilon website already includes several <a href="http://www.eclipse.org/gmt/epsilon/cinema/">screencasts</a> and <a href="http://www.eclipse.org/gmt/epsilon/examples">examples</a> that demonstrate the tools and languages it provides. The preview release of the <a href="http://appengine.google.com">Google App Engine</a> for Java has made it possible to go one step further and allow people to actually write and execute EOL (the core language of Epsilon) programs straight from their browser without needing to download or install anything.</p>
<p><a href="http://epsilonblog.files.wordpress.com/2009/04/image2.png"><img style="border-width:0;" height="480" alt="image" src="https://epsilonblog.files.wordpress.com/2009/04/image-thumb2.png?w=564&#038;h=480" width="564" border="0"></a> </p>
<p><a href="http://www.eclipse.org/gmt/epsilon/live">http://www.eclipse.org/gmt/epsilon/live</a> includes an editor where one can write and execute EOL scripts, and a console that captures their output. Apart from playing with the basic features of EOL (variables, control flow structures etc.) one can also query/modify a live EMF model (which for simplicity is Ecore itself). To help you get started, the page also provides a number of ready-to-run scripts as a starting point for further exploration.</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/84/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/84/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=84&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2009/04/16/epsilon-appengine-ajax-epsilon-live/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
<media:content url="http://1.gravatar.com/avatar/7c3777a06d6d0861869ef58dbfe1e26c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Dimitris Kolovos</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/04/image-thumb2.png" medium="image">
<media:title type="html">image</media:title>
</media:content>
</item>
<item>
<title>The EMF EPackage Registry View</title>
<link>http://epsilonblog.wordpress.com/2009/02/13/the-emf-epackage-registry-view/</link>
<comments>http://epsilonblog.wordpress.com/2009/02/13/the-emf-epackage-registry-view/#comments</comments>
<pubDate>Fri, 13 Feb 2009 21:24:44 +0000</pubDate>
<dc:creator>Dimitris Kolovos</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/2009/02/13/the-emf-epackage-registry-view/</guid>
<description><![CDATA[The EPackage registry (EPackage.Registry.INSTANCE) contains references to all registered ECore EPackages in EMF. To visualise the contents of the registry, we have implemented the following EPackage Registry view. Using this view, one can browse through the EClasses contained in each registered EPackage, discover the super/sub types of each EClass, and navigate through its features and [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=66&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>The EPackage registry (EPackage.Registry.INSTANCE) contains references to all registered ECore EPackages in EMF. To visualise the contents of the registry, we have implemented the following EPackage Registry view.</p>
<p><a href="http://epsilonblog.files.wordpress.com/2009/02/image.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="335" alt="image" src="https://epsilonblog.files.wordpress.com/2009/02/image-thumb.png?w=404&#038;h=335" width="404" border="0"></a> </p>
<p>Using this view, one can browse through the EClasses contained in each registered EPackage, discover the super/sub types of each EClass, and navigate through its features and operations. The view provides options to show/hide derived features, operations, inherited features and opposite references, supports quick navigation from a feature to it&#8217;s type (double-click), and integrates with the Properties view. </p>
<p>If you&#8217;d like to give it a spin, it comes as a part of <a href="http://www.eclipse.org/gmt/epsilon">Epsilon</a> 0.8.3 (or later) and can be installed via the <a href="http://download.eclipse.org/modeling/gmt/epsilon/updates">update site</a>.</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/66/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/66/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=66&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2009/02/13/the-emf-epackage-registry-view/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<media:content url="http://1.gravatar.com/avatar/7c3777a06d6d0861869ef58dbfe1e26c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Dimitris Kolovos</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2009/02/image-thumb.png" medium="image">
<media:title type="html">image</media:title>
</media:content>
</item>
<item>
<title>Error Markers and Quick Fixes in GMF editors using EVL</title>
<link>http://epsilonblog.wordpress.com/2008/11/09/error-markers-and-quick-fixes-in-gmf-editors-using-evl/</link>
<comments>http://epsilonblog.wordpress.com/2008/11/09/error-markers-and-quick-fixes-in-gmf-editors-using-evl/#comments</comments>
<pubDate>Sun, 09 Nov 2008 13:30:51 +0000</pubDate>
<dc:creator>Dimitris Kolovos</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=59</guid>
<description><![CDATA[The Epsilon Validation Language (EVL) is a model validation language that provides additional features to OCL, such as guards, constraint dependency management, user interaction, access to Java objects, and the ability to specify a number of fixes for each constraint, that the user can invoke if the constraint fails in order to repair the model. [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=59&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>The Epsilon Validation Language (EVL) is a model validation language that provides additional features to OCL, such as guards, constraint dependency management, user interaction, access to Java objects, and the ability to specify a number of <em>fixes</em> for each constraint, that the user can invoke if the constraint fails in order to repair the model. We&#8217;ve been recently working on integrating EVL with GMF so that failed constraints can appear as error/warning markers in GMF editors, and fixes can be invoked using the standard Quick Fix mechanism. An example follows:</p>
<p>The following screenshot shows a file system model in a GMF-based editor (constructed <a href="http://epsilonblog.wordpress.com/2008/08/04/eugenia-kick-start-your-gmf-editor-development/">here</a>).</p>
<p><a href="http://epsilonblog.files.wordpress.com/2008/11/filesystem.png"><img style="border-width:0;" height="322" alt="FileSystem" src="https://epsilonblog.files.wordpress.com/2008/11/filesystem-thumb.png?w=438&#038;h=322" width="438" border="0"></a> </p>
<p>We now specify the following EVL constraints and bind them to the editor (using the instructions provided <a href="http://epsilonlabs.wiki.sourceforge.net/EVL-GMF+Integration">here</a>):</p>
<pre style="font-size:11px;">context File {
constraint HasName {
check : self.name.isDefined()
message : 'Unnamed ' + self.eClass().name + ' not allowed'
}
}
context Folder {
critique NameStartsWithCapital {
guard : self.satisfies('HasName')
check : self.name.firstToUpperCase() = self.name
message : 'Folder ' + self.name +
' should start with an upper-case letter'
fix {
title : 'Rename to ' + self.name.firstToUpperCase()
do {
self.name := self.name.firstToUpperCase();
}
}
}
}
context Sync {
constraint MustLinkSame {
check : self.source.eClass() = self.target.eClass()
message : 'Cannot synchronize a ' + self.source.eClass().name
+ ' with a ' + self.target.eClass().name
fix {
title : 'Synchronize with another ' +
self.source.eClass().name
do {
var target := UserInput.choose('Select target',
_Model.getAllOfType(self.source.eClass().name));
if (target.isDefined()) self.target := target;
}
}
}
}
</pre>
<p>Then, we evaluate the constraints by clicking <strong>Diagram-&gt;Validate</strong>, and our editor and Problems view now look like this:</p>
<p><a href="http://epsilonblog.files.wordpress.com/2008/11/filesystemwitherrorshighlighted.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="322" alt="FileSystemWithErrorsHighlighted" src="https://epsilonblog.files.wordpress.com/2008/11/filesystemwitherrorshighlighted-thumb.png?w=438&#038;h=322" width="438" border="0"></a> </p>
<p><a href="http://epsilonblog.files.wordpress.com/2008/11/problemsview.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="172" alt="ProblemsView" src="https://epsilonblog.files.wordpress.com/2008/11/problemsview-thumb.png?w=438&#038;h=172" width="438" border="0"></a> </p>
<p>We can now right click on the warning and invoke quick fix we have defined for the <strong>NameStartsWithCapital</strong> critique.</p>
<p><a href="http://epsilonblog.files.wordpress.com/2008/11/quickfix.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="488" alt="QuickFix" src="https://epsilonblog.files.wordpress.com/2008/11/quickfix-thumb.png?w=412&#038;h=488" width="412" border="0"></a>&nbsp;
<p>By clicking Finish, the fix is executed and the warning disappears.</p>
<p><a href="http://epsilonblog.files.wordpress.com/2008/11/afterquickfix.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="322" alt="AfterQuickFix" src="https://epsilonblog.files.wordpress.com/2008/11/afterquickfix-thumb.png?w=438&#038;h=322" width="438" border="0"></a> </p>
<p>A complete reference of the syntax and semantics of EVL can be found in Chapter 6 of the <a href="http://epsilonlabs.svn.sourceforge.net/svnroot/epsilonlabs/org.eclipse.epsilon.book/EpsilonBook.pdf">Epsilon Book</a> (PDF). Also, instructions for binding EVL constraints with an existing GMF editor can be found <a href="http://epsilonlabs.wiki.sourceforge.net/EVL-GMF+Integration">here</a>. Finally, a Flash screencast of this example is available <a href="http://www.eclipse.org/gmt/epsilon/cinema/EVLGMFValidation.htm">here</a>.</p>
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/59/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/59/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=59&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2008/11/09/error-markers-and-quick-fixes-in-gmf-editors-using-evl/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<media:content url="http://1.gravatar.com/avatar/7c3777a06d6d0861869ef58dbfe1e26c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Dimitris Kolovos</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2008/11/filesystem-thumb.png" medium="image">
<media:title type="html">FileSystem</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2008/11/filesystemwitherrorshighlighted-thumb.png" medium="image">
<media:title type="html">FileSystemWithErrorsHighlighted</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2008/11/problemsview-thumb.png" medium="image">
<media:title type="html">ProblemsView</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2008/11/quickfix-thumb.png" medium="image">
<media:title type="html">QuickFix</media:title>
</media:content>
<media:content url="http://epsilonblog.files.wordpress.com/2008/11/afterquickfix-thumb.png" medium="image">
<media:title type="html">AfterQuickFix</media:title>
</media:content>
</item>
<item>
<title>New in HUTN 0.7.1</title>
<link>http://epsilonblog.wordpress.com/2008/09/15/new-in-hutn-071/</link>
<comments>http://epsilonblog.wordpress.com/2008/09/15/new-in-hutn-071/#comments</comments>
<pubDate>Mon, 15 Sep 2008 11:03:19 +0000</pubDate>
<dc:creator>Louis Rose</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/?p=47</guid>
<description><![CDATA[Last week we released v0.7.1 of our Human-Usable Textual Notation implementation. It&#8217;s available as part of Epsilon 0.8.1. In this release, we&#8217;ve aligned our implementation more closely to the OMG specification, and added some new features. Here&#8217;s a summary of the changes: Validation An error is now produced when enumerations, data types and abstract classes [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=47&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>Last week we released v0.7.1 of our Human-Usable Textual Notation implementation. It&#8217;s available as part of Epsilon 0.8.1. In this release, we&#8217;ve aligned our implementation more closely to the OMG specification, and added some new features. Here&#8217;s a summary of the changes:</p>
<h3><strong>Validation</strong></h3>
<p>An error is now produced when enumerations, data types and abstract classes are specified as the type of an object.</p>
<p>An error is now produced for objects that do not specify the value of attributes with a lower bound greater than zero.</p>
<h3><strong>Adjectives</strong></h3>
<p>Positive adjectives are no longer prefixed with the # symbol. For instance:</p>
<pre>DogPackage {
    male Dog "Fido" {}     // old syntax was #male Dog
}</pre>
<p>Adjectives prefixed with the # symbol will cause a deprecation warning.</p>
<h3><strong>Enumeration Values</strong></h3>
<p>Support for enumeration values in association instances has been added. The syntax is:</p>
<pre>DogPackage {
    Dog "Lassie" {
        breed: Collie    // Enumeration value
        name: "Lassie"   // String value
    }
}</pre>
<h3><strong>Classifier-Level Attributes</strong></h3>
<p>Support for classifier-level attributes has been added. The syntax is:</p>
<pre>DogPackage {
    Dog.breed: Collie;  // All dogs in this package are Collies by default
    Dog "Lassie" {}
    Dog "Jessie" {}
    Dog "Scooby" {
        breed: GreatDane
    }
}</pre>
<p>Classifier-level attribute values take precedence over any default value rules specified in a HUTN configuration model.</p>
<h3><strong>Associations: Block and Infix Notations</strong></h3>
<p>Support for association blocks has been added. Assuming that the Family class has a reference called &#8220;pets&#8221; accepting objects of type Dog, the syntax is:</p>
<pre>DogPackage {
    Family "The Smiths" {}
    Dog "Rover" {}
    pets {
        Family "The Smiths"
        Dog "Rover"        // Refers to the existing Pet object, defined above
        Family "The Smiths"
        Dog "Fido"        // Created automatically by the association block
    }
}</pre>
<p>Similarly, associations may be specified using an infix notation. The example above could be written:</p>
<pre>DogPackage {
    Family "The Smiths" {}
    Dog "Rover" {}
    Family "The Smiths" pets Dog "Rover";
    Family "The Smiths" pets Dog "Fido";
}</pre>
<p>We hope you find the improved validation and more flexible syntax useful. You can update your installation using the Eclipse update manager, or follow the instructions on the <a href="http://www.eclipse.org/gmt/epsilon/download.php">Epsilon download page</a>.</p>
<br /><img alt="" border="0" src="https://feeds.wordpress.com/1.0/categories/epsilonblog.wordpress.com/47/" /> <img alt="" border="0" src="https://feeds.wordpress.com/1.0/tags/epsilonblog.wordpress.com/47/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/47/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/47/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=47&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2008/09/15/new-in-hutn-071/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<media:content url="http://0.gravatar.com/avatar/6634d495dd596083ec80398d6fbe563a?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Louis Rose</media:title>
</media:content>
</item>
<item>
<title>Negative Text Search Engine</title>
<link>http://epsilonblog.wordpress.com/2008/08/05/negative-text-search-engine/</link>
<comments>http://epsilonblog.wordpress.com/2008/08/05/negative-text-search-engine/#comments</comments>
<pubDate>Tue, 05 Aug 2008 22:47:13 +0000</pubDate>
<dc:creator>Dimitris Kolovos</dc:creator>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">http://epsilonblog.wordpress.com/2008/08/05/negative-text-search-engine/</guid>
<description><![CDATA[A little off-topic but hopefully useful. Recently, I needed to find all the .java files in my workspace that did not contain a particular phrase (&#8220;Eclipse Public License&#8221;) to find out which files I had forgot to add copyright notices to. I tried to do this with regular expressions but couldn&#8217;t seem to make it [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=45&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></description>
<content:encoded><![CDATA[<p>A little off-topic but hopefully useful. Recently, I needed to find all the .java files in my workspace that did <strong>not</strong> contain a particular phrase (&#8220;Eclipse Public License&#8221;) to find out which files I had forgot to add copyright notices to. I tried to do this with regular expressions but couldn&#8217;t seem to make it work. So I looked into the Eclipse search plugin and finally managed to scribble a negative text search engine i.e. an engine that returns all the files that do <strong>not</strong> contain a particular phrase. Instructions on how to install and use the plugin are available <a href="http://kolovos.wiki.sourceforge.net/Eclipse+Negative+Text+Search+Engine" target="_blank">here</a>.</p>
<br /><img alt="" border="0" src="https://feeds.wordpress.com/1.0/categories/epsilonblog.wordpress.com/45/" /> <img alt="" border="0" src="https://feeds.wordpress.com/1.0/tags/epsilonblog.wordpress.com/45/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/comments/epsilonblog.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/delicious/epsilonblog.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/facebook/epsilonblog.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/twitter/epsilonblog.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/stumble/epsilonblog.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/digg/epsilonblog.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/epsilonblog.wordpress.com/45/"><img alt="" border="0" src="https://feeds.wordpress.com/1.0/reddit/epsilonblog.wordpress.com/45/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=epsilonblog.wordpress.com&blog=2097844&post=45&subd=epsilonblog&ref=&feed=1" width="1" height="1" />]]></content:encoded>
<wfw:commentRss>http://epsilonblog.wordpress.com/2008/08/05/negative-text-search-engine/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
<media:content url="http://1.gravatar.com/avatar/7c3777a06d6d0861869ef58dbfe1e26c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
<media:title type="html">Dimitris Kolovos</media:title>
</media:content>
</item>
</channel>
</rss>