<?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'

// ini_set('display_errors', 1); ini_set('error_reporting', E_ALL);

$pageTitle 		= "Eclipse RT Project";
$pageKeywords	= "equinox, osgi, framework, runtime";
$pageAuthor = "Jeff McAffer";

$Nav = null; // delete right side navigation

$App->AddExtraHtmlHeader( '<link rel="stylesheet" type="text/css" href="/rt/rap-big-header.css"/>' );
$App->AddExtraHtmlHeader( '<link rel="stylesheet" type="text/css" href="/rt/rap-posts.css"/>' );
$App->AddExtraHtmlHeader( '<script type="text/javascript" src="/rt/jquery.zrssfeed.min.js"></script>' );
	
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 apparently 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>

<div id="rightcolumn">
	<div class="sideitem">
	    <h6>RT News <a href="http://pipes.yahoo.com/pipes/pipe.run?_id=e3109ca0ef00e70403285b7588e457d2&_render=rss" class="rssIcon"><img src="/rap/images/feed.png" alt="feed"></a></h6>
	    <div id="rssFeed"></div>
	    <script type="text/javascript">
	      $( document ).ready( function () {
	        $( '#rssFeed' ).rssfeed( 'http%3A%2F%2Fpipes.yahoo.com%2Fpipes%2Fpipe.run%3F_id%3De3109ca0ef00e70403285b7588e457d2%26_render%3Drss',
	          { limit: 5, header : false, titletag : "h5", date : true, content : false } );
	      } );
	    </script>
	</div>

  <div style="position: relative; margin-bottom: 10px;">
    <a href="http://www.eclipse.org/eclipsert/"><img alt="EclipseRT"
        src="/rt/images/EclipseRT.png"
        style="position: relative; left: 55px; top: 0pt;"/></a>
  </div>

</div>

EOHTML;

generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
?>
