<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Archived Technology Projects";
$pageKeywords	= "technology";
$pageAuthor		= "Bjorn Freeman-Benson Nov 20/05";

ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">
        <h1><?= $pageTitle ?></h1>
        
<style>
body {  
background-image: url('/images/archive.gif');
background-repeat: repeat-y
}
</style>

      <p>Projects under the Eclipse Technology Project have limited lifecycles.
      Unlike the major top-level Projects, the Technology Projects are meant to
      be technology explorations or incubators. When these projects have
      explored, proved, or disproved their associated technologies, the project
      comes to its natural end. For some projects, this end is a paper
      publishing the research results; for others, this end is to be
      incorporated into the base technology of another top-level project. </p>
		
      <p><a href="/newsgroups/archivedgroups.php">Archived
      newsgroups</a> and <a href="/mail/archivedlists.php">mailing
      lists</a> are also available separately. </p>
      
<h2>CME</h2>
      <p>The CME website, newsgroup, mailing list, source code, etc.
      are available in <a href="http://archive.eclipse.org/technology/archives/cme-project.tar.gz ">a 
      compressed tar archive <font size=-1>(256Mb)</font></a><br>
		
<h2>Koi</h2>
      Koi version 1.0 is functionally complete and currently used in commercial
      Eclipse add-ons. Koi provides a intra-workspace communication platform for
      development of collaborative Eclipse features. Examples of collaborative
      features that are possible using Koi range from the relatively simple such
      as event notification (check-in, check-out, conflicting changes, etc.) to
      something as complex a supporting remote pair programming.&nbsp;
      <p>The Koi infrastructure is built around a client/server architecture
      using a Web Services RPC communications model. The clients are individual
      eclipse platform instances that communicate with a &quot;collaboration
      server&quot; that supports data persistence and implements shared
      collaborative services. The base infrastructure also includes some base
      services such as user identification/authentication, client-to-client
      messaging, and event notification.</p>
      <p>The Koi website, newsgroup, mailing list, source code, and latest
      download are available in <a href="http://archive.eclipse.org/technology/archives/koi-project.tar.gz">a
      compressed tar archive <font size=-1>(6.5Mb)</font></a>.<br>

<h2>Lepido, Tools for Apache Cocoon<h2>
	<p>The Lepido website, newsgroup, mailing list, source code, and latest 
	download are available in <a href="http://archive.eclipse.org/technology/archives/lepido-project.tar.gz">
	a compressed tar archive <font size=-1>(9MB)</font></a></p>

<h2>OMELET (Open Modeling 
      Environment with Links for Extensions and Transformations)</h2>
 The Open Modeling Environment with Links for Extension by Transformation project aimed to provide the ability to integrate the increasingly wide variety of modeling transformation technologies and tools so that otherwise incompatible tools could be used in combination. As such OMELET could be viewed as a next generation make, using meta-models to give strict type signatures for models and transformations between models.
      <p><b>Successes<br>
      </b>OMELET demonstrated an ability to integrate various tools, supporting transformations written in Java, XSLT1, XSLT2, or ANT. OMELET pioneered a multi-level typing system for meta-models so that a model comforming to a meta-model could be described as a file representation of an XML 1.0 serialization of an XMI 1.3 encoding of a UML 1.4 meta-model, thereby allowing transformations to operate at appropriate levels of abstraction. Work in progress supported ATL, Tefkat, a simple composite transformation language and a set of Ecores for various MOF and UML standards.<br>
      <br>
      <b>Failures<br>
      </b>OMELET never acquired sufficient resources to progress at a satisfactory rate. Lack of resources was a particular problem for an integration project since it was too easy to be distracted into looking at every other interesting modeling project and concluding that yes that too would be good to integrate with OMELET. Lack of resources also prevents the release of MOF and UML models since licensing issues were never resolved.</p>
      <p><b>Final status</b><br>
      OMELET was just about functional with respect to invoking individual transformations, but that was more sensibly done within the environment of that transformation. OMELET was close to supporting composite transformations at which point OMELET would become useful.</p>
      <p>Prior to archiving, the prevailing CVS status was upgraded to support Eclipse 3.1 and Java 5. The final release on the update site needed the Eclipse 3.1M4 release to avoid problems with early Eclipse support for Java 5.&nbsp;</p>

<p>The <a href="/mddi"> MDDi project</a> has almost identical goals to OMELET and significantly greater resources. It is therefore hoped that MDDi can fulfill OMELET's ambitions.&nbsp;</p>

<p>The OMELET website, newsgroup, mailing list, source code, and latest download
are available in a <a href="http://archive.eclipse.org/technology/archives/omelet-project.tar.gz">compressed tar
archive <font size=-1>(2mb)</font></a></p>

<h2>Pollinate</h2>
<h3>Goals Achieved</h3>
Pollinate is an Eclipse technology project for build an Eclipse-based
IDE and toolset that leverages open source application frameworks Apache
Beehive and platforms like Web Tools Platform. There is a tight focus on
Beehive related functionality making everything else that Pollinate
needs secondary. 
>From inception until work ended at the end of Q1 2005, Pollinate focused
on building on WTP to address Apache Beehive NetUI and PageFlows,
leaving Controls and Web Services MetaData for the future. To that end,
there is a basic Page Flow Editor in Pollinate plus basic support for
assembling and launching a Beehive based web application.

<h3>Final Status</h3>
At this time the Pollinate Project is in archival.  We would welcome
others from the community who are interested in Pollinate to step-up and
lead or contribute to the project. <p>The Pollinate website, newsgroup, mailing list, source code, and
latest downloads are available in a <a href="http://archive.eclipse.org/technology/archives/pollinate-project.tar.gz">compressed
tar archive <font size=-1>(155Mb)</font></a> 

<h3>More information</h3>
Visit <a href="http://beehive.apache.org/">beehive.apache.org</a> for more information on the apache beehive
project. Visit <a href="/webtools/">www.eclipse.org/webtools</a> for information about the web tools
project. Additional resources are available at <a href="http://dev2dev.bea.com/opensource">dev2dev.bea.com/opensource</a> and
<a href="http://dev2dev.bea.com/eclipse">dev2dev.bea.com/eclipse</a> for articles, blogs and other related material.

<h2>Stellation</h2>
      Stellation is a software configuration management system designed to be 
      an extensible platform for building systems based on the integration of 
      advanced or experimental SCM techniques with the Eclipse development environment. 
      The Stellation project will be using this system to integrate support for 
      fine-grained software artifacts into the Eclipse environment, with particular 
      focus on dynamic program organization, and inter-program coordination.<p>The Stellation website, newsgroup, mailing list, source code, and
      latest download are available in a <a href="http://archive.eclipse.org/technology/archives/stellation-project.tar.gz">compressed
      tar archive <font size=-1>(110Mb)</font></a>.
 
<h2><a href="/webtools" target="_top">WSVT (Web Service Validation 
      Tools)</a></h2>
The mission of the project is to provide a set of web service validation
tools that can be used during the development, deployment, testing and
debugging of web service applications... This project has moved from the
      Technology PMC to the <a href="/webtools">Web Tools
      Platform</a> project. (For archival reasons, the last independent release
      of WSVT is <a href="../wsvt/index.html" target="_top">still available</a>.)

<h2><a href="http://www.eclipse.org/emf" target="_top">XSD</a></h2>
      The XSD Infoset Model is a reference library for use with any code that 
      examines, creates or modifies XML Schemas (standalone or as part of other 
      artifacts, such as XForms or WSDL documents)... This project has moved
      from the Technology PMC to the <a href="/emf">Eclipse Modeling Framework</a>
      project.</td>
      <br /><br />
 </div>
 </div>
<?php
	# Paste your HTML content between the EOHTML markers!	
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
