<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6217393781957379795</id><updated>2011-07-08T05:13:18.193-07:00</updated><category term='rcp'/><category term='p2'/><category term='gwt'/><category term='open architecture ware'/><category term='eclipse'/><category term='comerge'/><category term='update'/><category term='e4'/><category term='aranea'/><title type='text'>Antumbra, Comerge and Eclipse</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bennobaumgartner.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bennobaumgartner.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Benno Baumgartner</name><uri>http://www.blogger.com/profile/02064743723537182269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_xmJrQtcZlEc/S0b5gF3-mHI/AAAAAAAAAEc/YACFB0mkuVI/S220/benno.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6217393781957379795.post-4472582399559368092</id><published>2010-01-28T08:25:00.000-08:00</published><updated>2010-01-28T08:29:30.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><title type='text'>RCP Update: No more "jammern" with InstallJammer</title><content type='html'>Wow, I got a lot of feedback because of my last &lt;a href="http://bennobaumgartner.blogspot.com/2010/01/p2-or-why-i-cant-sleep-anymore.html"&gt;P2 bashing blog post&lt;/a&gt;. A guy from &lt;a href="http://www.compeople.de"&gt;compeople&lt;/a&gt; even called me the other day, telling me they had the same problem and that they can provide a ready to use update mechanism. Not for free unfortunately. But it might be worth looking into it at some point. He also told me, that they are contributing to the eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; project which looks promising, have to look into this when I find some time.&lt;br /&gt;I understand, that the situation is frustrating for the P2 team and that I better should help resolving the issues instead of complaining. But please also understand, that our customer doesn't care and I had to work through the weekend to write my own update mechanism.&lt;br /&gt;Well the good news is that the &lt;a href="http://www.installjammer.com/"&gt;InstallJammer&lt;/a&gt; approach works so far and even better: &lt;a href="http://www.comerge.net/"&gt;Comerge&lt;/a&gt; agreed to open source the update code under a new project called &lt;a href="http://refresh.origo.ethz.ch/"&gt;Refresh&lt;/a&gt;. In this blog I want to explain how Refresh works.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to update an RCP with Refresh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Refresh connects to a set of updatesites and collects all available updates. An updatsite is an xml document hosted on a web server. The site contains a set of updates. An update is described by a product id, a version and a location of an executable. The updater can then download the executable and execute it. The executable is expected to update the client and then restart the client. We use InstallJammer to generate this executable. In the first part I describe how to program the updater in the second part I explain how to generate the executable.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Programming the updater&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First you need to collect the updatesites:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;HttpUpdateSitesReader reader= new HttpUpdateSitesReader(new File("updatesites.txt"));&lt;br /&gt;List&amp;lt;UpdateSite&amp;gt; sites= reader.getSites();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The updatesites.txt can contain as many updatsites as you want:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;http://foobar.com/maintenance/updatesite.xml&lt;br /&gt;http://dev.foobar.com/milestones/updatesite.xml&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I recommend to place this file next to the executable of your RCP. The user can then easily add new sites.&lt;br /&gt;&lt;br /&gt;The updater will then connect to all the sites and collect all updates for a given product:&lt;br /&gt;&lt;code&gt;UpdateSearcher searcher= new UpdateSearcher("foo.bar.product", sites.toArray(new UpdateSite[sites.size()]));&lt;br /&gt;List&amp;lt;Update&amp;gt; allUpdates= searcher.searchUpdates(new NullProgressMonitor());&lt;br /&gt;&lt;/code&gt;The updatesite is a simple xml file like this:&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;updatesite&amp;gt;&lt;br /&gt;   &amp;lt;update&amp;gt;&lt;br /&gt;      &amp;lt;product&amp;gt;foo.bar.product&amp;lt;/product&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;resource&amp;gt;http://foobar.com/update101.exe&amp;lt;/resource&amp;gt;&lt;br /&gt;   &amp;lt;/update&amp;gt;&lt;br /&gt;   &amp;lt;update&amp;gt;&lt;br /&gt;      &amp;lt;product&amp;gt;foo.bar.product&amp;lt;/product&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;0.2.0&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;resource&amp;gt;http://dev.foobar.com/update020.exe&amp;lt;/resource&amp;gt;&lt;br /&gt;   &amp;lt;/update&amp;gt;&lt;br /&gt;&amp;lt;/updatesite&amp;gt;&lt;br /&gt;&lt;/pre&gt;You then need to determine if there is an update available:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;List&amp;lt;Update&amp;gt; updates= EclipseVersionSchemaHelpers.getNewerVersions("0.1.0", allUpdates);&lt;br /&gt;if (updates.size() == 0)&lt;br /&gt; //no update available&lt;br /&gt; return;&lt;br /&gt;&lt;br /&gt;Update update= EclipseVersionSchemaHelpers.getNewestVersion(updates);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;The code assumes, that you use the standard eclipse versioning schema but using your own is straight forward.&lt;br /&gt;&lt;br /&gt;If there is an update available all what's left to do is to download the update and restart the workbench:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;if (update.install(".", new NullProgressMonitor())) {&lt;br /&gt; PlatformUI.getWorkbench().close();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;Of course you should use a ProgressDialog here and there and provide some useful error reporting. But you get the idea. The harder part is to generate the executable to update your client.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Generate InstallJammer updater&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can use the InstallJammer configuration GUI to define your updater. Defining an updater is quite simple, I only found two things which are not that obvious:&lt;br /&gt;1. The default update type must be set to silence, otherwise the user will see the installer UI and has to press finish at the end. I was not yet able to show a progress bar only when executing the installer.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xmJrQtcZlEc/S17mZoVLgTI/AAAAAAAAAFI/DNujtl1xFSs/s1600-h/install01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="569" src="http://2.bp.blogspot.com/_xmJrQtcZlEc/S17mZoVLgTI/AAAAAAAAAFI/DNujtl1xFSs/s640/install01.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;2. The folders which the installer is reading must be marked as active. Otherwise the content of the folders will be fixed and new files will not be picked up when generating the installer.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xmJrQtcZlEc/S17miHqwyLI/AAAAAAAAAFQ/2aTm433C3es/s1600-h/install02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_xmJrQtcZlEc/S17miHqwyLI/AAAAAAAAAFQ/2aTm433C3es/s640/install02.png" width="628" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once you have the installer defined you can use a simple bash script to generate the installer. My hudson build executes this script after the PDE build has finished:&lt;br /&gt;&lt;pre&gt;mkdir hudson-jobs/foobar/workspace/pluginbuilder/installerworkspace&lt;br /&gt;cd hudson-jobs/foobar/workspace/pluginbuilder/installerworkspace&lt;br /&gt;cp ../results/foobar-*.zip foobar.zip&lt;br /&gt;unzip foobar.zip&lt;br /&gt;./installjammer -DAppName foobarupdate --build-for-release --output-dir ../results/ --build ../../rcp/foo.bar.installer/FooBarUpdate.mpi&lt;br /&gt;mv ../results/foobarupdate--Setup.exe ../results/foobar-update.exe&lt;br /&gt;&lt;/pre&gt;That's it. I use the same script to generate an installer to install the RCP initially.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Things to do&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;All this is very simple, a bit too simple at the moment. There are certain must haves:&lt;br /&gt;1. Show a progress while the update installer is running&lt;br /&gt;2. Allow the installer to authenticate. Otherwise updates are available for everyone.&lt;br /&gt;3. Make it work on other platforms&lt;br /&gt;&lt;br /&gt;If you want to contribute or use the code go to the &lt;a href="http://refresh.origo.ethz.ch/"&gt;project page&lt;/a&gt;. The code is licensed under EPL.&lt;br /&gt;&lt;br /&gt;Thanks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6217393781957379795-4472582399559368092?l=bennobaumgartner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bennobaumgartner.blogspot.com/feeds/4472582399559368092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/rcp-update-no-more-jammern-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/4472582399559368092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/4472582399559368092'/><link rel='alternate' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/rcp-update-no-more-jammern-with.html' title='RCP Update: No more &quot;jammern&quot; with InstallJammer'/><author><name>Benno Baumgartner</name><uri>http://www.blogger.com/profile/02064743723537182269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_xmJrQtcZlEc/S0b5gF3-mHI/AAAAAAAAAEc/YACFB0mkuVI/S220/benno.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xmJrQtcZlEc/S17mZoVLgTI/AAAAAAAAAFI/DNujtl1xFSs/s72-c/install01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6217393781957379795.post-6826275799915742374</id><published>2010-01-15T09:23:00.000-08:00</published><updated>2010-01-15T09:23:10.712-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>P2 or why I can't sleep anymore</title><content type='html'>In the next one and a half year we are going to build a huge RCP for Switzerlands leading car sharer. They insisted to build a web frontend. We said that there is no way we are going to implement the beast they want in a web technology. They agreed under the condition that our rich client is able to update itself once deployed. I thought no problem: there is this new fancy updated mechanism called P2. This was about the time when I've started to worry and stopped sleeping.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Adding P2 self update to your RCP&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There is a nice tutorial explaining how to convert your existing RCP to become a self updating P2 enabled RCP here: &lt;a href="http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application"&gt;http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;First I had to change my hudson build to build a P2 enabled RCP. We use the &lt;a href="http://www.pluginbuilder.org/"&gt;plugin builder&lt;/a&gt; to configure the PDE headless build scripts. Even with the plugin builder it is far from trivial to set up a headless build. But once you get used to it it works quite well. Unfortunately the plugin builder doesn't seem to support P2 enabled builds. So I had to mess a bit around with the ant scripts. But after a day of swearing and sweating I was able to get it to work. Ok, the build now takes about twice as long as before but who cares?&lt;br /&gt;&lt;br /&gt;Next step was to add the P2 dependencies to the product, by adding the p2.user.ui feature. This worked quite well. The RCP now is only like 30 Megabytes larger but who cares?&lt;br /&gt;&lt;br /&gt;Next step was to add the check for update action as described in the above tutorial. This action is only about 100 lines long and uses almost exclusively internal P2 code plus it doesn't work out of the box because of &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282333"&gt;this bug&lt;/a&gt;. But who cares?!&lt;br /&gt;&lt;br /&gt;Now, I've increased the version number of the product, a feature and a plugin. Then I've add the location of the P2 repository which my brave little hudson builder crated as a touchpoint to the p2.inf file. For a start I've chosen to use a local repository located somewhere in my file system. All what's left is to start the old RCP and off we go with the automatic update! Yeah, whatever. It didn't work. Nothing, no update, no exception, no nothing. I've started to care!&lt;br /&gt;&lt;br /&gt;I've played around with it, several hours, googled, read forums, read the p2 equinox wiki. I've added the P2 update UI to my RCP and realized that it actually found the update site but did refuse to update. Then I made an interesting discovery: If I created the p2 repository by exporting the product with my local eclipse install and used this repository it worked! &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IT WORKED!!!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I assume something, no idea what, is wrong with my headless build. I thought ok, I can life with that for now: I only have to export the site every now and then. All what's left is to add the repository to some web server and point a touchpoint to the repository URL. Guess what: Didn't work! The exact same repository: If located in the file system it works, if added to a web server it doesn't. What's this good for!?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;No, it doesn't work! &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I had a tough night, got up at 4 o'clock in the morning and couldn't sleep no more. It was time to visit our CTO.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The CTO&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Our CTO is a unix hacker, he likes scripts and configuration files, he thinks that a console is a more then sufficient user interface (they even have copy paste support nowadays you know). He doesn't like frameworks and of course he hates Java. He said: Fuck that shit! You want to update your RCP? Just make your RCP download a self extracting zip file, close the RCP, execute the self extracting zip file in the install folder and start the RCP again: Voila! Know what: This sounds like a hack but there is a golden rule when writing software:&lt;br /&gt;GET THINGS DONE!&lt;br /&gt;And his approach does the Job. We can even update the JRE which we ship with the RCP (not like P2 that tries to delete the JRE while the JRE is still used which of course doesn't work on windows).&lt;br /&gt;&lt;br /&gt;But self extracting zips have some drawbacks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We couldn't find an easy way to generate them for windows with our linux build server&lt;/li&gt;&lt;li&gt;You can only add files and not delete files.&lt;/li&gt;&lt;li&gt;They only work on windows (not a problem for us though) &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;We found this nice open source project: &lt;a href="http://www.installjammer.com/"&gt;InstallJammer&lt;/a&gt;. With InstallJammer you can:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;build windows installers with linux.&lt;/li&gt;&lt;li&gt;execute various actions on install, including deleting files&lt;/li&gt;&lt;li&gt;run the installer in silent mode such that the user doesn't realize that what is executed is actually an installer&lt;/li&gt;&lt;li&gt;start your program after the installer has finished&lt;/li&gt;&lt;li&gt;build installers for windows, linux and they say osx support is coming soon &lt;/li&gt;&lt;/ul&gt;The next night I've slept like a baby.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here is my advice: If you need to update an RCP which you control, which can not be extended by users, then do not get into the P2 businesses. That's my opinion. I know it is possible to use P2 for this and I know there are people which used it successfully. But I like solutions which I can control and understand, and P2 I can not.&lt;br /&gt;&lt;br /&gt;In a next post I will explain a bit more in detail how we did it with the installer approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6217393781957379795-6826275799915742374?l=bennobaumgartner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bennobaumgartner.blogspot.com/feeds/6826275799915742374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/p2-or-why-i-cant-sleep-anymore.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/6826275799915742374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/6826275799915742374'/><link rel='alternate' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/p2-or-why-i-cant-sleep-anymore.html' title='P2 or why I can&apos;t sleep anymore'/><author><name>Benno Baumgartner</name><uri>http://www.blogger.com/profile/02064743723537182269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_xmJrQtcZlEc/S0b5gF3-mHI/AAAAAAAAAEc/YACFB0mkuVI/S220/benno.JPG'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6217393781957379795.post-4838481100538583916</id><published>2010-01-13T00:41:00.000-08:00</published><updated>2010-01-13T00:41:12.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Tom Schindl talks about E4 in Zuerich</title><content type='html'>Learning about E4, the next generation of the eclipse platform, is on my (low priority) list for quite a while now. If you are located near Zurich: the Java User Group Switzerland will host a talk about e4 given by Tom Schindl tomorrow evening:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jugs.ch/html/events/2010/e4.html"&gt;http://www.jugs.ch/html/events/2010/e4.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll be there and hope Toms talk will give me an E4 kick start. Please be aware, that you need to register for the talk.&lt;br /&gt;&lt;br /&gt;Also on my list for quite a while now is trying out following stuff:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html"&gt;Writing an RCP application using e4 modeled UI - part I&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feedproxy.google.com/%7Er/cypal/%7E3/ygb5cpVoPXg/first-e4-rcp-application.html"&gt;e4: First e4 RCP Application&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'm excited to learn more about E4.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6217393781957379795-4838481100538583916?l=bennobaumgartner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bennobaumgartner.blogspot.com/feeds/4838481100538583916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/tom-schindl-talks-about-e4-in-zuerich.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/4838481100538583916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/4838481100538583916'/><link rel='alternate' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/tom-schindl-talks-about-e4-in-zuerich.html' title='Tom Schindl talks about E4 in Zuerich'/><author><name>Benno Baumgartner</name><uri>http://www.blogger.com/profile/02064743723537182269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_xmJrQtcZlEc/S0b5gF3-mHI/AAAAAAAAAEc/YACFB0mkuVI/S220/benno.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6217393781957379795.post-2279129834571123481</id><published>2010-01-08T06:07:00.000-08:00</published><updated>2010-01-08T07:57:16.345-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aranea'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='open architecture ware'/><title type='text'>Running Open Architecture Ware workflows on save</title><content type='html'>We use &lt;a href="http://www.openarchitectureware.org/"&gt;open architecture ware&lt;/a&gt; for &lt;a href="http://aranea.origo.ethz.ch"&gt;Aranea&lt;/a&gt;. With &lt;a href="http://aranea.origo.ethz.ch"&gt;Aranea&lt;/a&gt; you can use a domain specific language (dsl) to model messages which can be send between Aranea nodes (computers). For example a message to send a status could look something like this:&lt;br /&gt;&lt;pre&gt;[project AraneaDemo prefix=A_] { &lt;br /&gt; [namespace Core] {&lt;br /&gt;  [message Status] {&lt;br /&gt;   properties={&lt;br /&gt;    message: string notVoid&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Open Architecture Ware is then used to interpret the dsl, generate a model out of it, and then generate Java and Eiffel code out of this model. The Java class for the message above looks something like this:&lt;br /&gt;&lt;style type="text/css"&gt;/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */.java5 .de1, .java5 .de2 {color: #000060; font-weight: normal;}.java5  {white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;}.java5 a:link {color: #006;}.java5 a:hover {background-color: #d6d6e6;}.java5 .head {font-family: Verdana, Arial, sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-bottom: 1px solid #d0d0d0; padding: 2px;}.java5 .foot {font-family: Verdana, Arial, sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-top: 1px solid #d0d0d0; padding: 2px;}.java5 .imp {font-weight: bold; color: red;}.java5 li, .java5 .li1 {font-family: 'Courier New', Courier, monospace; color: #000060; background-color: #e0e0e0; padding-bottom: 2px;}.java5 .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}.java5 .li2 {font-weight: bold; color: #000090; line-height: 90%}.java5 .kw1 {color: #000000;  font-weight: bold;}.java5 .kw2 {color: #000000; font-weight: bold;}.java5 .kw3 {color: #006600; font-weight: bold;}.java5 .kw4 {color: #006600; font-weight: bold;}.java5 .kw5 {color: #003399; font-weight: bold;}.java5 .kw6 {color: #003399; font-weight: bold;}.java5 .kw7 {color: #003399; font-weight: bold;}.java5 .kw8 {color: #003399; font-weight: bold;}.java5 .kw9 {color: #003399; font-weight: bold;}.java5 .kw10 {color: #003399; font-weight: bold;}.java5 .kw11 {color: #003399; font-weight: bold;}.java5 .kw12 {color: #003399; font-weight: bold;}.java5 .kw13 {color: #003399; font-weight: bold;}.java5 .kw14 {color: #003399; font-weight: bold;}.java5 .kw15 {color: #003399; font-weight: bold;}.java5 .kw16 {color: #003399; font-weight: bold;}.java5 .kw17 {color: #003399; font-weight: bold;}.java5 .kw18 {color: #003399; font-weight: bold;}.java5 .kw19 {color: #003399; font-weight: bold;}.java5 .kw20 {color: #003399; font-weight: bold;}.java5 .kw21 {color: #003399; font-weight: bold;}.java5 .kw22 {color: #003399; font-weight: bold;}.java5 .kw23 {color: #003399; font-weight: bold;}.java5 .kw24 {color: #003399; font-weight: bold;}.java5 .kw25 {color: #003399; font-weight: bold;}.java5 .kw26 {color: #003399; font-weight: bold;}.java5 .kw27 {color: #003399; font-weight: bold;}.java5 .kw28 {color: #003399; font-weight: bold;}.java5 .kw29 {color: #003399; font-weight: bold;}.java5 .kw30 {color: #003399; font-weight: bold;}.java5 .kw31 {color: #003399; font-weight: bold;}.java5 .kw32 {color: #003399; font-weight: bold;}.java5 .kw33 {color: #003399; font-weight: bold;}.java5 .kw34 {color: #003399; font-weight: bold;}.java5 .kw35 {color: #003399; font-weight: bold;}.java5 .kw36 {color: #003399; font-weight: bold;}.java5 .kw37 {color: #003399; font-weight: bold;}.java5 .kw38 {color: #003399; font-weight: bold;}.java5 .kw39 {color: #003399; font-weight: bold;}.java5 .kw40 {color: #003399; font-weight: bold;}.java5 .kw41 {color: #003399; font-weight: bold;}.java5 .kw42 {color: #003399; font-weight: bold;}.java5 .kw43 {color: #003399; font-weight: bold;}.java5 .kw44 {color: #003399; font-weight: bold;}.java5 .kw45 {color: #003399; font-weight: bold;}.java5 .kw46 {color: #003399; font-weight: bold;}.java5 .kw47 {color: #003399; font-weight: bold;}.java5 .kw48 {color: #003399; font-weight: bold;}.java5 .kw49 {color: #003399; font-weight: bold;}.java5 .kw50 {color: #003399; font-weight: bold;}.java5 .kw51 {color: #003399; font-weight: bold;}.java5 .kw52 {color: #003399; font-weight: bold;}.java5 .kw53 {color: #003399; font-weight: bold;}.java5 .kw54 {color: #003399; font-weight: bold;}.java5 .kw55 {color: #003399; font-weight: bold;}.java5 .kw56 {color: #003399; font-weight: bold;}.java5 .kw57 {color: #003399; font-weight: bold;}.java5 .kw58 {color: #003399; font-weight: bold;}.java5 .kw59 {color: #003399; font-weight: bold;}.java5 .kw60 {color: #003399; font-weight: bold;}.java5 .kw61 {color: #003399; font-weight: bold;}.java5 .kw62 {color: #003399; font-weight: bold;}.java5 .kw63 {color: #003399; font-weight: bold;}.java5 .kw64 {color: #003399; font-weight: bold;}.java5 .kw65 {color: #003399; font-weight: bold;}.java5 .kw66 {color: #003399; font-weight: bold;}.java5 .kw67 {color: #003399; font-weight: bold;}.java5 .kw68 {color: #003399; font-weight: bold;}.java5 .kw69 {color: #003399; font-weight: bold;}.java5 .kw70 {color: #003399; font-weight: bold;}.java5 .kw71 {color: #003399; font-weight: bold;}.java5 .kw72 {color: #003399; font-weight: bold;}.java5 .kw73 {color: #003399; font-weight: bold;}.java5 .kw74 {color: #003399; font-weight: bold;}.java5 .kw75 {color: #003399; font-weight: bold;}.java5 .kw76 {color: #003399; font-weight: bold;}.java5 .kw77 {color: #003399; font-weight: bold;}.java5 .kw78 {color: #003399; font-weight: bold;}.java5 .kw79 {color: #003399; font-weight: bold;}.java5 .kw80 {color: #003399; font-weight: bold;}.java5 .kw81 {color: #003399; font-weight: bold;}.java5 .kw82 {color: #003399; font-weight: bold;}.java5 .kw83 {color: #003399; font-weight: bold;}.java5 .kw84 {color: #003399; font-weight: bold;}.java5 .kw85 {color: #003399; font-weight: bold;}.java5 .kw86 {color: #003399; font-weight: bold;}.java5 .kw87 {color: #003399; font-weight: bold;}.java5 .kw88 {color: #003399; font-weight: bold;}.java5 .kw89 {color: #003399; font-weight: bold;}.java5 .kw90 {color: #003399; font-weight: bold;}.java5 .kw91 {color: #003399; font-weight: bold;}.java5 .kw92 {color: #003399; font-weight: bold;}.java5 .kw93 {color: #003399; font-weight: bold;}.java5 .kw94 {color: #003399; font-weight: bold;}.java5 .kw95 {color: #003399; font-weight: bold;}.java5 .kw96 {color: #003399; font-weight: bold;}.java5 .kw97 {color: #003399; font-weight: bold;}.java5 .kw98 {color: #003399; font-weight: bold;}.java5 .kw99 {color: #003399; font-weight: bold;}.java5 .kw100 {color: #003399; font-weight: bold;}.java5 .kw101 {color: #003399; font-weight: bold;}.java5 .kw102 {color: #003399; font-weight: bold;}.java5 .kw103 {color: #003399; font-weight: bold;}.java5 .kw104 {color: #003399; font-weight: bold;}.java5 .kw105 {color: #003399; font-weight: bold;}.java5 .kw106 {color: #003399; font-weight: bold;}.java5 .kw107 {color: #003399; font-weight: bold;}.java5 .kw108 {color: #003399; font-weight: bold;}.java5 .kw109 {color: #003399; font-weight: bold;}.java5 .kw110 {color: #003399; font-weight: bold;}.java5 .kw111 {color: #003399; font-weight: bold;}.java5 .kw112 {color: #003399; font-weight: bold;}.java5 .kw113 {color: #003399; font-weight: bold;}.java5 .kw114 {color: #003399; font-weight: bold;}.java5 .kw115 {color: #003399; font-weight: bold;}.java5 .kw116 {color: #003399; font-weight: bold;}.java5 .kw117 {color: #003399; font-weight: bold;}.java5 .kw118 {color: #003399; font-weight: bold;}.java5 .kw119 {color: #003399; font-weight: bold;}.java5 .kw120 {color: #003399; font-weight: bold;}.java5 .kw121 {color: #003399; font-weight: bold;}.java5 .kw122 {color: #003399; font-weight: bold;}.java5 .kw123 {color: #003399; font-weight: bold;}.java5 .kw124 {color: #003399; font-weight: bold;}.java5 .kw125 {color: #003399; font-weight: bold;}.java5 .kw126 {color: #003399; font-weight: bold;}.java5 .kw127 {color: #003399; font-weight: bold;}.java5 .kw128 {color: #003399; font-weight: bold;}.java5 .kw129 {color: #003399; font-weight: bold;}.java5 .kw130 {color: #003399; font-weight: bold;}.java5 .kw131 {color: #003399; font-weight: bold;}.java5 .kw132 {color: #003399; font-weight: bold;}.java5 .kw133 {color: #003399; font-weight: bold;}.java5 .kw134 {color: #003399; font-weight: bold;}.java5 .kw135 {color: #003399; font-weight: bold;}.java5 .kw136 {color: #003399; font-weight: bold;}.java5 .kw137 {color: #003399; font-weight: bold;}.java5 .kw138 {color: #003399; font-weight: bold;}.java5 .kw139 {color: #003399; font-weight: bold;}.java5 .kw140 {color: #003399; font-weight: bold;}.java5 .kw141 {color: #003399; font-weight: bold;}.java5 .kw142 {color: #003399; font-weight: bold;}.java5 .kw143 {color: #003399; font-weight: bold;}.java5 .kw144 {color: #003399; font-weight: bold;}.java5 .kw145 {color: #003399; font-weight: bold;}.java5 .kw146 {color: #003399; font-weight: bold;}.java5 .kw147 {color: #003399; font-weight: bold;}.java5 .kw148 {color: #003399; font-weight: bold;}.java5 .kw149 {color: #003399; font-weight: bold;}.java5 .kw150 {color: #003399; font-weight: bold;}.java5 .kw151 {color: #003399; font-weight: bold;}.java5 .kw152 {color: #003399; font-weight: bold;}.java5 .kw153 {color: #003399; font-weight: bold;}.java5 .kw154 {color: #003399; font-weight: bold;}.java5 .kw155 {color: #003399; font-weight: bold;}.java5 .kw156 {color: #003399; font-weight: bold;}.java5 .kw157 {color: #003399; font-weight: bold;}.java5 .kw158 {color: #003399; font-weight: bold;}.java5 .kw159 {color: #003399; font-weight: bold;}.java5 .kw160 {color: #003399; font-weight: bold;}.java5 .kw161 {color: #003399; font-weight: bold;}.java5 .kw162 {color: #003399; font-weight: bold;}.java5 .kw163 {color: #003399; font-weight: bold;}.java5 .kw164 {color: #003399; font-weight: bold;}.java5 .kw165 {color: #003399; font-weight: bold;}.java5 .kw166 {color: #003399; font-weight: bold;}.java5 .co1 {color: #666666; font-style: italic;font-style: normal;}.java5 .co2 {color: #006699;}.java5 .co3 {color: #008000; font-style: italic; font-weight: bold;}.java5 .coMULTI {color: #666666; font-style: italic;font-style: normal;}.java5 .es0 {color: #000099; font-weight: bold;font-weight: normal;}.java5 .br0 {color: #009900;}.java5 .sy0 {color: #339933;}.java5 .st0 {color: #0000ff;}.java5 .nu0 {color: #cc66cc;}.java5 .me1 {color: #006633;}.java5 .me2 {color: #006633;}.java5 .me {1}.java5 span.xtra { display:block; } &lt;/style&gt;&lt;br /&gt;&lt;div class="java5"&gt;&lt;div class="head"&gt;GeSHi © 2004-2007 Nigel McNie, 2007-2009 Benny Baumann, 2008-2009 Milian Wolff&lt;/div&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;package&lt;/span&gt; &lt;span class="co2"&gt;aranea.demo.core&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw2"&gt;class&lt;/span&gt; StatusMessage &lt;span class="kw2"&gt;extends&lt;/span&gt; AraneaMessage &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw2"&gt;final&lt;/span&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"&gt;&lt;span class="kw21"&gt;String&lt;/span&gt;&lt;/a&gt; message&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co3"&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co3"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Constructs a &amp;lt;code&amp;gt;Status&amp;lt;/code&amp;gt; message without reply handler.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co3"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="co3"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; StatusMessage&lt;span class="br0"&gt;(&lt;/span&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"&gt;&lt;span class="kw21"&gt;String&lt;/span&gt;&lt;/a&gt; message&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;this&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;message, &lt;span class="kw4"&gt;null&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="foot"&gt;Parsed in 0.093 seconds at 2.88 KB/s&lt;/div&gt;&lt;/div&gt;A so called worklflow is used to script how to convert the dsl file. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;The past&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Until now it was required to invoke the workflow by hand, that is: right click and select 'run oaw workflow' from the context menu. That was not very cool and sometimes we forgot to regenerate the classes after changing the dsl. I thought a better solution would be to use a builder.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ant builder&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Did you know that eclipse can run any ant script on build? You can add an ant builder to your projects and define when to execute the ant scripts. Right click your project then open &lt;i&gt;Properties &lt;/i&gt;and open the &lt;i&gt;Builder &lt;/i&gt;property page:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_xmJrQtcZlEc/S0cVzpBRepI/AAAAAAAAAFA/MjUFSuIot8w/s1600-h/builders.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_xmJrQtcZlEc/S0cVzpBRepI/AAAAAAAAAFA/MjUFSuIot8w/s320/builders.png" /&gt;&lt;/a&gt;&lt;br /&gt;Adding a new builder is trivial. The hard part was to write the ant script such that it can be executed. After a few days of trial and error I was able to create a script which can run any OAW workflow. The files are below and licensed under MIT license. I hope this is of use to someone. If you want to play with it read trough this site: &lt;a href="http://aranea.origo.ethz.ch/wiki/how_to_create_an_aranea_message_project"&gt;http://aranea.origo.ethz.ch/wiki/how_to_create_an_aranea_message_project&lt;/a&gt;&lt;br /&gt;&lt;style type="text/css"&gt;/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */.xml .de1, .xml .de2 {color: #000060; font-weight: normal;}.xml  {white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;}.xml a:link {color: #006;}.xml a:hover {background-color: #d6d6e6;}.xml .head {font-family: Verdana, Arial, sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-bottom: 1px solid #d0d0d0; padding: 2px;}.xml .foot {font-family: Verdana, Arial, sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-top: 1px solid #d0d0d0; padding: 2px;}.xml .imp {font-weight: bold; color: red;}.xml li, .xml .li1 {font-family: 'Courier New', Courier, monospace; color: #000060; background-color: #e0e0e0; padding-bottom: 2px;}.xml .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}.xml .li2 {font-weight: bold; color: #000090; line-height: 90%}.xml .coMULTI {font-style: normal;}.xml .es0 {color: #000099; font-weight: bold;font-weight: normal;}.xml .br0 {color: #66cc66;}.xml .sy0 {color: #66cc66;}.xml .st0 {color: #ff0000;}.xml .me {1}.xml .sc-1 {color: #808080; font-style: italic;}.xml .sc0 {color: #00bbdd;}.xml .sc1 {color: #ddbb00;}.xml .sc2 {color: #339933;}.xml .sc3 {color: #009900;}.xml .re0 {color: #000066;}.xml .re1 {color: #000000; font-weight: bold;}.xml .re2 {color: #000000; font-weight: bold;}.xml span.xtra { display:block; }&lt;/style&gt;&lt;br /&gt;&lt;div class="xml"&gt;&lt;div class="head"&gt;GeSHi © 2004-2007 Nigel McNie, 2007-2009 Benny Baumann, 2008-2009 Milian Wolff&lt;/div&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;project&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"project"&lt;/span&gt; &lt;span class="re0"&gt;default&lt;/span&gt;=&lt;span class="st0"&gt;"main"&lt;/span&gt; &lt;span class="re0"&gt;basedir&lt;/span&gt;=&lt;span class="st0"&gt;"."&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;import&lt;/span&gt; &lt;span class="re0"&gt;file&lt;/span&gt;=&lt;span class="st0"&gt;"runOAW.xml"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;target&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"main"&lt;/span&gt; &lt;span class="re0"&gt;description&lt;/span&gt;=&lt;span class="st0"&gt;"the main entry point"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;antcall&lt;/span&gt; &lt;span class="re0"&gt;target&lt;/span&gt;=&lt;span class="st0"&gt;"buildJava"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;antcall&lt;/span&gt; &lt;span class="re0"&gt;target&lt;/span&gt;=&lt;span class="st0"&gt;"buildEiffel"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/target&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;target&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"buildJava"&lt;/span&gt; &lt;span class="re0"&gt;description&lt;/span&gt;=&lt;span class="st0"&gt;"build the java messages"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"workflowLocation"&lt;/span&gt; &amp;nbsp;&lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;"${basedir}/src"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"workflowFile"&lt;/span&gt; &lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;"GenerateJavaMessages.oaw"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;antcall&lt;/span&gt; &lt;span class="re0"&gt;target&lt;/span&gt;=&lt;span class="st0"&gt;"RunOaW.generate"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/target&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;target&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"buildEiffel"&lt;/span&gt; &lt;span class="re0"&gt;description&lt;/span&gt;=&lt;span class="st0"&gt;"build the java messages"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"workflowLocation"&lt;/span&gt; &amp;nbsp;&lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;"${basedir}/src"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"workflowFile"&lt;/span&gt; &lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;"GenerateEiffelMessages.oaw"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;antcall&lt;/span&gt; &lt;span class="re0"&gt;target&lt;/span&gt;=&lt;span class="st0"&gt;"RunOaW.generate"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/target&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/project&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;project&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"RunOaW"&lt;/span&gt; &lt;span class="re0"&gt;default&lt;/span&gt;=&lt;span class="st0"&gt;"generate"&lt;/span&gt; &lt;span class="re0"&gt;basedir&lt;/span&gt;=&lt;span class="st0"&gt;"."&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"eclipse"&lt;/span&gt; &lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;"${eclipse.pdebuild.home}/../.."&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"plugins"&lt;/span&gt; &amp;nbsp;&lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;"${eclipse}/plugins"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;&lt;span class="sc-1"&gt;&amp;lt;!-- Classpath Definition --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="re0"&gt;id&lt;/span&gt;=&lt;span class="st0"&gt;"deps.classpath"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class="re0"&gt;dir&lt;/span&gt;=&lt;span class="st0"&gt;"${plugins}/"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"org.openarchitectureware.*.jar"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"org.apache.commons.*.jar"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"org.eclipse.*.jar"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/fileset&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class="re0"&gt;dir&lt;/span&gt;=&lt;span class="st0"&gt;"${plugins}/org.antlr_3.0.0"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"*.jar"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/fileset&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class="re0"&gt;dir&lt;/span&gt;=&lt;span class="st0"&gt;"${plugins}/org.antlr.runtime_3.0.0"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"*.jar"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/fileset&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;pathelement&lt;/span&gt; &lt;span class="re0"&gt;path&lt;/span&gt;=&lt;span class="st0"&gt;"${workflowLocation}"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;pathelement&lt;/span&gt; &lt;span class="re0"&gt;path&lt;/span&gt;=&lt;span class="st0"&gt;"${basedir}/../araneaMessage.dsl.generator/bin"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;pathelement&lt;/span&gt; &lt;span class="re0"&gt;path&lt;/span&gt;=&lt;span class="st0"&gt;"${basedir}/../araneaMessage.dsl/bin"&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class="re0"&gt;dir&lt;/span&gt;=&lt;span class="st0"&gt;"${plugins}/"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"araneaMessage.dsl*.jar"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/fileset&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/path&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;target&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"generate"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;taskdef&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"workflow"&lt;/span&gt; &lt;span class="re0"&gt;classpathref&lt;/span&gt;=&lt;span class="st0"&gt;"deps.classpath"&lt;/span&gt; &lt;span class="re0"&gt;classname&lt;/span&gt;=&lt;span class="st0"&gt;"org.openarchitectureware.workflow.ant.WorkflowAntTask"&lt;/span&gt; &lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/taskdef&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;workflow&lt;/span&gt; &lt;span class="re0"&gt;file&lt;/span&gt;=&lt;span class="st0"&gt;"${workflowFile}"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;classpath&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="re0"&gt;refid&lt;/span&gt;=&lt;span class="st0"&gt;"deps.classpath"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/classpath&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/workflow&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/target&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/project&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="foot"&gt;Parsed in 0.016 seconds at 126.32 KB/s&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;This &lt;a href="http://www.openarchitectureware.org/forum/viewtopic.php?showtopic=6435"&gt;form post&lt;/a&gt; helped me a lot to get this script right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6217393781957379795-2279129834571123481?l=bennobaumgartner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bennobaumgartner.blogspot.com/feeds/2279129834571123481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/running-open-architecture-ware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/2279129834571123481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/2279129834571123481'/><link rel='alternate' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/running-open-architecture-ware.html' title='Running Open Architecture Ware workflows on save'/><author><name>Benno Baumgartner</name><uri>http://www.blogger.com/profile/02064743723537182269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_xmJrQtcZlEc/S0b5gF3-mHI/AAAAAAAAAEc/YACFB0mkuVI/S220/benno.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xmJrQtcZlEc/S0cVzpBRepI/AAAAAAAAAFA/MjUFSuIot8w/s72-c/builders.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6217393781957379795.post-8147862259198145432</id><published>2010-01-08T02:07:00.000-08:00</published><updated>2010-01-08T06:34:56.549-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comerge'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='open architecture ware'/><title type='text'>Hello World</title><content type='html'>Hello World&lt;br /&gt;&lt;br /&gt;Finally: Yet Another Eclipse Blog! I will try this time to not let this blog become yet another zombi blog. I've use to &lt;a href="http://dev.eclipse.org/blogs/jdtui/"&gt;blog about the Java Development Tooling and Platform Text&lt;/a&gt; back in the days when I worked as an active eclipse committer at IBM and I actually enjoyed writing blogs.&amp;nbsp; But writing good blogs is time consuming and with customers on your back and milestones ahead writing blogs is never a priority. But this time everything is going to be different, promised;-)&lt;br /&gt;&lt;br /&gt;In this blog I'd like to write about the stuff we do with Eclipse here at &lt;a href="http://comerge.net/"&gt;Comerge&lt;/a&gt;, the company I work for. At the moment we use Eclipse as a tool to develop Java code (what else:-) . We create &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT &lt;/a&gt;frontends and use the JDT to code that stuff. We also use the Eclipse Rich Client platforms to build applications for our customers. We also maintain and develop &lt;a href="http://aranea.origo.ethz.ch/"&gt;Aranea&lt;/a&gt; and its Java port. We are using &lt;a href="http://www.openarchitectureware.org/"&gt;Open Architecture Ware&lt;/a&gt; there. Then we also develop and maintain &lt;a href="http://origo.ethz.ch/"&gt;Origo&lt;/a&gt; and its &lt;a href="http://mylyn.origo.ethz.ch/"&gt;Mylyn Origo connector&lt;/a&gt;. And in the spare time which I unfortunately don't have anymore I also work on another RCP: The &lt;a href="http://evolutionplayer.com/"&gt;Evolution Player&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I hope this will give me enough topics to blog about. Of course I'll try to blog only about stuff which is of interest to most of you.&lt;br /&gt;&lt;br /&gt;Benno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6217393781957379795-8147862259198145432?l=bennobaumgartner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bennobaumgartner.blogspot.com/feeds/8147862259198145432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/hello-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/8147862259198145432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6217393781957379795/posts/default/8147862259198145432'/><link rel='alternate' type='text/html' href='http://bennobaumgartner.blogspot.com/2010/01/hello-world.html' title='Hello World'/><author><name>Benno Baumgartner</name><uri>http://www.blogger.com/profile/02064743723537182269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_xmJrQtcZlEc/S0b5gF3-mHI/AAAAAAAAAEc/YACFB0mkuVI/S220/benno.JPG'/></author><thr:total>0</thr:total></entry></feed>
