<?php

/**
 * *****************************************************************************
 * Copyright (c) 2006, 2013 Eclipse Foundation and others.
 * 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:
 * Wayne Beaton (Eclipse Foundation)- initial API and implementation
 * *****************************************************************************
 */
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());

require_once ("links.php");

//
// Begin: page-specific settings. Change these.
$title = "Eclipse IDE for Java EE Developers";
$download = 'http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplersr1';
$pageKeywords = "eclipse kepler java windowbuilder j2ee jee enterprise servlet tomcat eclipse resource";
$pageAuthor = "Wayne Beaton";

ob_start();
?>
<link rel="stylesheet" type="text/css" href="moreinfo.css"
	media="screen" />
<div id="fullcolumn">
	<div id="midcolumn">
		<h1><?= $title ?></h1>

		<p>
			<img src="http://www.eclipse.org/downloads/images/javaee.png"
				align="right" style="padding-right: 10px;" />The <?= $title?>
 contains everything you need to build Java and Java Enterprise Edition
(Java EE) applications. The <?= $title ?> provides superior Java
editing with incremental compilation, Java Enterprise Edition support, a graphical
HTML/JSP/JSF editor, database management tools, and support for most popular application 
servers.</p>

		<p>
			If you are planning to build Eclipse plug-ins or Eclipse Rich Client
			Platform (RCP) applications, please see <a href="rcp.php">Eclipse for
				RCP and RAP Developers</a>. See <a href="/downloads">all downloads</a>.
		</p>

		<h3>What You Need</h3>
		<p>
			<img src="http://www.eclipse.org/downloads/images/update_wiz.gif"
				align="right" />You will need a <a href="<?= $java_runtime ?>">Java
				Runtime Environment</a> (JRE) to run <?= $title ?>. <em>A Java 6 JRE
				is required.</em>
		</p>
		<ul>
			<li>Download the <a href="<?= $download ?>"><?= $title ?></a></li>

			<li>Use the utility for your platform to decompress the downloaded file onto
	your file system (<?= $windows_warning ?>).</li>
			<li>If you intend to use <?= $title ?> to test server software, you must separately download an
	application server (<?= $app_servers ?>).</li>
			<li>Additional features can be installed using the <a
				href="http://marketplace.eclipse.org/marketplace-client-intro">Eclipse
					Marketplace Client</a>.
			</li>
		</ul>

	</div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $title, $html);
?>