<div id="midcolumn">
<h3>Edapt - Migrating EMF Models</h3>
<div id="introText">

<p>
Edapt is an EMF framework to migrate instances of Ecore models after changing an Ecore. 
This is typically used to migrate existing EMF-based data with a new release of a software with an updated Ecore model.
</p>
Edapt provides the following features:
	<ul>
		<li>Edapt IDE Tooling:
			<ul>
				<li>Ecore Editor enhancement to create and maintain the history of an Ecore</li>
				<li>Operation-browser to execute refactorings on an Ecore</li>
				<li>Release Tooling to prepare a migration plugin from the Ecore history</li>
				<li>Custom Migration Support</li>
			</ul>
		</li>
		
		<li>Edapt Runtime:
			<ul>
				<li>API to detect version of given model instances</li>
				<li>API to migrate model instances with registered migration plugins</li>
			</ul>
		</li>
	</ul>

</div>

<div id="screencast">
<p><img src="images/edapt.png" width="560" height="290" alt="Ecore Editor Integration"></p>
</div>
 
 </div>
 
<div id="rightcolumn">
	<p><img src="images/edaptLogo.png" width="255" height="109" alt="Edapt Logo"></p>
	<p><a id="twitter-timeline" width="255" height="570" href="https://twitter.com/hashtag/edapt" >#edapt Tweets</a>
	<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
	</p>
</div>

<script>
// via https://stackoverflow.com/questions/5968196/check-cookie-if-cookie-exists
function getCookie(name) {
 var dc = document.cookie;
 var prefix = name + "=";
 var begin = dc.indexOf("; " + prefix);
 if (begin === -1) {
   begin = dc.indexOf(prefix);
   if (begin !== 0) return null;
 } else {
   begin += 2;
   var end = document.cookie.indexOf(";", begin);
   if (end === -1) {
     end = dc.length;
   }
 }

 return decodeURI(dc.substring(begin + prefix.length, end));
}

(function() {
if (getCookie("eclipse_cookieconsent_status") === "allow") {
	$.getScript("https://platform.twitter.com/widgets.js");
   }
})()
</script>