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

	#*****************************************************************************
	#
	# index.php
	#
	# Author: 		Markus Knauer
	# Date:			2007-02-20
	#
	# Description: Entry page of the Eclipse Packaging Project
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Packaging Project (EPP)";
	$pageKeywords	= "eclipse, download, packages, packaging, udc";
	$pageAuthor		= "Markus Knauer";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

<div id="maincontent">


<!-- MIDCOLUMN START -->
<div id="midcolumn">

<h1>$pageTitle</h1>

<h2>Project Scope</h2>

<ul>
	<li><b>Create entry level downloads based on defined user
	profiles.</b> The project defined and created the EPP downloads of
    Java Developer,	Java EE Developer, C/C++ Developer and RCP Developer.
    These downloads are available from the main Eclipse download page.
    Please follow 
    <a href="http://wiki.eclipse.org/EPP/How_to_create_a_package">this</a> 
    description if you want to be a package maintainer.</li>
	
	<li><b>Provide and integrate the EPP Usage Data Collector.</b> The
	The Usage Data Collector collects information about how individuals 
	are using the Eclipse platform. The intent is to use this data to help 
	committers and organizations better understand how developers are 
	using Eclipse.</li>

	<li><b>Provide an installer that improves the install experience 
    of new users of Eclipse.</b></li>

	<li><b>Provide a platform that allows the creation of packages
	(zip/tar downloads) from an update site.</b> The core technology of the
	project will enable the creation of download packages that are created
	by bundling Eclipse features from one or multiple Eclipse update sites.</li>
</ul>

<hr class="clearer" />

<table border="0" width="100%">
  <tr>
    <td align="center" valign="middle" width="33%">
      <a href="http://www.eclipse.org/downloads/">
        <img src="resources/downloadrelease.gif" alt="Download Release" width="200" height="38">
      </a>
    </td>
    <td align="center" valign="middle" width="33%">
      <a href="http://www.eclipse.org/downloads/packages/release/galileo/m6">
        <img src="resources/downloadmilestone.gif" alt="Download Milestones" width="200" height="38">
      </a>
    </td>
    <td align="center" valign="middle" width="33%">
      <a href="download.php">
        <img src="resources/downloadnightly.gif" alt="Download Nightly Builds" width="200" height="38">
      </a>
    </td>
  </tr>
</table>

<hr class="clearer" />

<div class="homeitem">
<h3>Project News</h3>
<ul>
  <li>2009-03-24 <a href="http://www.eclipse.org/downloads/packages/release/galileo/m6">EPP milestone packages for Galileo M6</a> are available!</li>
  <li>2008-09-28 <a href="http://build.eclipse.org/eppwizard/go">EPP Download Wizard</a> is available for Friends-of-Eclipse!!!</li>
  <li>2008-09-27 <a href="http://www.eclipse.org/downloads/packages/">EPP packages for Ganymede SR1</a> are available!</li>
  <li>2008-06-25 <a href="http://www.eclipse.org/downloads/packages/">EPP packages for Ganymede</a> are available</li>
  <li>2008-03-28 Send us your feedback about the new <a href="http://www.eclipse.org/downloads/packages/">Community Packages page</a>.</li>
</ul>
</div>

<div class="homeitem">
<h3>Meet the Eclipse Packaging team</h3>
<ul>
  <li><a href="http://www.eclipsecon.org/2009/">EclipseCon 2009, Santa Clara, Mar 23-26</a>
  <span>
    <ul>
    <li><a href="http://www.eclipsecon.org/2009/sessions?id=434">
         Galileo: delivering the next major release</a></li>
    <li><a href="http://www.eclipsecon.org/2009/sessions?id=433">
         Using the Usage Data Collector in RAP and RCP Applications</a></li>
    <li><a href="http://www.eclipsecon.org/2009/sessions?id=426">
         EPP Wizard - The Future for Custom Eclipse Downloads </a></li>
      </ul>
  </span></li>
  <li><a href="http://www.eclipsecon.org/summiteurope2008/">Eclipse Summit Europe 2008, Esslingen, Nov 19-20</a>
  <span>
    <ul>
    <li><a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=81">
         News from EPP: The custom Eclipse download and extending the Usage Data Collector</a></li>
      </ul>
  </span></li>
  <li><a href="http://www.eclipsecon.org/2008/">EclipseCon 2008, Santa Clara, Mar 17-20</a>
  <span>
    <ul>
    <li><a href="http://www.eclipsecon.org/2008/index.php?page=sub/&id=89">
         From Europa to Ganymede: Eclipse Packaging and Ganymatic</a></li>
      </ul>
  </span></li>
</ul>
</div>
<hr class="clearer" />
</div>
<!-- MIDCOLUMN END -->

<!-- RIGHTCOLUMN START -->
<div id="rightcolumn">
<div class="sideitem">
<h6>Project Links</h6>
<ul>
	<li><a href="/proposals/packaging/">Project Proposal</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Active Contributors</h6>
<ul>
	<li><a href="http://www.eclipsesource.com">EclipseSource</a></li>
	<li><a href="http://www.cloudsmith.com">Cloudsmith</a></li>
	<li><a href="http://www.code9.com">Code 9</a></li>
	<li><a href="http://www.instantiations.com">Instantiations, Inc.</a></li>
	<li><a href="http://www.xored.com">xored software</a></li>
</ul>
</div>
</div>
<!-- RIGHTCOLUMN END -->

</div>

EOHTML;


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