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

<channel>
	<title>Kresnadi T. Budisantoso</title>
	<atom:link href="http://www.ktb-blog.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ktb-blog.de</link>
	<description>kill time before time kills you</description>
	<pubDate>Wed, 24 Feb 2010 07:55:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Ein Status kommt selten allein &#8230;</title>
		<link>http://www.ktb-blog.de/allgemein/ein-status-kommt-selten-allein/</link>
		<comments>http://www.ktb-blog.de/allgemein/ein-status-kommt-selten-allein/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 07:53:42 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=270</guid>
		<description><![CDATA[Als Anwendungsentwickler oder Software-Architekt kommt man immer wieder mit UML Statechart-Diagrammen in Berührung. Immer wieder spricht man in diesem Zusammenhang vom Status eines Objekts und stolpert dabei auch immer wieder über die Mehrzahl des Status. Doch wie lautet diese eigentlich? &#8220;Stati&#8221; hört man häufig, doch das ist leider falsch. Hier ein kleiner Artikel von duden.de, der [...]]]></description>
			<content:encoded><![CDATA[<p>Als Anwendungsentwickler oder Software-Architekt kommt man immer wieder mit UML Statechart-Diagrammen in Berührung. Immer wieder spricht man in diesem Zusammenhang vom Status eines Objekts und stolpert dabei auch immer wieder über die Mehrzahl des Status. Doch wie lautet diese eigentlich? &#8220;Stati&#8221; hört man häufig, doch das ist leider falsch. Hier ein kleiner Artikel von <a title="Duden Newsletter Archiv" href="http://www.duden.de/deutsche_sprache/sprachberatung/newsletter/archiv.php?id=9">duden.de</a>, der alle (Un-)Klarheiten beseitigt <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<blockquote>
<p class="hl2">Was Sie schon immer wissen wollten</p>
<p class="fliess"><strong>Ein Status kommt selten allein &#8230;</strong></p>
<p class="fliess">&#8230; und wie nennt man nun mehrere davon? Vielleicht „Stati”, Staten oder gar „Statusse”? Viele der Fremdwörter auf -us, die aus dem Lateinischen oder Griechischen übernommen wurden, bilden den Plural mit der deutschen Endung -e[n], so z. B. „Virus – Viren”, „Zyklus – Zyklen” oder „Globus – Globen/Globusse” (beides ist möglich!). Einige tanzen jedoch aus der Reihe und behalten ihre ursprüngliche Pluralform bei. Auch der Status konnte sich von seinen lateinischen Wurzeln nicht trennen und bildet seinen Plural nach wie vor mit der Endung -us (mit lang gesprochenem u!), also „die Status”. Genauso verhält es sich übrigens auch bei „(der) Passus – (die) Passus” und „(der) Kasus – (die) Kasus”.</p>
<p>Jetzt können sie kommen, die Status!</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/allgemein/ein-status-kommt-selten-allein/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Plesk und Ruby on Rails</title>
		<link>http://www.ktb-blog.de/allgemein/plesk-und-ruby-on-rails/</link>
		<comments>http://www.ktb-blog.de/allgemein/plesk-und-ruby-on-rails/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 17:52:15 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=257</guid>
		<description><![CDATA[Ich habe gerade ein paar Infos zu Plesk und Ruby on Rails gefunden. Allerdings kann ich noch nicht bestätigen, ob die beschriebene Anleitungauf funktioniert &#8230;
Go to your domain that you want to adjust, and click Setup. Make sure the CGI and FastCGI options are enabled. Pick a name for your application and make the directory [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe gerade ein paar <a title="Infos zu Plesk und Ruby on Rails" href="http://rackerhacker.com/2008/08/11/enabling-ruby-on-rails-support-for-a-domain-in-plesk/" target="_blank">Infos zu Plesk und Ruby on Rails</a> gefunden. Allerdings kann ich noch nicht bestätigen, ob die beschriebene Anleitungauf funktioniert &#8230;</p>
<blockquote><p>Go to your domain that you want to adjust, and click Setup. Make sure the CGI and FastCGI options are enabled. Pick a name for your application and make the directory for your application in the httpdocs directory. Upload your files to that directory.</p>
<p>Once you’ve done that, create an .htaccess file in the httpdocs directory with the following text inside:</p>
<p>RewriteEngine On<br />
RewriteRule ^$ /public/index.html [L]<br />
RewriteCond % !^/railsapp/public<br />
RewriteRule ^(.*)$ /public/$1 [L]<br />
RewriteCond % !-f<br />
RewriteRule ^(.*)$ public/dispatch.fcgi/$1 [QSA,L]</p>
<p>Remove the .htaccess file within the public directory of your application and add a file called dispatch.fcgi to that directory which contains:</p>
<p>#!/usr/bin/ruby</p>
<p>You should be able to access your application at http://domain.com/railsapp/</p></blockquote>
<p>Thx Major Hayden 4 the information <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/allgemein/plesk-und-ruby-on-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>rubber uses deprecated md5 module</title>
		<link>http://www.ktb-blog.de/open-source/ubuntu/rubber-uses-deprecated-md5-module/</link>
		<comments>http://www.ktb-blog.de/open-source/ubuntu/rubber-uses-deprecated-md5-module/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 08:12:55 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Ubuntu]]></category>

		<category><![CDATA[ubuntu linux gedit latex rubber patch]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=253</guid>
		<description><![CDATA[Auf dieses Problem bin ich nun mehrfach gestoßen, nachdem ich das gedit-latex-plugin aus den repositories installiert habe. Um nicht immer wieder nach dem Bugfix suchen zu müssen, hier der Link:
https://bugs.launchpad.net/ubuntu/+source/rubber/+bug/338285
Einfach den Patch, der dort verlinkt ist herunterladen und dann &#8230;
You just need to download the patch file to somewhere convenient (let&#8217;s say a folder called ~/rubberpatch) [...]]]></description>
			<content:encoded><![CDATA[<p>Auf dieses Problem bin ich nun mehrfach gestoßen, nachdem ich das gedit-latex-plugin aus den repositories installiert habe. Um nicht immer wieder nach dem Bugfix suchen zu müssen, hier der Link:</p>
<p><a href="https://bugs.launchpad.net/ubuntu/+source/rubber/+bug/338285">https://bugs.launchpad.net/ubuntu/+source/rubber/+bug/338285</a></p>
<p>Einfach den Patch, der dort verlinkt ist herunterladen und dann &#8230;</p>
<blockquote><p>You just need to download the patch file to somewhere convenient (let&#8217;s say a folder called ~/rubberpatch) and then run the patch tool:</p>
<p>cd ~/rubberpatch<br />
sudo patch /usr/share/rubber/rubber/util.py util.py.diff</p></blockquote>
<p>Dat wars <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/open-source/ubuntu/rubber-uses-deprecated-md5-module/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Impressionen aus Arès/Frankreich</title>
		<link>http://www.ktb-blog.de/allgemein/impressionen-aus-aresfrankreich/</link>
		<comments>http://www.ktb-blog.de/allgemein/impressionen-aus-aresfrankreich/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 09:36:16 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=251</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<div class="ngg-galleryoverview" id="ngg-gallery-5"><div class="slideshowlink"><a class="slideshowlink" href="http://www.ktb-blog.de/nggallery/post/impressionen-aus-aresfrankreich/slideshow">[zur Slideshow umschalten]</a></div><div id="ngg-image-214" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb214" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1541.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1541.jpg" alt="cimg1541.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1541.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-215" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb215" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1555.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1555.jpg" alt="cimg1555.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1555.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-216" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb216" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1578.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1578.jpg" alt="cimg1578.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1578.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-217" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb217" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1605.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1605.jpg" alt="cimg1605.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1605.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-218" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb218" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1609.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1609.jpg" alt="cimg1609.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1609.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-219" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb219" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1621.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1621.jpg" alt="cimg1621.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1621.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-220" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb220" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1661.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1661.jpg" alt="cimg1661.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1661.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-221" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb221" href="http://www.ktb-blog.de/wp-content/gallery/ares2009/cimg1678.jpg" title="" rel="lightbox[ares2009]" ><img title="cimg1678.jpg" alt="cimg1678.jpg" src="http://www.ktb-blog.de/wp-content/gallery/ares2009/thumbs/thumbs_cimg1678.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
</div>
<div class='ngg-clear'></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/allgemein/impressionen-aus-aresfrankreich/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Viecher</title>
		<link>http://www.ktb-blog.de/allgemein/viecher/</link>
		<comments>http://www.ktb-blog.de/allgemein/viecher/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 13:55:15 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Terraristik]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=246</guid>
		<description><![CDATA[-ohne Worte-  
]]></description>
			<content:encoded><![CDATA[<p>-ohne Worte- <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p><div class="ngg-galleryoverview" id="ngg-gallery-4"><div class="slideshowlink"><a class="slideshowlink" href="http://www.ktb-blog.de/nggallery/post/viecher/slideshow">[zur Slideshow umschalten]</a></div><div id="ngg-image-204" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb204" href="http://www.ktb-blog.de/wp-content/gallery/viecher/cimg0285.jpg" title="Hemidactylus spec. (vermutlich Hemidactylus platyurus)" rel="lightbox[viecher]" ><img title="cimg0285.jpg" alt="cimg0285.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_cimg0285.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-205" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb205" href="http://www.ktb-blog.de/wp-content/gallery/viecher/cimg0297.jpg" title="Lygodactylus kimhowelli" rel="lightbox[viecher]" ><img title="cimg0297.jpg" alt="cimg0297.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_cimg0297.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-206" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb206" href="http://www.ktb-blog.de/wp-content/gallery/viecher/cimg1456.jpg" title="Litoria caerulea" rel="lightbox[viecher]" ><img title="cimg1456.jpg" alt="cimg1456.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_cimg1456.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-207" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb207" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf8450.jpg" title="Lygodactylus kimhowelli auf der Jagd" rel="lightbox[viecher]" ><img title="dscf8450.jpg" alt="dscf8450.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf8450.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-208" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb208" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf8649.jpg" title="" rel="lightbox[viecher]" ><img title="dscf8649.jpg" alt="dscf8649.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf8649.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-209" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb209" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf8655.jpg" title="Hyperolius spec. (wahrscheinlich Hyperolius puncticulatus)" rel="lightbox[viecher]" ><img title="dscf8655.jpg" alt="dscf8655.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf8655.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-210" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb210" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf9174.jpg" title="Petty &#038; Selma" rel="lightbox[viecher]" ><img title="dscf9174.jpg" alt="dscf9174.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf9174.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-211" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb211" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf9184.jpg" title="Zeus" rel="lightbox[viecher]" ><img title="dscf9184.jpg" alt="dscf9184.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf9184.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-212" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb212" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf9217.jpg" title="" rel="lightbox[viecher]" ><img title="dscf9217.jpg" alt="dscf9217.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf9217.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
<div id="ngg-image-213" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb213" href="http://www.ktb-blog.de/wp-content/gallery/viecher/dscf9318.jpg" title="Pandinus imperator" rel="lightbox[viecher]" ><img title="dscf9318.jpg" alt="dscf9318.jpg" src="http://www.ktb-blog.de/wp-content/gallery/viecher/thumbs/thumbs_dscf9318.jpg" style="width:125px; height:94px;" /></a>
</div>
</div>
</div>
<div class='ngg-clear'></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/allgemein/viecher/feed/</wfw:commentRss>
		</item>
		<item>
		<title>UUIDs im EMF-Modell verwenden</title>
		<link>http://www.ktb-blog.de/diplomarbeit/uuids-im-emf-modell-verwenden/</link>
		<comments>http://www.ktb-blog.de/diplomarbeit/uuids-im-emf-modell-verwenden/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 10:53:49 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Diplomarbeit]]></category>

		<category><![CDATA[EMF]]></category>

		<category><![CDATA[MDT]]></category>

		<category><![CDATA[Model]]></category>

		<category><![CDATA[UML2]]></category>

		<category><![CDATA[UUID]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=231</guid>
		<description><![CDATA[Die Referenzierung erfolgt in der XML/XMI-Repräsentation eines EMF-generierten Modells standardmäßig über XPath Ausdrücke (hm, stimmt das? wo hab ich das denn gelesen?).
&#60;packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" name="TravelBookingSystem"&#62;
    &#60;generalization general="#//BookingSystem"/&#62;
    &#60;!-- ... --&#62;
&#60;/packagedElement&#62;
&#60;packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" name="TravelBookingSystem"&#62;
    &#60;!-- ... --&#62;
&#60;/packagedElement&#62;
Hieraus ergibt sich der Nachteil, dass ein SUM-View-Mapping der Modellelemente nur zu Programmlaufzeit [...]]]></description>
			<content:encoded><![CDATA[<p>Die Referenzierung erfolgt in der XML/XMI-Repräsentation eines EMF-generierten Modells standardmäßig über XPath Ausdrücke (hm, stimmt das? wo hab ich das denn gelesen?).<br />
<code>&lt;packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" name="TravelBookingSystem"&gt;<br />
    &lt;generalization general="#//BookingSystem"/&gt;<br />
    &lt;!-- ... --&gt;<br />
&lt;/packagedElement&gt;<br />
&lt;packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" name="TravelBookingSystem"&gt;<br />
    &lt;!-- ... --&gt;<br />
&lt;/packagedElement&gt;</code></p>
<p>Hieraus ergibt sich der Nachteil, dass ein SUM-View-Mapping der Modellelemente nur zu Programmlaufzeit sichergestellt werden kann. Ändert man zum Beispiel den Namen der Komponente &#8220;BookingSystem&#8221; in der View &#8220;offline&#8221; und möchte dann die Änderung in das SUM importieren, ist die nicht mehr korrekt möglich, da kein passendes Mapping mehr erfolgen kann. Vor allem hinsichtlich einer kollaborativen Entwicklung ergeben sich Schwierigkeiten, die ohne künstliche IDs nicht zu umgehen sind.</p>
<p>Aus diesem Grund gibt es die Möglichkeit UUIDs zu verwenden. Da diese bei EMF-generierten Modellen standardmäßig nicht vorgesehen sind, ist ein kleiner Eingriff des Programmierers in den erzeugten Code notwendig. Wie das funktioniert habe ich vor allem durch einen <a href="http://serdom.eu/ser/2007/03/05/how-to-enable-uuid-in-emf-generated-model-to-get-copypaste-working">Artikel von Seweryn Niemiec</a> erfahren: <a href="http://serdom.eu/ser/2007/03/05/how-to-enable-uuid-in-emf-generated-model-to-get-copypaste-working">How To Enable UUID In EMF Generated Model [...]</a></p>
<p>Folgende Änderungen brachten mich zum Ziel:</p>
<ol>
<li>Die Klasse <strong>KobrA2SUMResourceFactoryImpl</strong> erweitert <strong>org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl</strong></li>
<li>Die Klasse <strong>KobrA2SUMResourceImpl</strong> erweitert <strong>org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl</strong></li>
<li>Außerdem wurde die Methode <strong>useUUIDs()</strong> der Klasse <strong>KobrA2SUMResourceImpl</strong> überschrieben:<br />
<code>/* (non-Javadoc)<br />
* @see org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl#useUUIDs()<br />
*/<br />
@Override<br />
protected boolean useUUIDs() {<br />
    return true;<br />
}</code></li>
</ol>
<p>Schließlich erhielt ich ein Modell, das UUIDs verwendet und auch über diese referenziert.<br />
<code>&lt;packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" xmi:id="_5F2l0CKuEd654_10FfizxA" name="TravelBookingSystem"&gt;<br />
    &lt;generalization xmi:id="_5F96kCKuEd654_10FfizxA" general="#_5H7CYSKuEd654_10FfizxA"/&gt;<br />
    &lt;!-- ... --&gt;<br />
&lt;/packagedElement&gt;<br />
&lt;packagedElement xsi:type="KobrA2SUM.Structure:K2Class" xmi:id="_5H7CYSKuEd654_10FfizxA" name="BookingSystem"&gt;<br />
    &lt;!-- ... --&gt;<br />
&lt;/packagedElement&gt;</code></p>
<p>Bei der View-Erzeugung werden dann die UUIDs der Elemente &#8220;kopiert&#8221;, d.h. die UUID des Elements des SUM per <em>eObject.eResource().getURIFragment(eObject)</em> ausgelesen und dann beim Element der View manuell per <em>UMLResource.setID(eObject)</em> gesetzt.</p>
<p>Um dies herauszufinden war das durchstöbern der Newsgroup <a title="MDT UML2 Newsgroup" href="http://dev.eclipse.org/newslists/news.eclipse.modeling.mdt.uml2/">[news.eclipse.modeling.mdt.uml2]</a> sehr hilfreich, denn dort fand ich <a title="UUID Zugriff - Erläuterung in der MDT UML2 Newsgroup" href="http://dev.eclipse.org/newslists/news.eclipse.modeling.mdt.uml2/msg02741.html">den entsprechenden Hinweis</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/diplomarbeit/uuids-im-emf-modell-verwenden/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SUM-&gt;SpecificationStructuralServiceView Transformation</title>
		<link>http://www.ktb-blog.de/diplomarbeit/sum-specificationstructuralserviceview-transformation/</link>
		<comments>http://www.ktb-blog.de/diplomarbeit/sum-specificationstructuralserviceview-transformation/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:31:59 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Diplomarbeit]]></category>

		<category><![CDATA[KobrA2]]></category>

		<category><![CDATA[Pseudocode]]></category>

		<category><![CDATA[SpecificationStructuralServiceView]]></category>

		<category><![CDATA[SUM]]></category>

		<category><![CDATA[Transformation]]></category>

		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=220</guid>
		<description><![CDATA[Heute möchte ich meine vorgehensweise zur SUM-&#62;View Transformation anhand von Pseudocode erläutern. Die Java-Implementierung ist etwas komplexer, doch im Kern spiegelt der Pseudocode meine programmatische Umsetzung wieder.
Noch ein paar Hintergrundinformationen, bevor es zur Sache geht: Im Prinzip geht es darum, ein KobrA2-Modell (SUM), für das ich ein auf MDT UML basiertes Metamodell erstellt habe, in [...]]]></description>
			<content:encoded><![CDATA[<p>Heute möchte ich meine vorgehensweise zur SUM-&gt;View Transformation anhand von Pseudocode erläutern. Die Java-Implementierung ist etwas komplexer, doch im Kern spiegelt der Pseudocode meine programmatische Umsetzung wieder.</p>
<p><span id="more-220"></span>Noch ein paar Hintergrundinformationen, bevor es zur Sache geht: Im Prinzip geht es darum, ein KobrA2-Modell (SUM), für das ich ein auf MDT UML basiertes Metamodell erstellt habe, in ein UML-Modell (View) zu transformieren. Dabei sollen speziell für die sogenannte SpecificationStructuralServiceView der KobrA2-Methode nur die «subject»-Komponente mit ihren public Attributen und Methoden, alle «acquired» Komponenten samt public Attributen und Methoden, sowie alle Generalisierungen (rekursiv) der Komponenten mit public Attributen und Methoden aus dem SUM extrahiert werden.</p>
<p>Bis jetzt gehe ich davon aus, dass ich zusätzlich noch die verwendeten &#8220;Types&#8221; transformieren muss, obwohl in der KobrA2-Methode eine eigene View für die verwendeten Types vorgesehen ist. Doch während ich eben darüber nachgedacht habe, kann es sein, dass es ausreicht auf die Elemente im SUM zu referenzieren, falls sie nicht für die Transformation vorgesehen sind. Ob und inwieweit dies möglich ist, muss ich allerdings noch untersuchen.</p>
<p>Nun zum Eingemachten <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>SUM-&gt;View Pseudocode</h2>
<p>Der Hauptteil ist eigentlich ganz simpel. Und auch die folgenden ausgelagerten Funktionen sollten eigentlich selbsterklärend sein &#8230;<br />
<code>k2s = select subject in SUM<br />
s = addComponentClass(k2s)<br />
apply stereotype «subject» to s<br />
.<br />
k2aCCs = select acquired componentClasses in SUM<br />
for each k2cc in k2aCCs:<br />
cc = addComponentClass(k2cc)<br />
a = add association between s and cc<br />
apply stereotype «acquired» to a<br />
.<br />
//TODO: add comments or better add constraints? or add both?<br />
//but don't know yet how -.-</code></p>
<p>function <strong>addComponentClass(k2cc)</strong>:<br />
<code>if not k2cc already passed transformation:<br />
c = create class in view<br />
apply stereotype «componentClass» to c<br />
addPublicAttributes(k2cc, c)<br />
addPublicOperations(k2cc, c)<br />
addGeneralizations(k2cc, c)<br />
return c<br />
else:<br />
return class of view that represents k2cc</code></p>
<p>function <strong>addPublicAttributes(k2classifier, classifier)</strong>:<br />
<code>for each k2property in (get owned attributes of k2classifier):<br />
if visibility of k2property is public:<br />
k2type = type of k2property<br />
translatedType = mapType(k2type)<br />
add attribute of translatedType with same name as k2property to classifier</code></p>
<p>function <strong>addPublicOperations(k2class, class)</strong>:<br />
<code>for each k2operation in (get owned operations of k2class):<br />
if visibility of k2class is public:<br />
op = create operation in class with same name as k2operation<br />
for each k2param in (get owned parameters of k2operation):<br />
k2type = type of k2param<br />
translatedType = mapTyppe(k2type)<br />
param = add parameter of translatedType with same name as k2param to op<br />
set direction of param (same as k2param)<br />
set multiplicities of param if values != 1 (same as k2param)<br />
add op to class</code></p>
<p>function <strong>addGeneralizations(k2classifier, classifier)</strong>:<br />
<code>for each k2general in (get general classifiers of k2classifier):<br />
if k2classifier is instance of K2ComponentClass:<br />
general = addComponentClass(k2general)<br />
if k2classifier is instance of Class:<br />
//this includes the case that k2classifier is a K2Class<br />
general = addClass(k2general)<br />
if k2classifier is instance of Interface:<br />
general = addInterface(k2general)<br />
else:<br />
????<br />
//what about PrimitiveType and Enumeration???<br />
general = null<br />
.<br />
add generalization to classifier that points to general</code></p>
<p>function <strong>addClass(k2class)</strong>:<br />
<code>if k2class has an according element in the view:<br />
if attributes and operations are missing:<br />
c = select Class from view<br />
else<br />
c = create Class in view<br />
.<br />
if c is not null:<br />
addPublicAttributes(k2class, c)<br />
addPublicOperations(k2class, c)<br />
addGeneralizations(k2class, c)<br />
.<br />
return c</code></p>
<p>function <strong>addInterface(k2interface)</strong>:<br />
<code>if k2interface has an according element in the view:<br />
if attributes and operations are missing:<br />
i = select Interface from view<br />
else<br />
i = create Interface in view<br />
.<br />
if i is not null:<br />
addPublicAttributes(k2interface, i)<br />
addPublicOperations(k2interface, i)<br />
addGeneralizations(k2interface, i)<br />
.<br />
return i</code></p>
<p>function <strong>mapType(k2type)</strong>:<br />
<code>if k2type has an according element in the view:<br />
viewType = according element<br />
else:<br />
if k2type is instance of K2ComponentClass<br />
//is this component automatically acquired???<br />
viewType = addComponentClass(k2type)<br />
else<br />
//classifiers are added without any operations and attributes<br />
viewType = create Type of same MetaClass as k2type in view<br />
.<br />
return viewType</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/diplomarbeit/sum-specificationstructuralserviceview-transformation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>KobrA2 Metamodellierung</title>
		<link>http://www.ktb-blog.de/diplomarbeit/kobra2-metamodellierung/</link>
		<comments>http://www.ktb-blog.de/diplomarbeit/kobra2-metamodellierung/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 14:56:05 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Diplomarbeit]]></category>

		<category><![CDATA[EMF]]></category>

		<category><![CDATA[KobrA2]]></category>

		<category><![CDATA[MDT]]></category>

		<category><![CDATA[Metamodel]]></category>

		<category><![CDATA[Metamodellierung]]></category>

		<category><![CDATA[org.eclipse.uml2]]></category>

		<category><![CDATA[UML2]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=206</guid>
		<description><![CDATA[Endlich melde ich mich nach etwas längerer Pause mit einem neuen Artikel zurück. In der Zwischenzeit ist auch das eine oder andere geschehen, auch hinsichtlich meiner Diplomarbeit. Heute möchte ich mich dem Thema &#8220;Metamodellierung&#8221; widmen:
Grundlage: Jan&#8217;s Diplomarbeit
Grundlage dieses Teils meiner Arbeit war diesmal vor allem die Diplomarbeit von Jan Kadathukalam, der in den Abschnitten 3.1 [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich melde ich mich nach etwas längerer Pause mit einem neuen Artikel zurück. In der Zwischenzeit ist auch das eine oder andere geschehen, auch hinsichtlich meiner Diplomarbeit. Heute möchte ich mich dem Thema &#8220;Metamodellierung&#8221; widmen:</p>
<h3>Grundlage: Jan&#8217;s Diplomarbeit</h3>
<p>Grundlage dieses Teils meiner Arbeit war diesmal vor allem die Diplomarbeit von Jan Kadathukalam, der in den Abschnitten 3.1 und 3.3 die benötigten theoretischen Hintergrund erläutert. Aus seiner praktischen Arbeit habe ich das auf MDT UML2 basierte KobrA2 Metamodell verwendet und an meine Anforderungen angepasst. Diese Anpassungen sind in erster Linie das Umbenennen der Packages, das Ausgliedern der Elemente <em>K2Model</em> und <em>K2Package</em> sowie die Erweiterung des Package <em>Structure</em> (ehemals <em>StructureClasses</em>) um die voraussichtlich für meine Arbeit benötigten Elemente des KobrA2 Metamodells.</p>
<p><span id="more-206"></span></p>
<h3>Erweiterung des UML-Metamodells</h3>
<p>Die Aufgabenstellung meiner Diplomarbeit fordert die Erzeugung eines simplen Metamodells, so dass die in erster Linie geforderten Transformationen (SUM-&gt;View und View-&gt;SUM) realisiert werden können. Eine Erweiterung des UML-Metamodells liegt quasi auf der Hand.</p>
<p>Da die Views selbst mit einer Lightweight Erweiterung der UML (durch Profile/Stereotypen) umgesetzt werden sollen, war mein erster Gedanke natürlich, auch das Metamodell des SUM über die Lightweight Extension zu realisieren, so dass das Quell- und Zielmodell der Transformationen im Prinzip das selbe Metamodell haben. Der Lehrstuhl allerdings propagiert die Erstellung eines eigenen KobrA2-Metamodells, so dass letztendlich nur eine Middle- oder Heavyweight Extension der UML in Frage kommt, wenn man die Vorteile der Metamodellierung mittels MDT UML2 nutzen möchte (vgl. Abschnitt 3.3.1 in Jans DA):</p>
<blockquote>
<ul>
<li>property redefinition</li>
<li>property subsetting</li>
<li>profiles (users of your metamodel can extend it using profiles just like you can extend UML)</li>
<li>package merge to separate the concerns in your DSL (not really much impact on the generated result, though)</li>
<li>pluralized getter methods for singular property names</li>
</ul>
<p>Plus, you get certain code-generation enhancements provided by UML2:</p>
<ul>
<li>Operations classes to factor out single implementations of your operations in a multiple-inheritance context</li>
<li>derived-value caching in the CacheAdapter</li>
<li>creation methods (including support for named elements)</li>
<li>name-based search accessors for list properties</li>
</ul>
</blockquote>
<p>Die Wahl fiel schließlich auf die Middleweight-Extension, aus Gründen, die bereits Jan in seiner Diplomarbeit erwähnt, weshalb ich hier nicht weiter darauf eingehe. Jedoch die Vor- und Nachteile der Middleweight-Extension möchte ich an dieser Stelle nochmals auflisten:</p>
<blockquote><p>Vorteile</p>
<ul>
<li>First class extension mechanism.</li>
<li>Easier than heavyweight to create initially.</li>
<li>Easy for end user to use programmatically than profiles.</li>
<li>Can add behavior.</li>
<li>Can add structure.</li>
<li>Can add constraints.</li>
</ul>
<p>Nachteile</p>
<ul>
<li>Creates dependence on specific version of UML.</li>
<li>Difficult to maintain especially if UML changes.</li>
<li>User must know about 2 factories for creating elements, the UMLFactory and the new one defined by the extension.</li>
</ul>
</blockquote>
<p>(Quelle: <em>James Bruck, Christian Damus; Tutorial: <a href="http://www.eclipsecon.org/2008/sub/attachments/Creating_Robust_Scalable_DSLs_with_UML.ppt">Creating Robust Scalable DSLs with UML</a>; eclipseCON 2008</em>)</p>
<h3>KobrA2 Metamodell erstellen</h3>
<p>Nun zum praktischen Teil <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ich gehe mal davon aus, dass der Leser - falls er (also du) diese Schritte nachvollziehen möchte - die erforderlichen Eclipse-Plugins bereits installiert hat, bzw. selbst herausfinden kann, was er benötigt, weshalb ich an dieser Stelle nur mit zwei Stichworten Hilfestellung geben möchte: EMF und UML2.</p>
<p>Zunächst habe ich in Eclipse ein neues Projekt erstellt, genauer gesagt ein neues <em>EMF Project</em>. Hier habe ich Jan&#8217;s UML-KobrA2-Metamodell eingefügt, das ich dann mit dem mit MDT UML2 mitgelieferten Editor öffnen konnte. Dieser Editor bietet zwar die Möglichkeit, ein Modell in ein Metamodell umzuwandeln, doch dieser Schritt war nicht mehr notwendig, da ja bereits ein Metamodell vorlag.</p>
<p>Nachdem ein Modell bereits in ein Metamodell umgewandelt wurde, ist es notwendig einer neu hinzugefügten Klasse den Stereotyp <em>Metaclass</em> zu verpassen, um sie zur Metaklasse aufzuwerten. Das benötigte UML-Profil wurde bei der Umwandlung automatisch referenziert.</p>
<p>Nach den bereits in der Einleitung erwähnten Umstrukturierungen und Ergänzungen einiger Metaklassen hatte ich schließlich eine erste Version meines KobrA2-Metamodells. Als nächstes versuchte ich das Metamodell mittels Topcased zu visualisieren, was mir auch ohne Probleme gelang und mir war es auf komfortablem Weg möglich kleinere Änderungen vorzunehmen. Vor allem die Generalisierungen der KobrA2-Elemente ließen sich so sehr einfach in das Metamodell einfügen.</p>
<p><a href="http://www.ktb-blog.de/wp-content/2009/03/kobra2metamodelflat.uml">KobrA2 Metamodell (MDT UML2 basiert)<br />
</a><a href="http://www.ktb-blog.de/wp-content/2009/03/kobra2metamodelflat.umldi">KobrA2 Metamodell grafisch (z.B. für Topcased)</a></p>
<div id="attachment_209" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ktb-blog.de/wp-content/2009/03/k2mm_mdt_uml.png" rel="lightbox[206]"><img class="size-medium wp-image-209" title="KobrA2 Metamodell im UML-Editor" src="http://www.ktb-blog.de/wp-content/2009/03/k2mm_mdt_uml-300x251.png" alt="" width="300" height="251" /></a><p class="wp-caption-text">Baumstruktur des Metamodells</p></div>
<div id="attachment_210" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ktb-blog.de/wp-content/2009/03/k2mm_structure_topcased.png" rel="lightbox[206]"><img class="size-medium wp-image-210" title="KobrA2 Metamodell (Structure Package) in Topcased" src="http://www.ktb-blog.de/wp-content/2009/03/k2mm_structure_topcased-300x214.png" alt="" width="300" height="214" /></a><p class="wp-caption-text">Structure Package des Metamodells in Topcased</p></div>
<h3>EMF-Model (generator model) erstellen</h3>
<p>Der nächste Schritt war, dem Projekt ein <em>EMF Model</em> hinzuzufügen, das auf dem erstellten Metamodell basiert. Im Package Explorer von Eclipse rief ich über RECHTSKLICK auf den Ordner MODEL &gt; NEW &gt; OTHER &gt; ECLIPSE MODELING FRAMEWORK &gt; EMF MODEL den entsprechenden Wizard auf.</p>
<p>Im Wizard muss man zunächst den Namen des <em>EMF Model</em> mit der Endung <em>.genmodel</em> angeben. Im nächsten Schritt wählt man als <em>Model Importer</em> den Eintrag <em>UML Model</em>. Nach einem Klick auf <em>next</em> habe ich dann das erstellte KobrA2 Metamodell ausgewählt und bei den Optionen zunächst auf <em>Process All</em> geklickt und anschließend die Option <em>Camel Case Names</em> wieder auf <em>ignore</em> gestellt, so dass die von mir verwendeten Namen 1:1 übernommen werden. Im letzten Schritt des Wizards habe ich als <em>root package</em> das Metamodell ausgewählt (Eintrag <em>KobrA2SUM</em>) und die übrigen Modelle (ecore und UML2) referenziert.</p>
<p>Das Ergebnis waren zwei Dateien: das <em>generator model</em> (<a href="http://www.ktb-blog.de/wp-content/2009/03/kobra2metamodel.genmodel">KobrA2Metamodel.genmodel</a>) und eine ecore-Repräsentation des Metamodells (<a href="http://www.ktb-blog.de/wp-content/2009/03/kobra2sum.ecore">KobrA2SUM.ecore</a>).</p>
<h3>Code generierung</h3>
<p>Öffnet man nun das generator model mit dem entsprechenden Editor erhält man in Eclipse wieder eine Baumstruktur. Mit einem Rechtsklick auf den Wurzelknoten des Baums erhält man die Einträge zur Code-Generierung.</p>
<p>Ich möchte hier nicht weiter auf die Code-Generierung eingehen, da es hierzu ausfürliche Tutorials in der <a href="http://help.eclipse.org/ganymede/">Eclipse documentation</a> gibt, z.B. <a title="Generating an EMF Model" href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/clibmod/clibmod.html">Generating an EMF Model</a>.</p>
<h3>Schlusswort</h3>
<p>Den generieten Code werde ich in weitere Schritten verwenden, um meine Modelltransformationen zu programmieren - zumindest werde ich es versuchen <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>So, genug an dieser Stelle. Ich habe Bärenhunger und muss mal sehen, was es im Kühlschrank zu jagen gibt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/diplomarbeit/kobra2-metamodellierung/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Konzept zur Programmierung</title>
		<link>http://www.ktb-blog.de/diplomarbeit/konzept-zur-programmierung/</link>
		<comments>http://www.ktb-blog.de/diplomarbeit/konzept-zur-programmierung/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 15:38:09 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Diplomarbeit]]></category>

		<category><![CDATA[Factory Method Pattern]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Transformation]]></category>

		<category><![CDATA[Transformation Framework]]></category>

		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=200</guid>
		<description><![CDATA[In den letzten Tagen habe ich mir nach den bisher gewonnenen Erkenntnissen unter anderem ein grobes Konzept überlegt, wie eine Programmierung der Transformationen in Java aussehen könnte, das ich im Folgenden vorstellen möchte.
Sehen wir uns zunächst den Inhalt des von mir modellierten Package &#8220;views&#8221; an:
Zu Grunde liegt eine abstrakte Klasse Generation, deren Instanzen das Ergebnis [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen habe ich mir nach den bisher gewonnenen Erkenntnissen unter anderem ein grobes Konzept überlegt, wie eine Programmierung der Transformationen in Java aussehen könnte, das ich im Folgenden vorstellen möchte.</p>
<div id="attachment_202" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ktb-blog.de/wp-content/2009/02/viewbasedmodelling_views.jpg" rel="lightbox[200]"><img class="size-medium wp-image-202" title="viewbasedmodelling_views" src="http://www.ktb-blog.de/wp-content/2009/02/viewbasedmodelling_views-300x232.jpg" alt="Package &quot;views&quot;" width="300" height="232" /></a><p class="wp-caption-text">Package&quot;views&quot;</p></div>
<p>Sehen wir uns zunächst den Inhalt des von mir modellierten <strong>Package &#8220;views&#8221;</strong> an:</p>
<p>Zu Grunde liegt eine abstrakte Klasse <em>Generation</em>, deren Instanzen das Ergebnis aus von dem SUM ausgehenden Transformationen (-&gt; ViewGenerations) repräsentieren. In den Attribute dieser Klasse werden zum einen die Repräsentation der .uml-Datei (<em>umlFile</em>) und zum anderen die Information, ob diese Datei verändert wurde, gespeichert (<em>isModified</em>).</p>
<p>Diese Klasse wird wiederum von einer abstrakten Klasse <em>View</em> erweitert, die die Informationen zu der Darstellung der Daten, die in einer .umldi-Datei gespeichert werden, kapselt (<em>umldiFile</em>).</p>
<p>Schließlich wird die eben genannte Klasse nochmals erweitert. Die erweiternden Klassen repräsentieren schließlich die tatsächlichen Sichten (z.B. <em>SpecificationClassServiceView</em> und <em>SpecificationClassTypeView</em>).</p>
<div id="attachment_203" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ktb-blog.de/wp-content/2009/02/viewbasedmodelling_transformation.jpg" rel="lightbox[200]"><img class="size-medium wp-image-203" title="viewbasedmodelling_transformation" src="http://www.ktb-blog.de/wp-content/2009/02/viewbasedmodelling_transformation-300x293.jpg" alt="Package &quot;transformation&quot;" width="300" height="293" /></a><p class="wp-caption-text">Package&quot;transformation&quot;</p></div>
<p>Die eben vorgestellten Elemente werden in dem zweiten modellierten <strong>Package &#8220;transformation&#8221;</strong> verwendet, das etwas komplizierter aufgebaut ist:</p>
<p>Ausgangselement dieses Package ist das generische Interface <em>ViewGenerator</em>. In Abhängigkeit des Parameters <em>TGeneration</em>, der die Klasse <em>Generation</em> erweitern muss, wird über die Methode <em>generate() </em>eine View aus dem SUM erzeugt. Als Parameter muss hierbei die Repräsentation der Zieldatei übergeben werden. Das Gegenstück zu dieser Methode, die die Transformation von SUM zu View repräsentiert, ist <em>merge()</em>. Hier wird die als Methodenparameter übergebene View wieder mit dem SUM zusammengeführt.</p>
<p>Dieses Interface wird von einer abstrakten Klasse <em>AbstractViewGenerator</em> &#8220;quasi-implementiert&#8221;, d.h., dass diese Klasse alle gemeinsamen Attribute und Methoden der verschiedenen View-Generatoren beherbergen soll, wie z.B. die (protected) Methode<em> selectSubject()</em>, die anhand des Klassennamens das entsprechende Element aus dem SUM selektieren und ggf. mit dem vorgesehenen Stereotyp &#8220;subject&#8221; versehen soll. Der Rückgabewert ist derzeit noch vom Typ <em>org.eclipse.uml2.uml.Class</em>, doch kann es sein, dass dies noch geändert werden muss.</p>
<p>Die konkreten Erweiterungen des (ebenfalls generischen) abstrakten Generators sind schließlich die einzelnen View-Generatoren, z.B. <em>SpecificationClassServiceViewGenerator</em> und <em>SpecificationClassTypeViewGenerator</em>.</p>
<p>Soweit so gut <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Doch ich habe mich entschieden, das Ganze noch etwas zu erweitern, in dem ich das &#8220;factory method pattern&#8221; (http://en.wikipedia.org/wiki/Factory_method_pattern) anwende.</p>
<p>Zu verwenden ist die daraus entstandene <em>ViewGeneratorFactory</em> folgendermaßen: Über den Konstruktor wird der Factory-Instanz mitgeteilt, welche Datei das SUM repräsentiert. Die Methode getViewGenerator(), der man als Parameter die Klasse der zu erzeugenden View übergibt liefert über ein Mapping stets den passenden ViewGenerator.</p>
<p>Durch die Anwendung dieses Pattern ergeben zwei offensichtliche Vorteile: Zum einen ist es nur noch bei der Erzeugung einer Factory-Instanz notwendig, die SUM-Datei anzugeben. Zum anderen entsteht dadurch ein Transformation-Framwork, das einfach um weitere Views erweitert werden kann. Dazu müssen nur zwei Klassen implementiert werden: eine, die die Klasse Generation (oder View) und eine, die die Klasse AbstractViewGenerator erweitert. Dann muss nur noch die Klasse der ViewGenerator-Implementierung und die zugehörige View-Klasse in der Factory registriert werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/diplomarbeit/konzept-zur-programmierung/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Artikel zu meiner Diplomarbeit</title>
		<link>http://www.ktb-blog.de/allgemein/artikel-zu-meiner-diplomarbeit/</link>
		<comments>http://www.ktb-blog.de/allgemein/artikel-zu-meiner-diplomarbeit/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 10:29:23 +0000</pubDate>
		<dc:creator>ktb</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Diplomarbeit]]></category>

		<guid isPermaLink="false">http://www.ktb-blog.de/?p=194</guid>
		<description><![CDATA[Wie ihr sehen könnt, veröffentliche ich in der letzten Zeit immer wieder Artikel zu meiner Diplomarbeit. Diese sind zunächst einmal mit einem Passwort geschützt, um die Inhalte nur einem kleinen Kreis zugänglich zu machen. Ein Grund dafür ist, dass diese Artikel Auszüge meiner Diplomarbeit enthalten können. Somit dient mir der Blog zur Zeit als Art [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ihr sehen könnt, veröffentliche ich in der letzten Zeit immer wieder Artikel zu meiner Diplomarbeit. Diese sind zunächst einmal mit einem Passwort geschützt, um die Inhalte nur einem kleinen Kreis zugänglich zu machen. Ein Grund dafür ist, dass diese Artikel Auszüge meiner Diplomarbeit enthalten können. Somit dient mir der Blog zur Zeit als Art DA-Tagebuch und Sketchbook. Ich halte Informationen fest, berichte über neue Erkenntnisse und den Fortschritt meiner praktischen Arbeit. Die Idee dahinter ist, nach dem praktischen Teil viele Informationen und eine gute Grundlage für die schriftliche Ausarbeitung zu haben.</p>
<p>Nach Beendigung meiner DA werde ich alle (oder zumindest den Großteil) der DA-Artikel der öffentlichkeit zugänglich machen. Falls du das nicht abwarten kannst, dich meine DA interessiert und/oder der Meinung bist, auch zu dem kleinen Kreis der &#8220;Auserwählten&#8221; zu gehören, frag mich einfach nach dem Passwort <img src='http://www.ktb-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ktb-blog.de/allgemein/artikel-zu-meiner-diplomarbeit/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
