<?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->getName();
		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 class="sideitem">
	    <h6>RT on Twitter <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="twitterFeed"></div>
	    <script type="text/javascript">
	      $( document ).ready( function () {
	        $( '#twitterFeed' ).rssfeed( 'feed://search.twitter.com/search.atom%3Fq%3D%23eclipse',
	          { 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 );
?>
