<?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'
/*******************************************************************************
 * Copyright (c) 2009, 2013
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Stephan Herrmann
 *******************************************************************************/

	$pageTitle 		= "Object Teams - Download";
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/objectteams/css/style.css"/>');
	$App->AddExtraHtmlHeader('<style type="text/css">.col-md-4 { width: 20%; !important; }</style>');
	

	# add a complete nav definition:
	# $Nav->addCustomNav( "About This Project", "/projects/project_summary.php?projectid=tools.objectteams", "", 1  );
	# $Nav->addNavSeparator("Object Teams", 	"/objectteams");
	# $Nav->addCustomNav("Download", "/objectteams/download.php", "_self", 2);
	# $Nav->addCustomNav("Releases 2.2.x", "#R22", "_self", 3);
	# $Nav->addCustomNav("How To Install", "#howto", 3);
    # $Nav->addCustomNav("Previous Releases", "#previous", 3);
    # $Nav->addCustomNav("Retention Policy", "#retention", 3);
    # "#R22" Milestone releases towards 2.2 Eclipse 4.3Mx)
	
	# $Nav->addCustomNav("Documentation", "/objectteams/documentation.php", "_self", 2);
	# $Nav->addCustomNav("Support", "/objectteams/support.php", "_self", 2);
	# $Nav->addCustomNav("Getting Involved", "/objectteams/getting_involved.php", "_self", 2);
	# $Nav->addCustomNav("Project Plan", "http://www.eclipse.org/projects/project-plan.php?projectid=tools.objectteams", "_self", 2);
	
	$Nav->addNavSeparator("On this page", "/objectteams/download.php", "_self");
	$Nav->addCustomNav("Releases 2.3.x", "#R23", "_self", 3);
	$Nav->addCustomNav("How To Install", "#howto", 3);
    $Nav->addCustomNav("Previous&nbsp;Releases", "#previous", 3);
    $Nav->addCustomNav("Retention Policy", "#retention", 3);
	
	$Nav->addNavSeparator("Documentation Quicklinks", "");
	$Nav->addCustomNav("Quick-Start", 	"http://wiki.eclipse.org/Object_Teams_Quick-Start", "_blank", 2);
	$Nav->addCustomNav("User Guide", 	"http://help.eclipse.org/topic/org.eclipse.objectteams.otdt.doc/guide/develop.html", "_blank", 2);
	$Nav->addCustomNav("Language&nbsp;Definition", 	"http://help.eclipse.org/topic/org.eclipse.objectteams.otdt.doc/guide/otjld/def/index.html", "_blank", 2);

	$html  = <<<EOHTML
<div id="midcolumn" style="width:80%; !important;">
	<h1>$pageTitle</h1>
	<p>All downloads are provided under the terms and conditions of the <a href="/legal/epl/notice.php">Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>
	
		<ul class="novaArrow">
        <li><a href="features.php">Features of the Object Teams Development Tooling (OTDT)</a></li>
        <li><a href="http://wiki.eclipse.org/images/f/fc/OTDT_Overview.png">Screenshot of the OTDT in action</a></li>
        </ul>

	<h2><a name="R23"></a>Stable Release 2.3.x for Eclipse 4.4 (Kepler)</h2>
        <table class="btn-warning orange-box" style="margin:0px;padding:4px;width:100%">
            <tr>
                <td><img src="images/Idea.png"></td>
                <td style="width:100%;padding:8px;">
               		Object Teams is part of the <b><a href="http://www.eclipse.org/luna">Luna simultaneous release</a></b>.
					This means, no further URL must be configured for installing the OTDT and/or OT/Equinox,
					simply select the <a href="http://download.eclipse.org/releases/luna">Luna - http://download.eclipse.org/releases/luna</a> 
					software site and open the <b>Programming Languages</b> category.
                </td>
          	</tr>
        </table>

        <table border="0" style="margin-left:30px;margin-top:10px;margin-bottom:10px;">
            <tbody><tr>
                <td><a href="http://download.eclipse.org/objectteams/updates/ot2.3"><img src="http://dev.eclipse.org/huge_icons/actions/go-bottom.png" alt="Download" align="left"></a></td>
                <td style="width: 100%; padding-left: 6px;">A specific repository containing just Object Teams 2.3.x  can be found at
			<a href="http://download.eclipse.org/objectteams/updates/ot2.3">http://download.eclipse.org/objectteams/updates/ot2.3</a>
                </td>
            </tr>
        </tbody></table>
        <div style="margin-left:30px;" class="block-box block-box-classic">
            <h3 style="margin-bottom:2px;">Release 2.3:</h3>
            <table width="100%">
	            <tbody><tr valign="top"><th>&nbsp;</th><th class="dl-cell" style="padding-left:10px;">Required Eclipse Version</th>
						<th class="dl-cell">Command Line Compiler</th><th class="dl-cell">New&nbsp;&amp; Noteworthy</th><th class="dl-cell">Bugs Fixed</th></tr>
	            <tr><td colspan="5" class="release-cell"><strong>OTDT 2.3.0 Final Release</strong> &mdash; (2014/06/25)</td></tr>
                <tr><td style="width: 50px;">&nbsp;</td>
                    <td class="dl-cell" style="padding-left:5px;"><a href="http://download.eclipse.org/eclipse/downloads/drops4/R-4.4-201406061215/"><img src="images/arrow.gif">Eclipse&nbsp;SDK&nbsp;4.4</a></td>
                    <td class="dl-cell" style="min-width: 110px;padding-left:5px;"><a href="http://www.eclipse.org/downloads/download.php?file=/objectteams/ecotj/ecotj-R-2.3.0-201406101336.jar"><img src="images/otdt/jar_obj.gif" valign="middle"> ecotj.jar</a></td>
                    <td class="dl-cell"><a href="http://www.eclipse.org/objectteams/pages/new_in_2.3.html"><img src="http://www.eclipse.org/jdt/core/images/new.png"></a></td>
                    <td class="dl-cell"><a href="https://bugs.eclipse.org/bugs/buglist.cgi?j_top=OR&list_id=5963256&classification=Tools&query_format=advanced&product=Objectteams&target_milestone=2.3%20M1&target_milestone=2.3%20M2&target_milestone=2.3%20M3&target_milestone=2.3%20M4&target_milestone=2.3%20M5&target_milestone=2.3%20M6&target_milestone=2.3%20M7&target_milestone=2.3%20RC1&target_milestone=2.3%20RC2&target_milestone=2.3&target_milestone=2.2%20J8"><img title="Bugs fixed for 2.3" src="images/bug.gif"></a></td>
                </tr>
			</tbody></table>
        </div>

	<h2><a name="howto"></a>Howto Install</h2>
	<strong>Nothing special, just...</strong>
	<ol>
	<li>Install <a href="http://download.eclipse.org/eclipse/downloads/drops4/R-4.4-201406061215/">Eclipse SDK 4.3</a> (you may also use your favorite Eclipse Package but it has to be exactly 4.4.0 for OTDT 2.3.0).</li>
	<li>Open "<code>Help > Install New Software ...</code>"</li> 
	<li>Choose <a href="http://download.eclipse.org/releases/luna">Luna - http://download.eclipse.org/releases/luna</a> 
			software site and open the <b>Programming Languages</b> category.</li>
	<li>Select these features
		<ul>
		<li><strong>Object Teams Development Tooling</strong>: the IDE for Object Teams</li>
		<li><strong>Object Teams Equinox Integration</strong>: runtime required by the above feature</li>
		</ul></li>
	<li><i>Recommended: un-check "Contact all update sites during install to find required software"</i></li>
	<li>Click through the wizard upto and including the required restart of Eclipse.</li>
	</ol>
		 
	<strong>Some hints on how you may check the installation:</strong>
	<ul>
	<li>Browse content from the welcome page or from help ("Object Teams Development User Guide").</li>
	<li>Find new icons in "About Eclipse SDK" dialog</li>
	<li>From this about dialog click through to the plug-ins of "Eclipse RCP" and scroll to the "Workbench" plug-in:</br>
	    You should see a note that this plug-in is adapted by two Object Teams plug-ins.</li>
	<li>Install a shipped OT/J example via "<code>File > New > Example ...</code>", one of
		<ul>
		<li>Stop Watch Example (easiest).</li>
		<li>Observer Example (straight forward).</li>
		<li>Flight Bonus Example (comprehensive, high density of OT/J concepts).</li>
		<li>Order System Example (comprehensive, not quite as dense).</li>
		<li>ATM Example (special demo for guard predicates).</li>
		</ul></li>
	</ul>

	<h2><a name="previous"></a>Previous Releases for Eclipse 3.3 - 4.3</h2>
		<ul>
		<li><a href="download-prev.php">Release up-to 2.2.x for Eclipse 4.3.x</a>
		<li>For still older versions, you may still
		consult our <a href="http://www.objectteams.org/distrib/otdt.html">old download page</a> at <b>www.objectteams.org</b> for existing releases.</li>		
		</ul>
	<h2><a name="retention"></a>Retention Policy</h2>
	<ul>
	<li>Official releases (incl. service releases) will never be removed from the server<br/>(old versions may be moved to the archive site, though)</li>
	<li>Milestone builds will be kept until the final release</li>
	<li>No such promises are made for any intermediate ("unstable") versions</li>
	</ul> 
	
</div> <!-- midcolumn -->


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