<?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/"
	>

<channel>
	<title>EclipseSource Blog</title>
	<atom:link href="http://eclipsesource.com/blogs/feed/" rel="self" type="application/rss+xml" />
	<link>http://eclipsesource.com/blogs</link>
	<description>Eclipse Equinox OSGi</description>
	<lastBuildDate>Thu, 23 May 2013 16:16:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>A Rule to Test Them All (At Once)</title>
		<link>http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/#comments</comments>
		<pubDate>Thu, 23 May 2013 07:59:47 +0000</pubDate>
		<dc:creator>Matthias Kempka</dc:creator>
				<category><![CDATA[EclipseSource News]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15911</guid>
		<description><![CDATA[Unit tests often stop being useful where concurrency is involved. A special case is thread safety which can be tested relatively easily with the use of a simple JUnit rule. Suppose middle earth wants to keep track of the dragons that were slain over the centuries. The dragons are tracked in one list, and reports <a href="http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Unit tests often stop being useful where concurrency is involved. A special case is thread safety which can be tested relatively easily with the use of a simple JUnit rule.</p>
<p><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/2597653005_094ec92782_m1.jpg"><img class="size-full wp-image-15919 alignright" alt="2597653005 094ec92782 m1 A Rule to Test Them All (At Once)" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/2597653005_094ec92782_m1.jpg" width="240" height="144" title="A Rule to Test Them All (At Once)" /></a>Suppose middle earth wants to keep track of the dragons that were slain over the centuries. The dragons are tracked in one list, and reports come in from different dwarfs, humans or elves. Sometimes, a dragon was reported slain falsely, so it needs to be removed.</p>
<p>A test for this list could look like this:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SlainDragonsTest <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> SlainDragons uut <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SlainDragons<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
    @Test
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> shouldSafelyAddAndRemove<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        uut.<span style="color: #006633;">addSlain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Scatha&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        uut.<span style="color: #006633;">addSlain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Smaug&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        uut.<span style="color: #006633;">addSlain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Glaurung&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        uut.<span style="color: #006633;">removeSlain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Smaug&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        assertThat<span style="color: #009900;">&#40;</span>uut.<span style="color: #006633;">getSlainDragons</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, hasItem<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Glaurung&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        assertThat<span style="color: #009900;">&#40;</span>uut.<span style="color: #006633;">getSlainDragons</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, not<span style="color: #009900;">&#40;</span>hasItem<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Smaug&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>After a battle, lots of reports tend to come in at the same time, so the list has to work under stressful conditions without errors. So, we want the test to be executed simultaneously by a large number of threads. Each of the threads has to pass and the collective result decides on the JUnit report. For this purpose I wrote a &#8220;Manifold&#8221; class that converts the test to a load test.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">  @Rule <span style="color: #000000; font-weight: bold;">public</span> Manifold simultanousReports <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Manifold<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Internally, Manifold opens 200 threads and runs the test method simultaneously inside the thread. It waits for all of the threads to finish and fails with the first error it found. No further adjustment of the test methods is necessary. If you are interested, you can download the class <a href="https://gist.github.com/mkempka/5627026">Manifold here</a>.</p>
<p>Happy dragon hunting!</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=A+Rule+to+Test+Them+All+%28At+Once%29&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/&amp;t=A+Rule+to+Test+Them+All+%28At+Once%29" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/#comments">Leave a Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/java/' title='Java Tag'>Java</a>, <a href='http://eclipsesource.com/blogs/tag/testing/' title='testing Tag'>testing</a>, <a href='http://eclipsesource.com/blogs/tag/tips/' title='tips Tag'>tips</a>, <a href='http://eclipsesource.com/blogs/tag/java/' title='Java Tag'>Java</a>, <a href='http://eclipsesource.com/blogs/tag/testing/' title='testing Tag'>testing</a>, <a href='http://eclipsesource.com/blogs/tag/tips/' title='tips Tag'>tips</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/23/a-rule-to-test-them-all-at-once/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom touchpoints in p2</title>
		<link>http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/#comments</comments>
		<pubDate>Wed, 22 May 2013 22:58:10 +0000</pubDate>
		<dc:creator>Ian Bull</dc:creator>
				<category><![CDATA[EclipseSource News]]></category>
		<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[p2]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15960</guid>
		<description><![CDATA[For most people, p2 is simply the Install  Software Dialog  in Eclipse. While this is certainly true (or at least the Install Software Dialog is built with p2), p2 is much more than this. The Eclipse Provisioning Platform (p2) is a general purpose platform for provisioning everything and nothing in particular. Most of the out-of-the-box p2 tools <a href="http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p>For most people, p2 is simply the <em><strong>Install</strong>  <strong>Software Dialog </strong></em> in Eclipse. While this is certainly true (or at least the Install Software Dialog is built with p2), p2 is much more than this. The <a href="http://eclipse.org/equinox/p2/"><em>Eclipse Provisioning Platform</em> (p2)</a> is a general purpose platform for <em>provisioning everything and nothing in particular</em>.</p>
<p>Most of the out-of-the-box p2 tools are related to provisioning OSGi bundles (<a href="http://eclipsesource.com/blogs/2009/04/29/plug-in-vs-bundle/">or Eclipse plug-ins, if you prefer</a>), but there is nothing in the core that limits us to Eclipse or OSGi. In fact, you can extend p2 to install whatever you want. In this example I&#8217;ll show you how to create a custom <strong>Install Action </strong>(<em>touchpoint</em>) that executes an arbitrary binary during installation.</p>
<h3>Background</h3>
<p>When you use p2 to install software it goes through a number of steps.</p>
<ol>
<li><span style="line-height: 12.997159004211426px;"><strong>A provisioning plan is computed.</strong> Based on what you already have installed and the install action you&#8217;re taking, p2 computes a plan. The plan includes operands such as: <em>remove foo, upgrade bar, install baz, etc..</em></span></li>
<li><strong>Artifacts are fetched and checked</strong>. Once a plan is constructed, the plan is executed on the <b>p2 engine</b>. The first step is fetching all the artifacts and the trust checking (checksum validation)</li>
<li><strong>Unconfigure / Uninstall.</strong> If there are any units being removed, they are given a chance to &#8216;unconfigure&#8217; themsevles. Once this is done, they are <em>uninstalled.</em></li>
<li><strong>Install / Configure.</strong> If there are any units being added, they are first installed and then they are given a chance to <em>configure</em><strong> </strong>themselves.</li>
</ol>
<p>For installable units being <em>upgraded,</em> this is essentially an unconfigure / uninstall followed by an instal / configure.</p>
<h3><strong></strong>The Problem</h3>
<p>p2 has a number of actions you can invoke when an installable unit (IU) is installed, configured, unconfigured or uninstalled. For example, artifacts can be <em>unzipped<strong>, </strong>copied</em> or the <em>permissions can be set.<strong> </strong></em>These <em>actions</em><strong> </strong>are called <strong>touchpoint actions</strong><em>.</em> Eclipse has two sets of touchpoint actions, <strong>native </strong>and <strong>OSGi</strong>. Native ones are general (such as move, copy, mkdir) while the OSGi ones are Eclipse or OSGi specific (install bundle, set VM Args, etc&#8230;).</p>
<p>While these are a good start (and enough to provision an Eclipse system), often you need custom actions if you are provisioning a highly specific system. Also, not only do you need custom actions, you need them to be installed before they can be used.</p>
<p>Let&#8217;s consider the case where we want to ship and run an arbitrary executable during the installation of a plugin.</p>
<h3>Touchpoint Actions</h3>
<p>Custom touchpoint actions can be specified using the <tt>org.eclipse.equinox.p2.engine.action</tt> extension point. Touchpoint Actions are tied to a <strong>touchpoint</strong>, the controller responsible for executing the action. You can either write your own custom touchpoint, or simply tie your action to an existing one. In our case, we will tie our touchpoint action to the OSGi touchpoint.</p>
<p><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-3.43.23-PM.png"><img class="aligncenter size-full wp-image-15983" alt="Screen Shot 2013 05 22 at 3.43.23 PM Custom touchpoints in p2" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-3.43.23-PM.png" width="680" height="346" title="Custom touchpoints in p2" /></a>All touchpoint actions extend <tt>ProvisioningAction</tt> and provide two methods <strong>execute </strong>and <strong>undo</strong>. Execute is used whenever the provisioning action is invoked. Undo is used if the action needs to be rolled back. In our case we will implement execute to read a parameter and call Runtime#exec on the value of that parameter.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> IStatus execute<span style="color: #009900;">&#40;</span>Map<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #003399;">String</span>, Object<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> parameters<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #003399;">String</span> artifact <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> parameters.<span style="color: #006633;">containsKey</span><span style="color: #009900;">&#40;</span>ARTIFACT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// If an artifact is specified, look it up</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #003399;">String</span> program <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span>parameters.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>PROGRAM<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #003399;">String</span> fullPath <span style="color: #339933;">=</span> computeProgramPath<span style="color: #009900;">&#40;</span>artifact, program<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">Runtime</span>.<span style="color: #006633;">getRuntime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">exec</span><span style="color: #009900;">&#40;</span>fullPath<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> Status<span style="color: #009900;">&#40;</span>IStatus.<span style="color: #006633;">ERROR</span>, <span style="color: #003399;">Activator</span>.<span style="color: #006633;">PLUGIN_ID</span>, <span style="color: #0000ff;">&quot;Cannot execute &quot;</span> <span style="color: #339933;">+</span> fullPath<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000000; font-weight: bold;">return</span> Status.<span style="color: #006633;">OK_STATUS</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The undo method (that is, the inverse of Runtime#exec) has been left as an exercise to the reader <img src='http://eclipsesource.com/blogs/wp-includes/images/smilies/icon_wink.gif' alt="icon wink Custom touchpoints in p2" class='wp-smiley' title="Custom touchpoints in p2" /> .</p>
<h3>MetaRequirements</h3>
<p>In order to ensure that  your touchpoints get installed before the components that need them, you can either invoke two updates (update the installer and then update the application) or you can use <strong>MetaRequirements</strong>. MetaRequirements invoke a two stage plan, ensuring that the touchpoints are fetched and installed before they are invoked.</p>
<p>MetaRequirements can be declared in a p2.inf file as follows.</p>
<p><tt>metaRequirements.0.namespace=org.eclipse.equinox.p2.iu<br />
metaRequirements.0.name=com.ianbull.p2.touchpoint.exec<br />
metaRequirements.0.range=[1,2)<br />
</tt></p>
<p>In this case we&#8217;ve specified a metaRequirement on the Installable Unit <tt>com.ianbull.p2.touchpoint.exec</tt> version <tt>[1.0,2.0)</tt>. This Installable Unit must exist before our IU can be installed. For OSGi bundles, the p2.inf file should be placed next to the MANIFEST.MF file. In our case, it&#8217;s placed in a bundle called <tt>com.ianbull.p2.touchpoint.payload</tt>.</p>
<p>To summarize, before &#8216;payload&#8217; can be installed, the touchpoint &#8216;exec&#8217; must be installed and available. Since it&#8217;s declared as a metaRequirement, p2 will handle this by using a two-stage plan.</p>
<h3>Invoking the Touchpoint</h3>
<p>Now that we&#8217;ve created the touchpoint, all we need to do is invoke it. This is done by the Installable Unit which declares the metaRequirement. In our case, we will ship the executable as part of our &#8216;payload&#8217; plugin.</p>
<p>We will use two touchpoints, one to set the permission (755) and then our custom touchpoint to launch the application.</p>
<p><tt> instructions.install = \<br />
chmod(targetDir:@artifact,targetFile:payload/someProgram,permissions:755);</tt><br />
<tt><br />
instructions.install.import= \<br />
org.eclipse.equinox.p2.touchpoint.eclipse.chmod<br />
</tt><tt><br />
instructions.configure = com.ianbull.p2.touchpoint.exec.Execute(artifact:@artifact, program:payload/someProgram);</tt></p>
<h3>Putting it all Together</h3>
<p>Once we have these two plugins (the &#8216;exec&#8217; touchpoint and the &#8216;payload&#8217;) we create a repository that contains them both.</p>
<p>With the repository in place, we simply invoke the director, or better yet, the p2 <em>Install Software Dialog</em> to install the payload.</p>
<p><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-3.12.34-PM.png"><img class="aligncenter size-full wp-image-15975" alt="Screen Shot 2013 05 22 at 3.12.34 PM Custom touchpoints in p2" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-3.12.34-PM.png" width="618" height="172" title="Custom touchpoints in p2" /></a></p>
<p>The payload doesn&#8217;t actually have any dependency on the &#8216;exec&#8217; touchpoint, except for the MetaRequirement. This MetaRequirement will cause the &#8216;exec&#8217; touchpoint to first be installed, and then the touchpoint can be invoked.</p>
<p>And now during installation, our custom application is started. While this particular application doesn&#8217;t do anything useful, it could be an installer for another tool, or it may simply invoke an existing service such as Apache HTTPD.</p>
<p style="text-align: center;"><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-3.13.54-PM.png"><img class="aligncenter  wp-image-15976" alt="Screen Shot 2013 05 22 at 3.13.54 PM Custom touchpoints in p2" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-3.13.54-PM.png" width="525" height="332" title="Custom touchpoints in p2" /></a></p>
<p style="text-align: left;">If you&#8217;re interested in the code examples I&#8217;ve used here, I&#8217;ve pushed them all to <a href="https://github.com/irbull/com.ianbull.p2.touchpoint.example">GitHub</a>.</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=Custom+touchpoints+in+p2&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/&amp;t=Custom+touchpoints+in+p2" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/#comments">Leave a Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/p2/' title='p2 Tag'>p2</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/p2/' title='p2 Tag'>p2</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox OS Rant</title>
		<link>http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/#comments</comments>
		<pubDate>Wed, 22 May 2013 10:32:53 +0000</pubDate>
		<dc:creator>Jochen Krause</dc:creator>
				<category><![CDATA[EclipseSource News]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Tabris]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15875</guid>
		<description><![CDATA[I have to admit that I am a little bit frustrated with Firefox OS, so here comes my RANT. I am not complaining that the system is at a very early stage with lots of issues, this has to be expected. I am complaining that the project is making it really hard to find out <a href="http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I have to admit that I am a little bit frustrated with Firefox OS, so here comes my RANT. I am not complaining that the system is at a very early stage with lots of issues, this has to be expected. I am complaining that the project is making it really hard to find out what&#8217;s going on.</p>
<div id="attachment_15903" class="wp-caption alignright" style="width: 130px"><a href="http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/"><img class="size-full wp-image-15903 " title="Firefox Peak - First impressions" alt="firefox dev preview sticker Firefox OS Rant" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/firefox_dev_preview_sticker.png" width="120" height="123" /></a><p class="wp-caption-text">Firefox Peak &#8211; First impressions</p></div>
<p>The Firefox OS phones were advertised with &#8220;daily updates&#8221;, but there hasn&#8217;t been a single update since the end of April. That&#8217;s why I started my hunt for information.<br />
Searching for Firefox OS roadmap quickly brings you to this page:</p>
<p><a href="https://wiki.mozilla.org/B2G/Schedule_Roadmap">https://wiki.mozilla.org/B2G/Schedule_Roadmap</a></p>
<p>Too bad, this roadmap is from 2012. At least that is what it&#8217;s saying. Maybe just a typo? No, it says: &#8220;Detailed Milestone tracking <strong>was</strong> <a href="https://docs.google.com/spreadsheet/ccc?key=0AiBigu584YY7dGlNSlY0QzhJb3M5anRBa1gxalV0Y3c" rel="nofollow">here</a>&#8221; for Milestone 3, Target Date 6/1/2012. To my knowledge the verb form &#8220;was&#8221; indicates the past.</p>
<p>So I started to look for builds. Hooray, Firefox OS nightly builds gain a top ranking in the search results. However, it is only a directory listing of builds. There are instructions on how to install the OS into a simulator and <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Installing_on_a_mobile_device">onto an Android phone</a>, but no info about getting it on the Peak device. I am sure spending a few additional hours will get me there, but why do I and likely hundreds or even thousands of developers need to waste this time? Being able to choose between a milestone and a nightly update channel seems a straightforward solution for this issue &#8211; and would enable <a href="http://christianheilmann.com/2013/04/29/geeksphones-are-developer-tools/">the feedback the Firefox OS developers are looking for</a>.</p>
<p>As I couldn&#8217;t believe that there is no roadmap, I went back to looking for one and landed on the Schedule_Roadmap page again. Following the link to the past detailed milestone tracking revealed two surprises: The development of the milestone is under full steam (so it is current) and the tracking is done in a couple of google spreadsheets. While it is great to see that there is a lot of stuff going on, I find the choice of tools inadequate.</p>
<p>From my point of view, running an open source project the way that Firefox OS is run is problematic. I agree that writing code has the highest priority, but if you fail to create an &#8220;<a href="http://oreilly.com/pub/a/oreilly/tim/articles/architecture_of_participation.html">architecture of participation</a>&#8221; you severely limit your chances of success.</p>
<p>The Mozilla Foundation has proven that they can run projects in a way that enables early feedback. Please, Firefox OS team, let a few features slip for the next milestone and allow us to participate more.</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=Firefox+OS+Rant&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/&amp;t=Firefox+OS+Rant" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/#comments">1 Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/mobile/' title='mobile Tag'>mobile</a>, <a href='http://eclipsesource.com/blogs/tag/tabris/' title='Tabris Tag'>Tabris</a>, <a href='http://eclipsesource.com/blogs/tag/mobile/' title='mobile Tag'>mobile</a>, <a href='http://eclipsesource.com/blogs/tag/tabris/' title='Tabris Tag'>Tabris</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/22/firefox-os-rant/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EMF Dos and Don´ts #10</title>
		<link>http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/#comments</comments>
		<pubDate>Tue, 21 May 2013 08:18:56 +0000</pubDate>
		<dc:creator>Maximilian Koegel</dc:creator>
				<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[emf]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15800</guid>
		<description><![CDATA[EMF is a very powerful framework and with power comes&#8230;responsibility. You can achieve great things with a minimum of effort using EMF, but if something goes wrong, you can also spend hours trying to find out why. This blog post is part of a series on things you should do and things you should not <a href="http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p dir="ltr">EMF is a very powerful framework and with power comes&#8230;responsibility. You can achieve great things with a minimum of effort using EMF, but if something goes wrong, you can also spend hours trying to find out why. This blog post is part of a <a href="http://eclipsesource.com/blogs/2013/02/26/emf-do%C2%B4s-and-don%C2%B4ts/">series</a> on things you should do and things you should not do when using EMF. You can use the <a href="http://eclipsesource.com/blogs/2013/02/26/emf-do%C2%B4s-and-don%C2%B4ts/">link to the series pilot</a> to navigate to the start and the link below to navigate to the next blog once it is published.</p>
<p><strong>EMF Dos #10: Use EMF ComposedAdapterFactory</strong></p>
<p>In my <a href="http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%C2%B4ts-9/">previous blog post</a>, I discussed AdapterFactoryLabelProvider and AdapterFactoryContentProvider, which can be used to provide labels and children for your entities in viewers. Both require an AdapterFactory in their constructors that will be used to retrieve the actual ItemProviders and their entity-specific implementation.</p>
<p dir="ltr">If you pass in the AdapterFactory of a specific model, the provider will only be able to provide labels for entities of the given model. However, viewers often need to display entities of multiple models. Of course, there is a solution to this with EMF: ComposedAdapterFactory.</p>
<p dir="ltr">A ComposedAdapterFactory is a composition of AdapterFactories, as the name implies. You can construct it with a collection of AdapterFactories, and it will delegate calls to adapt() to the resepective AdapterFactory based on the entity type. If you want to display multiple models in one viewer, you just combine all the models’ AdapterFactories into one ComposedAdapterFactory and pass it to the AdapterFactoryLabelProvider and AdapterFactoryContentProvider.</p>
<p dir="ltr">If you do not want to restrict your viewer to specific models but want to use all models available in your current target platform, you can pass in ComposedAdapterFactory.Descriptor.Registry.INSTANCE, which is the registry of all available AdapterFactories. By default, the  AdapterFactory of a generated Edit-Plugin is registered via the org.eclipse.emf.edit.itemProviderAdapterFactories extension point and thereby added to the aforementioned registry.</p>
<p dir="ltr">If the AdapterFactoryLabelProvider/AdapterFactoryContentProvider and the ComposedAdapterFactory are based on the registry, your viewers can be fully decoupled from the actual models they display while still providing customized icons, labels and content.</p>
<p>Stay tuned for more Dos and Don´ts in my next blog!</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=EMF+Dos+and+Don%C2%B4ts+%2310&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/&amp;t=EMF+Dos+and+Don%C2%B4ts+%2310" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/#comments">2 Comments</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/emf/' title='emf Tag'>emf</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/emf/' title='emf Tag'>emf</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%c2%b4ts-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>EMF Dos and Don´ts #9</title>
		<link>http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/#comments</comments>
		<pubDate>Thu, 16 May 2013 10:54:39 +0000</pubDate>
		<dc:creator>Maximilian Koegel</dc:creator>
				<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[emf]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15706</guid>
		<description><![CDATA[EMF is a very powerful framework and with power comes&#8230;responsibility. You can achieve great things with a minimum of effort using EMF, but if something goes wrong, you can also spend hours trying to find out why. This blog post is part of a series on things you should do and things you should not <a href="http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p dir="ltr">EMF is a very powerful framework and with power comes&#8230;responsibility. You can achieve great things with a minimum of effort using EMF, but if something goes wrong, you can also spend hours trying to find out why. This blog post is part of a <a href="http://eclipsesource.com/blogs/2013/02/26/emf-do%C2%B4s-and-don%C2%B4ts/">series</a> on things you should do and things you should not do when using EMF. You can use the <a href="http://eclipsesource.com/blogs/2013/02/26/emf-do%C2%B4s-and-don%C2%B4ts/">link to the series pilot</a> to navigate to the start and the link below to navigate to the next blog once it is published.</p>
<p dir="ltr"><strong>EMF Dos #9: Use EMF ItemProviders</strong></p>
<p dir="ltr">To display entities in a tree view or in other views, you need a label provider and a content provider. The label provider provides an icon and a text to display each entity type. The content provider defines the children of an entity. Additionally, the label and content providers need to notify their viewers if the label or content changes due to data changes. The viewers will update only if there are data changes. You could implement the label and content providers manually, which is a lot of work, or you can rely on EMF-generated infrastructure.</p>
<p dir="ltr">For every entity defined in your Ecore, EMF will generate an ItemProvider in the Edit-Plugin. The ItemProvider implements methods to get an icon and a text for the entity (getText() and getImage()). Since you want to display all kinds of entities in a tree view, you need to create a label provider that will know the type of your entity and use the matching ItemProvider to retrieve a text and an icon. This label provider needs to implement  the ILabelProvider interface. Similarly, a content provider would have to implement the ITreeContentProvider interface and define the children for all the different kinds of entities. For this purpose, EMF provides a fully functional label and content providers: AdapterFactoryLabelProvider and AdapterFactoryContentProvider. They both work in the same way,  so I will focus on the AdapterFactoryLabelProvider.</p>
<p dir="ltr">Conceptually, an AdapterFactoryLabelProvider is able to provide labels for all supported entities by delegating to the appropriate generated ItemProviders. Technically, the AdapterFactoryLabelProvider requires an AdapterFactory to do this (see the constructor). An AdapterFactory creates adapters (wrappers) for a given entity. For each EMF model, EMF generates an AdapterFactory for the ItemProviders of its entities. Basically, the adapt() method of the AdapterFactory returns the appropriate ItemProvider for a specific  entity.</p>
<p dir="ltr">To construct an AdapterFactoryLabelProvider,  you can pass in the AdapterFactory of your model, and the label provider will be able to display your entities based on their ItemProviders.</p>
<p dir="ltr">If you want to display entities from multiple models you can use a ComposedAdapterFactory, which I will describe in my next blog.</p>
<p dir="ltr">The AdapterFactoryLabelProvider will &#8212;  with the help of the ItemProviders &#8212; update its viewers if any of the entities it provided a label for change. Furthermore, the AdapterFactoryLabelProvider is very loosely coupled to the ItemProviders that implement entity-specific display behaviour.</p>
<p dir="ltr">Since the ItemProviders are generated (but can be adapted if necessary), the AdapterFactoryLabelProvider and AdapterFactoryContentProvider really are a big productivity boost in displaying EMF-based entities in your viewers.</p>
<p dir="ltr">Stay tuned for more Dos and Don´ts in my <a href="http://eclipsesource.com/blogs/2013/05/21/emf-dos-and-don%C2%B4ts-10/">next blog</a>!</p>
<p>&nbsp;</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=EMF+Dos+and+Don%C2%B4ts+%239&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/&amp;t=EMF+Dos+and+Don%C2%B4ts+%239" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/#comments">Leave a Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/emf/' title='emf Tag'>emf</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/emf/' title='emf Tag'>emf</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%c2%b4ts-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Bootstrap a Tabris Application with Maven and Eclipse</title>
		<link>http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/#comments</comments>
		<pubDate>Tue, 14 May 2013 13:22:05 +0000</pubDate>
		<dc:creator>Holger Staudacher</dc:creator>
				<category><![CDATA[EclipseSource News]]></category>
		<category><![CDATA[Editors choice]]></category>
		<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[rap]]></category>
		<category><![CDATA[Tabris]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15753</guid>
		<description><![CDATA[From my point of view bootstrapping a new application is always tricky. Especially when you want to bootstrap an app that uses technology you are not yet familiar with. With this post I want to give you a step by step tutorial on how to bootstrap a Tabris application using Eclipse and Maven. So, let&#8217;s <a href="http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p>From my point of view bootstrapping a new application is always tricky. Especially when you want to bootstrap an app that uses technology you are not yet familiar with. With this post I want to give you a step by step tutorial on how to bootstrap a <a href="http://developer.eclipsesource.com/tabris/">Tabris application</a> using Eclipse and Maven. So, let&#8217;s get our hands dirty!</p>
<p><strong>IDE Setup</strong></p>
<p>The first thing you need to do is to download the latest &#8220;<a href="http://www.eclipse.org/downloads/">Eclipse IDE for Java EE Developers</a>&#8220;. This package contains everything you need to create web applications and deploy them to the application servers of your choice. As we want to bootstrap the application with Maven, we also need to install additional tools called &#8220;<a href="http://www.eclipse.org/m2e/">m2e</a>&#8221; which provide a Maven integration for Eclipse. So, after starting your new IDE, go to</p>
<p>&#8220;Help&#8221; -&gt; &#8220;Install New Software&#8221; and paste the p2 repository url (<em>http://download.eclipse.org/technology/m2e/releases</em>) of m2e into the text box. This should look like the screenshot below.</p>
<p><img class="aligncenter" alt="m2e installation How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/m2e-installation.png" width="686" height="650" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p>After the installation was successful, you need to restart the IDE.</p>
<p><strong>Create a Project</strong></p>
<p>The next step is to create a new project. Tabris applications run on the server side. So, we want to create a Web-application project. For this go to <em>&#8220;File&#8221; -&gt; &#8220;New&#8221; -&gt; &#8220;Dynamic Web Project&#8221;, </em>which basically creates a JavaEE project.</p>
<p><img class="aligncenter" alt="new project How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/new-project.png" width="539" height="532" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p>In my example I have named the project &#8220;com.eclipsesource.hello.world&#8221; but you can choose whatever name you like.</p>
<p><strong>Maven</strong></p>
<p>To make things as easy as possible we want <a href="http://maven.apache.org/">Maven</a> to manage our dependencies. This involves two steps. Firstly, we want to have the dependencies during development time and secondly, we want Eclipse to put those dependencies in our &#8220;lib&#8221; folder during deployment time. The first step can be completed easily. Just right click on the newly created project and press <em>&#8220;Configure&#8221; -&gt; &#8220;Convert to Maven Project&#8221;</em>.</p>
<p><img class="aligncenter" alt="convert project How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/convert-project.png" width="580" height="593" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p>This adds a pom.xml to our project to which we can later add dependencies. The second step is a little bit more complicated. To have the depencies copied into the &#8220;lib&#8221; folder we need to create a &#8220;Deployment Assembly&#8221;. To create this, right click on the project and select <em>&#8220;Properties&#8221;</em>. In the left hand navigation tree, select &#8220;Deployment Assembly&#8221;. Within this page we need to add a new assembly. So, click on <em>Add</em> and choose <em>&#8220;Java Build Path Entries&#8221;</em>.</p>
<p style="text-align: center;"><img class="aligncenter" alt="new assembly How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/new-assembly.png" width="526" height="415" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p style="text-align: left;">After pressing &#8220;Next&#8221; we need to tell Eclipse which build path entry we want to have copied. As we want the Maven dependencies to be copied,  we will choose these.</p>
<p style="text-align: left;"><img class="aligncenter" alt="maven assembly How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/maven-assembly.png" width="528" height="416" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p style="text-align: left;">On your machine the dependency tree may be empty, but this is not a problem. Just select &#8220;Maven Dependencies&#8221; and press &#8220;Finish&#8221;. After this you should see the newly created assembly pointing to the &#8220;lib&#8221; folder.</p>
<p style="text-align: left;"><img class="aligncenter" alt="assembly result How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/assembly-result.png" width="618" height="536" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p style="text-align: left;"><strong>Add Tabris</strong></p>
<p style="text-align: left;">After having completed the Maven setup, we can add  a dependency to Tabris because we want to build a Tabris app, right <img src='http://eclipsesource.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt="icon smile How to Bootstrap a Tabris Application with Maven and Eclipse" class='wp-smiley' title="How to Bootstrap a Tabris Application with Maven and Eclipse" /> ? So, open the &#8220;pom.xml&#8221; of your project and go to the dependency section. Select &#8220;Add&#8221; and search for &#8220;tabris&#8221;. At this point in time <a href="http://developer.eclipsesource.com/tabris/roadmap/">Tabris 1.0</a> is the current version. Before you select it please make sure that the dependency scope is set to &#8220;runtime&#8221;.</p>
<p style="text-align: left;"><img class="aligncenter" alt="tabris dependency How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/tabris-dependency.png" width="482" height="452" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p style="text-align: left;">After pressing OK and saving the pom.xml Eclipse (m2e) will download Tabris and it&#8217;s dependencies for you.</p>
<p style="text-align: left;"><strong>Creating the App</strong></p>
<p style="text-align: left;">To create the hello world application we need just two classes. The first one is a configuration that tells the framework what to do. In our case it should tell the framework that we want a Tabris UI with only one page. This should look like this:</p>

&lt;pre lang=&quot;java&quot;&gt;
public class Configuration implements ApplicationConfiguration {

  @Override
  public void configure(Application application) {
    TabrisClientInstaller.install(application);
    application.addEntryPoint(&quot;/hello&quot;, new TabrisUIEntrypointFactory(createConfiguration()), null);
  }

  private UIConfiguration createConfiguration() {
    UIConfiguration uiConfiguration = new UIConfiguration();
    PageConfiguration startPageConfig = new PageConfiguration(&quot;root&quot;, StartPage.class);
    startPageConfig.setTopLevel(true);
    startPageConfig.setTitle(&quot;Hello World&quot; );
    uiConfiguration.addPageConfiguration(startPageConfig);
    return uiConfiguration;
  }

}
&lt;/pre&gt;

<p style="text-align: left;">After the configuration is complete, we will need a page. I decided to go with an easy one <img src='http://eclipsesource.com/blogs/wp-includes/images/smilies/icon_wink.gif' alt="icon wink How to Bootstrap a Tabris Application with Maven and Eclipse" class='wp-smiley' title="How to Bootstrap a Tabris Application with Maven and Eclipse" /> . It&#8217;s just a pink colored page that does nothing.</p>

&lt;pre lang=&quot;java&quot;&gt;
public class StartPage extends AbstractPage {

  @Override
  public void createContent(Composite parent, PageData data) {
    parent.setBackground(new Color(parent.getDisplay(), 255, 150, 255));
  }

}
&lt;/pre&gt;

<p style="text-align: left;">Basically this is the whole application we want to create.</p>
<p style="text-align: left;"><strong>Configure the Web-Application</strong></p>
<p style="text-align: left;">One last step is to configure the Web-Application. We need to tell the Application that it should use the ApplicationConfiguration created in the previous step. We can do this by modifying the web.xml. You can find this file within your project by expanding the <em>&#8220;WebContent/WEB-INF&#8221;</em> folder. The content of the web.xml should look like this:</p>

&lt;pre lang=&quot;xml&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; xmlns:web=&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&quot; version=&quot;3.0&quot;&gt;
  &lt;context-param&gt;
    &lt;param-name&gt;org.eclipse.rap.applicationConfiguration&lt;/param-name&gt;
    &lt;param-value&gt;com.eclipsesource.hello.world.Configuration&lt;/param-value&gt;
  &lt;/context-param&gt;
 
  &lt;listener&gt;
    &lt;listener-class&gt;org.eclipse.rap.rwt.engine.RWTServletContextListener&lt;/listener-class&gt;
  &lt;/listener&gt;
 
  &lt;servlet&gt;
    &lt;servlet-name&gt;rwtServlet&lt;/servlet-name&gt;
    &lt;servlet-class&gt;org.eclipse.rap.rwt.engine.RWTServlet&lt;/servlet-class&gt;
  &lt;/servlet&gt;
 
  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;rwtServlet&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
&lt;/web-app&gt;
&lt;/pre&gt;

<p style="text-align: left;"><strong>Export</strong></p>
<p style="text-align: left;">That&#8217;s it! Our application is ready to be exported. You can do this by right clicking on your project and selecting <em>&#8220;Export&#8221; -&gt; &#8220;WAR-file&#8221;</em>.</p>
<p style="text-align: left;"><img class="aligncenter" alt="export How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/export.png" width="495" height="684" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p style="text-align: left;">After you have the .war file ready you can deploy it to whatever servlet container you want.</p>
<p style="text-align: left;"><strong>Access the Application</strong></p>
<p style="text-align: left;">To access the application you need a Tabris mobile client. You can download them from the <a href="http://developer.eclipsesource.com/tabris/downloads/">Tabris download page</a>. I have used the iOS client and the application looks like the one in the screenshot below. You need to point your client to your server, e.g. http://localhost:8080/com.eclipsesource.hello.world/hello (Please Note: Maybe you have to replace localhost with the address of your servlet container. On Android devices localhost points to the device.).</p>
<p style="text-align: left;"><img class="aligncenter" alt="hello How to Bootstrap a Tabris Application with Maven and Eclipse" src="http://download.eclipsesource.com/~hstaudacher/m2e-tabris/hello.png" width="396" height="744" title="How to Bootstrap a Tabris Application with Maven and Eclipse" /></p>
<p style="text-align: left;">If you have any open questions please don&#8217;t hesitate to leave a comment.</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=How+to+Bootstrap+a+Tabris+Application+with+Maven+and+Eclipse&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/&amp;t=How+to+Bootstrap+a+Tabris+Application+with+Maven+and+Eclipse" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/#comments">3 Comments</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/java/' title='Java Tag'>Java</a>, <a href='http://eclipsesource.com/blogs/tag/maven/' title='maven Tag'>maven</a>, <a href='http://eclipsesource.com/blogs/tag/mobile/' title='mobile Tag'>mobile</a>, <a href='http://eclipsesource.com/blogs/tag/rap/' title='rap Tag'>rap</a>, <a href='http://eclipsesource.com/blogs/tag/tabris/' title='Tabris Tag'>Tabris</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/java/' title='Java Tag'>Java</a>, <a href='http://eclipsesource.com/blogs/tag/maven/' title='maven Tag'>maven</a>, <a href='http://eclipsesource.com/blogs/tag/mobile/' title='mobile Tag'>mobile</a>, <a href='http://eclipsesource.com/blogs/tag/rap/' title='rap Tag'>rap</a>, <a href='http://eclipsesource.com/blogs/tag/tabris/' title='Tabris Tag'>Tabris</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/14/how-to-bootstrap-a-tabris-application-with-maven-and-eclipse/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to use multiple browser tabs in your RAP 2.1 Application</title>
		<link>http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/#comments</comments>
		<pubDate>Fri, 10 May 2013 09:26:37 +0000</pubDate>
		<dc:creator>Tim Buschtöns</dc:creator>
				<category><![CDATA[EclipseSource News]]></category>
		<category><![CDATA[Editors choice]]></category>
		<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[kepler]]></category>
		<category><![CDATA[new and noteworthy]]></category>
		<category><![CDATA[rap]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15710</guid>
		<description><![CDATA[You can now download RAP 2.1 M2, the final milestone of RAP before the 2.1 (Kepler) release in June. This milstone adds quite a few nice features like bézier curves for Canvas, background-position and -repeat for CSS theming, and (especially) improved multi-tab browsing: It is now possible to host multiple UI-Sessions within the same HTTP-Session, <a href="http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p>You can now <a href="http://eclipse.org/rap/downloads/">download RAP 2.1 M2</a>, the final milestone of RAP before the 2.1 (Kepler) release in June.</p>
<p>This milstone adds quite a few <a href="http://eclipse.org/rap/noteworthy/2.1/?build=M2">nice features</a> like bézier curves for Canvas, background-position and -repeat for CSS theming, and (especially) improved <b>multi-tab browsing</b>: It is now possible to host multiple UI-Sessions within the same HTTP-Session, meaning that there are no more tricks required to use multiple tabs with RAP applications in the same browser. Lets look at an example how multiple browser tabs can be used within a RAP application by integrating it with the <a href="http://eclipse.org/rap/developers-guide/devguide.php?topic=markup.html&#038;version=2.0#markup">markup</a> and <a href="http://eclipse.org/rap/developers-guide/devguide.php?topic=navigation.html&#038;version=2.0">BrowserNavigation</a> features. </p>
<p>Assuming our application lets the user select a person from a database to edit, the typical setup would be a TableViewer that opens a Dialog on a DefaultSelection event. We want to give the user the additional option to open this dialog in a new browser tab. This tab may run the same EntryPoint, or in this case one designed for this specific purpose only. </p>
<p><img src="http://download.eclipsesource.com/~tbuschto/multitab.png" title="How to use multiple browser tabs in your RAP 2.1 Application" alt="multitab How to use multiple browser tabs in your RAP 2.1 Application" /></p>
<p>We create a TableViewer with markup support:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">viewer <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TableViewer<span style="color: #009900;">&#40;</span> parent <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
viewer.<span style="color: #006633;">getTable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setData</span><span style="color: #009900;">&#40;</span> RWT.<span style="color: #006633;">MARKUP_ENABLED</span>, <span style="color: #003399;">Boolean</span>.<span style="color: #000066; font-weight: bold;">TRUE</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Then we insert a link in the last cell of each row, whereby &#8220;edit&#8221; is the name of another EntryPoint:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">viewer.<span style="color: #006633;">setLabelProvider</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> CellLabelProvider<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  @Override
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> update<span style="color: #009900;">&#40;</span> ViewerCell cell <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Person person <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> Person <span style="color: #009900;">&#41;</span>cell.<span style="color: #006633;">getElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span> cell.<span style="color: #006633;">getColumnIndex</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">case</span> COLUMN_FIRST_NAME<span style="color: #339933;">:</span>
        cell.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span> person.<span style="color: #006633;">name</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">case</span> COLUMN_PLACE_OF_BIRTH<span style="color: #339933;">:</span>
        cell.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span> person.<span style="color: #006633;">nation</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">case</span> COLUMN_LINKS<span style="color: #339933;">:</span>
        <span style="color: #003399;">String</span> url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;edit#person/&quot;</span> <span style="color: #339933;">+</span> persons.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span> person <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        cell.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>  
          <span style="color: #0000ff;">&quot;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> 
          <span style="color: #339933;">+</span> url 
          <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> target=<span style="color: #000099; font-weight: bold;">\&quot;</span>_blank<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;edit&lt;/a&gt;&quot;</span> 
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>In the other EntryPoint, we add deep-link support like this:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">BrowserNavigation bn 
  <span style="color: #339933;">=</span> RWT.<span style="color: #006633;">getClient</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getService</span><span style="color: #009900;">&#40;</span> BrowserNavigation.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
bn.<span style="color: #006633;">addBrowserNavigationListener</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> BrowserNavigationListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  @Override
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> navigated<span style="color: #009900;">&#40;</span> BrowserNavigationEvent event <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">String</span> state <span style="color: #339933;">=</span> event.<span style="color: #006633;">getState</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> state.<span style="color: #006633;">startsWith</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;person/&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000066; font-weight: bold;">int</span> index <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span> state.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">7</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      editPerson<span style="color: #009900;">&#40;</span> persons.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span> index <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Done. You could also use the <a href="http://eclipse.org/rap/developers-guide/devguide.php?topic=navigation.html&#038;version=2.0#launcher">URLLauncher</a> service to open the tab without using a &#8220;real&#8221; link.</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=How+to+use+multiple+browser+tabs+in+your+RAP+2.1+Application&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/&amp;t=How+to+use+multiple+browser+tabs+in+your+RAP+2.1+Application" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/#comments">2 Comments</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/kepler/' title='kepler Tag'>kepler</a>, <a href='http://eclipsesource.com/blogs/tag/new-and-noteworthy/' title='new and noteworthy Tag'>new and noteworthy</a>, <a href='http://eclipsesource.com/blogs/tag/rap/' title='rap Tag'>rap</a>, <a href='http://eclipsesource.com/blogs/tag/tutorial/' title='tutorial Tag'>tutorial</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/kepler/' title='kepler Tag'>kepler</a>, <a href='http://eclipsesource.com/blogs/tag/new-and-noteworthy/' title='new and noteworthy Tag'>new and noteworthy</a>, <a href='http://eclipsesource.com/blogs/tag/rap/' title='rap Tag'>rap</a>, <a href='http://eclipsesource.com/blogs/tag/tutorial/' title='tutorial Tag'>tutorial</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/10/rap-2-1-m2-multi-browser-tabs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>EMF Dos and Don´ts #8</title>
		<link>http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/#comments</comments>
		<pubDate>Mon, 06 May 2013 13:11:36 +0000</pubDate>
		<dc:creator>Maximilian Koegel</dc:creator>
				<category><![CDATA[Editors choice]]></category>
		<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[emf]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15523</guid>
		<description><![CDATA[EMF is a very powerful framework and with power comes&#8230;responsibility. You can achieve great things with a minimum of effort using EMF, but if something goes wrong, you can also spend hours trying to find out why. This blog post is part of a series on things you should do and things you should not <a href="http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p dir="ltr">EMF is a very powerful framework and with power comes&#8230;responsibility. You can achieve great things with a minimum of effort using EMF, but if something goes wrong, you can also spend hours trying to find out why. This blog post is part of a <a href="http://eclipsesource.com/blogs/2013/02/26/emf-do%C2%B4s-and-don%C2%B4ts/">series</a> on things you should do and things you should not do when using EMF. You can use the <a href="http://eclipsesource.com/blogs/2013/02/26/emf-do%C2%B4s-and-don%C2%B4ts/">link to the series pilot</a> to navigate to the start and the link below to navigate to the next blog once it is published.</p>
<p dir="ltr"><strong>EMF Dos #8: Use EContentAdapters Carefully</strong></p>
<p dir="ltr">In <a href="http://eclipsesource.com/blogs/2013/04/23/emf-dos-and-don%C2%B4ts-7/">my previous blog post</a>,I talked about the EMF notification mechanism and the need to dispose of Adapters correctly. Instead of a simple AdapterImpl receiving notifications from only one EObject, you might want to receive notifications from multiple EObjects. For example, you might want to receive notifications for all EObjects in a ResourceSet, a Resource or a containment tree of a specific EObject. While you could implement this manually quite easily by walking the containment tree and attaching an Adapter to every EObject in the tree, it would be more complicated to update your registered Adapter when the containment tree changes. Imagine that EObjects are disconnected from or added to the containment tree. Every time, you would have to add or remove your Adapter as appropriate. To make this task very simple for you, there is a more powerful adapter in EMF: EContentAdapter.</p>
<p dir="ltr">An EContentAdapter can be attached to a ResourseSet, a Resource or an EObject. If attached to ResourceSet, it will behave as if it is attached to all its Resources and attach to newly added Resources as appropriate. If attached to a Resource, it will behave as if it is attached to all EObjects at the root of the Resource (including newly added EObjects). If it is attached to an EObject, EContentAdapter will attach to it and to all its contained EObjects following the containment tree. Furthermore, it will remove and add itself if EObjects are removed from or added to the containment tree. If any of the EObjects the EContentAdapter is attached to changes it will receive a notification in its notify() method.</p>
<p dir="ltr">In conclusion, adding an EContentAdapter to an EObject with a huge containment tree is an expensive operation in terms of time. Maintaining multiple EContentAdapters is even more time-consuming. If you add a slow operation to the notify method of the EContentAdapter (e.g., refreshing views on each notification), your application might slow down considerably. Of course, there are good use-cases for EContentAdapter but, in general, you should try to limit yourself to adding Adapters to only the EObjects that are of interest for a specific update operation to avoid overhead.</p>
<p dir="ltr">Stay tuned for more Dos and Don´ts in my <a href="http://eclipsesource.com/blogs/2013/05/16/emf-dos-and-don%C2%B4ts-9/">next blog</a>!</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=EMF+Dos+and+Don%C2%B4ts+%238&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/&amp;t=EMF+Dos+and+Don%C2%B4ts+%238" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/#comments">Leave a Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/emf/' title='emf Tag'>emf</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/emf/' title='emf Tag'>emf</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/06/emf-dos-and-don%c2%b4ts-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox OS Peak &#8211; First Impressions (Part 1)</title>
		<link>http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/#comments</comments>
		<pubDate>Mon, 06 May 2013 11:54:37 +0000</pubDate>
		<dc:creator>Jochen Krause</dc:creator>
				<category><![CDATA[EclipseSource News]]></category>
		<category><![CDATA[Editors choice]]></category>
		<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15678</guid>
		<description><![CDATA[On April 23rd, the Firefox OS developer preview phones became available in Europe &#8211; and were sold out in a few hours. The demand was so overwhelming that the supplier geeksphone had to shut down their online shop completely for a week. Now they are back online and have been busy delivering the phones &#8211; <a href="http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/IMG_0362.jpg"><img class="size-medium wp-image-15683 alignright" alt="IMG 0362 300x224 Firefox OS Peak   First Impressions (Part 1)" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/IMG_0362-300x224.jpg" width="300" height="224" title="Firefox OS Peak   First Impressions (Part 1)" /></a>On April 23rd, the <a title="Firefox OS - Partner pages" href="http://www.mozilla.org/en-US/firefox/partners/">Firefox OS</a> developer preview phones became available in Europe &#8211; and were sold out in a few hours. The demand was so overwhelming that the supplier <a title="Geeksphone - Firefox OS developer phones" href="http://geeksphone.com">geeksphone</a> had to shut down their online shop completely for a week. Now they are back online and have been busy delivering the phones &#8211; our&#8217;s arrived on Friday.</p>
<p>I will share my experience with the phone in a couple of blog entries, from first impressions to user experience topics, to trying <a title="Eclipse RAP homepage" href="http://eclipse.org/rap">Eclipse RAP</a> and various mobile frameworks on the peak phone. Obviously I am also interested if Firefox OS should be a target for our <a title="Tabris framework" href="http://developer.eclipsesource.com/tabris/">Tabris framework</a>. However, that will have to wait, lets get started with the first impressions:</p>
<p><strong>Packaging</strong><br />
The packaging is made of recycled cardboard &#8211; good. Geeks care about the environment.</p>
<p><strong>Contents</strong><br />
Phone, earphones (including microphone), USB-cable and USB-charger. For my taste they could have saved both the earphones and the charger, or do you know any developers that don&#8217;t have at least a couple of these items anyway?</p>
<p><strong>The Phone: Peak</strong><br />
<em>Case</em><br />
Makes a good impression at first sight, although it does not look &#8220;expensive&#8221;. The haptic perception is slick, with a tendency to slippery. I find it annoying that the back of the phone is uneven &#8211; the camera lens sticks out on one side of the upper half of the case. This makes it hard to type when you lay down the phone on its back, not  really ideal for a development phone.</p>
<p><em>Display</em><br />
The display is ok, but the viewing angle is very narrow and the reflexions can be quite disturbing. Good that geeks love dimmed rooms &#8230;</p>
<p><em>Firefox OS</em><br />
Unlocking and browsing the main screens is easy, swiping between multiple panes with Apps is the established standard that Firefox OS is sticking to.<br />
Setting up accounts for mail and calendar worked well (Google Apps), only data entry is annoying. The on-screen keyboard is far from the responsiveness I am used to from my iOS / Android devices. Because the keyboard did not accept some of my strokes I had to try and put the cursor at a specific position in the text field, which is really a pain. Especially if the text is longer than the space available it is almost impossible to get to the position at the end of the entry. Not that I am very fond of the iOS magnifying glass or Android Cursor / Range Selection mechanism, but this is close to completely unusable.</p>
<p>When testing the mobile browser I almost gave up on entering a somewhat longer URL. Beside the problems described above, the browser started to load the URL while I was still typing, so I had to go and try to add something at the end of the URL multiple times.<br />
Calendar and Mail that are coming with Firefox OS show that there is potential for a browser-based operating system, but Palm OS has been there as well, with even sleeker apps and did not quite make it.</p>
<p>I am going to use the phone over the next couple of days &#8211; I will write about the browser in the next post as it is at the core of the entire system.</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=Firefox+OS+Peak+%26%238211%3B+First+Impressions+%28Part+1%29&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/&amp;t=Firefox+OS+Peak+%26%238211%3B+First+Impressions+%28Part+1%29" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/#comments">1 Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/mobile/' title='mobile Tag'>mobile</a>, <a href='http://eclipsesource.com/blogs/tag/mobile/' title='mobile Tag'>mobile</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/06/firefox-os-peak-first-impressions-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eclipse Kepler Milestone 7, available for download</title>
		<link>http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/</link>
		<comments>http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/#comments</comments>
		<pubDate>Fri, 03 May 2013 21:57:17 +0000</pubDate>
		<dc:creator>Ian Bull</dc:creator>
				<category><![CDATA[Planet Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[kepler]]></category>

		<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=15663</guid>
		<description><![CDATA[Spring has certainly sprung on the west coast of Canada, and that means we are into the Eclipse Kepler endgame. Milestone 7 is the last Kepler milestone before we start rolling out release candidates &#8212; with a scheduled release on June 26th 2013.  There are a number of new and noteworthy things from the Eclipse and Equinox <a href="http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/" style="text-decoration: none;">[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Spring has certainly sprung on the west coast of Canada, and that means we are into the Eclipse Kepler endgame.</p>
<p><a href="http://www.butchartgardens.com/"><img class="aligncenter size-full wp-image-15666" alt="gardens2 Eclipse Kepler Milestone 7, available for download" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/gardens2.jpg" width="600" height="422" title="Eclipse Kepler Milestone 7, available for download" /></a></p>
<p>Milestone 7 is the last Kepler milestone before we start rolling out release candidates &#8212; with a scheduled release on June 26th 2013.  There are a number of new and noteworthy things from the Eclipse and Equinox teams in this milestone, including:</p>
<p><strong>A p2 Remediation Wizard</strong> to help you move past p2 errors. If an install fails, p2 will look for other solutions such as upgrading or removing blocking components. The results of the remediation will be presented and you can choose the path that makes sense for you.</p>
<p><strong><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/remediation.png"><img class="aligncenter size-full wp-image-15667" alt="remediation Eclipse Kepler Milestone 7, available for download" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/remediation.png" width="593" height="494" title="Eclipse Kepler Milestone 7, available for download" /></a></strong><strong>Open Resource improvements:</strong></p>
<p><em id="__mceDel"><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/open-resource-buttons.png"><img class="aligncenter size-full wp-image-15668" alt="open resource buttons Eclipse Kepler Milestone 7, available for download" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/open-resource-buttons.png" width="462" height="427" title="Eclipse Kepler Milestone 7, available for download" /></a>and you can now use <strong>Content-Assist</strong> without a prefix<br />
</em></p>
<p><a href="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/content-assist.png"><img class="aligncenter size-full wp-image-15669" alt="content assist Eclipse Kepler Milestone 7, available for download" src="http://eclipsesource.com/blogs/wp-content/uploads/2013/05/content-assist.png" width="359" height="263" title="Eclipse Kepler Milestone 7, available for download" /></a>Also, the first set of Eclipse 4.x API has also been released.</p>
<p>If you are planning on building on, or even just using Eclipse Kepler, now would be a great time to download this milestone and help out with the testing. Less than 2 months to go!</p>
<p>Checkout the entire <a href="http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M7-201305020800/news/">New and Noteworthy</a>, or download milestone and try it out yourself.</p>
<p><a href="http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M7-201305020800/">http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M7-201305020800/</a></p>
<p>&nbsp;</p>
<p><br/><div style="display: inline-block"><a href="https://twitter.com/intent/tweet?source=webclient&amp;text=Eclipse+Kepler+Milestone+7%2C+available+for+download&amp;via=eclipsesource&amp;url=http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/" target="_blank" title="Share on Twitter" style="margin-right: 5px;"><img title="Twitter" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/twitter.png" alt="Twitter"/></a><a href="https://plus.google.com/share?url=http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/" target="_blank" title="+1" style="margin-right: 5px;"><img title="Google+" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/google_plus.png" alt="Google+"/></a><a href="http://www.linkedin.com/cws/share?url=http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/" target="_blank" title="Share on LinkedIn" style="margin-right: 5px;"><img title="LinkedIn" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/linkedin.png" alt="LinkedIn"/></a><a href="https://www.facebook.com/sharer/sharer.php?u=http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/&amp;t=Eclipse+Kepler+Milestone+7%2C+available+for+download" target="_blank" title="Facebook" style="margin-right: 5px;"><img title="Facebook" src="http://eclipsesource.com/blogs/wp-content/plugins/custom-about-author/images/social_media/facebook.png" alt="Facebook"/></a></div><br/><a href="http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/#comments">1 Comment</a>. Tagged with <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/kepler/' title='kepler Tag'>kepler</a>, <a href='http://eclipsesource.com/blogs/tag/eclipse/' title='eclipse Tag'>eclipse</a>, <a href='http://eclipsesource.com/blogs/tag/kepler/' title='kepler Tag'>kepler</a></p>]]></content:encoded>
			<wfw:commentRss>http://eclipsesource.com/blogs/2013/05/03/eclipse-kepler-milestone-7-available-for-download/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
