<?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 		= "Eclipse RT Project";
	$pageKeywords	= "equinox, osgi, framework, runtime";
	$pageAuthor = "Jeff McAffer";

	$App->AddExtraHtmlHeader( '<link rel="stylesheet" type="text/css" href="/rt/rap-big-header.css"/>' );
	$Nav = null; // delete right side navigation
	
function populateProjectList($projects) {
	$result = "\n<ul>";
	foreach ($projects as $project) {
		$projectName = $project->getProjectName();
		if(!$projectName)
			$projectName = $project->getShortName();
		if ($projectName) {
			$projectHeading = "<b>" . $projectName . "</b>";
			$projectUrl = $project->getProjectUrl();
			if ($projectUrl)
				$projectHeading = '<a href="' . $projectUrl . '">' . $projectHeading . "</a>";
			$result .= "\n\t<li>" . $projectHeading;
			$para = $project->getParagraph();
			if ($para)
				$result .= "<br/>" . $para;
			else
				$result .= "<br/>This project has not figured out what they are doing or has not set their paragraph url to something useful.";
			$result .= "</li>\n";
		}
	}
	$result .= "</ul>\n";	
	return $result;
}

$projectList = populateProjectList($rtProjects);

$html = <<<EOHTML
<div id="big-header">
  <div id="rap-logo"></div>
  <div id="rap-big-buttons">
    <h3>Primary Links</h3>
    <ul>
      <li>
        <a id="rap-button-download" href="/rt/downloads/">
          <div class="rap-button-icon"></div>
          <h4>Download</h4>
          <p>Distributions, Repositories,<br/>Target Components</p>
        </a>
      </li>
      <li>
        <a id="rap-button-documentation" href="/eclipsert/gettingstarted.php">
          <div class="rap-button-icon"></div>
          <h4>Documentation</h4>
          <p>Tutorials, Examples,<br/>Articles, Reference Docs</p>
        </a>
      </li>
      <li>
        <a id="rap-button-support" href="/rt/support/">
          <div class="rap-button-icon"></div>
          <h4>Support</h4>
          <p>FAQ, Newsgroup,<br/>Bug Tracker</p>
        </a>
      </li>
      <li>
        <a id="rap-button-demos" href="/eclipsert/case_studies/case_studies.php">
          <div class="rap-button-icon"></div>
          <h4>Case Studies</h4>
          <p>Adopter stories and experiences<br/></p>
        </a>
      </li>
    </ul>
  </div>
</div>

<div id="midcolumn">
	<div class="homeitem">
		<h3>Mission Statement</h3>
		<p>The RT top-level project at Eclipse was created in 2008 (<a href="charter.php">charter</a>, 
		<a href="/proposals/rt/RT%20creation%20review.pdf">creation review</a>)  as a means of bringing 
		together various runtime related efforts and 
		technologies at Eclipse.  RT is designed to foster, promote and house runtime efforts in Eclipse .  
		It is part of a larger <a href="/eclipsert">EclipseRT Community</a> move to 
		drive Equinox-base technology across a broad range of computing environments and problem domains. 
		These efforts strive towards the common goal of providing a uniform component model across a wide 
		variety of computing environments.  The Equinox framework and OSGi form the basis of this infrastructure.  </p>
		 
		 <p>RT projects target "clients" and "servers" across embedded devices, desktops, and enterprise systems, 
		 and provide those intermediate software services which enable applications to be more easily and concisely 
		 constructed across these environments.  This supports and extends the Equinox vision of a consistent 
		 programming and component model where developers create application domain code that runs on a variety of platforms. </p>
		 
		 <p>By providing a consistent symmetric architecture, Eclipse RT technology enables developers to focus on the 
		 business problem at hand and still have many system architecture options available at deployment time.
		</p>
	</div>

	<div class="homeitem">
		<h3>RT Projects</h3>
		<p>As a top-level project, RT is overseen by a <a href="/rt/team-leaders.php">Project Management Committee</a> (PMC).
		Most of the real work however, is done in sub-projects. The <a href="/rt/charter.php">RT Project Charter</a> 
		describes the organization of the project, roles and responsibilities of the participants, and top level 
		development process for the projects. 

		$projectList
		
	</div>
      	  
	<div class="homeitem">
		<h3>Getting Started and Involved</h3>
		<p>Looking to find out more about RT and runtime technology at eclipse.org? The easiest way is to try it out. See the general 
		<a href="http://eclipse.org/eclipsert/gettingstarted.php">EclipseRT Technology Getting Started Guide</a> 
		for how tutorials and webinars on how to work with the runtime technology at eclipse.org.</p>

		<p>If you want to get involved, find out more, ask questions, report bugs, get (or contribute :-) code, 
		check out the <a href="http://eclipse.org/newsportal/thread.php?group=eclipse.rt">RT newsgroup</a>
		or the newsgroups and mailing lists for the various RT projects. </p>
	</div>	
</div>

EOHTML;

generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
?>
