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

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Riena";
	$pageKeywords	= "Riena, Distributed Components, Platform, Runtime, Security, Eclipse";
	$pageAuthor		= "Christian Campo";
	
	# 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="midcolumn">
	  <h1>Riena Platform Project</h1>
	  <h2>What is Riena?</h2>
	  <p>The Riena platform is the foundation for building multi-tier enterprise client/server
 applications. As such Riena is broadening the usage of the service oriented architecture of OSGi/Equinox
  by providing access to local and remote services in a transparent way. Using this uniform programming
   model, the components of Riena and the business components of the enterprise application can be
    developed regardless of their target location. Components are later easily placed on client or
     server depending on the business requirements.</p>
     <p>As an example the Riena user interface components will support a business process oriented user
 interface visualization and navigation metaphor which can be used as alternative to the default
  workbench layout.</p>
  <p>For more information about Riena, its component and the plan checkout our <a href="http://wiki.eclipse.org/Riena_Project">wiki</a></p>
  
  <p>Riena was first release in January 2009 and continues to be further developed. It used RCP 3.x or E4 as base system but can also run to some extended in a RAP environment</p>
	  
	  <div class="homeitem3col">
			<h3>News</h3>
			<h4>Riena Release 6.1.0 is coming with Mars (June 2015)</h4>
			<h4>Riena Release 6.0.0 was released with Luna (June 2014)</h4>
			<p>The Wiki page <a href="http://wiki.eclipse.org/Riena/GettingStarted">Getting Started</a> contains the download links and all that.
			   </p>
		</div>
	</div>
	
	<div id="rightcolumn">
	    <div class="sideitem">
	    	<h6>Active Contributors</h6>
	    	<div align="left">
	    	<ul>
	    		<li><a href="http://www.compeople.de" target="_blank">Compeople</a></li>
	    	</ul>
	    	</div>
	    </div>
    	<div class="sideitem">
			<h6>Links</h6>
			<ul>
				<li><a href="http://www.eclipse.org/proposals/riena" target="_blank">Riena Proposal</a></li>
			</ul>
		</div>
		<div class="sideitem">
			<h6>Supported by</h6>
			<ul>
				<li>YourKit is kindly supporting open source projects with its full-featured Java Profiler.
YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products:
<a href="http://www.yourkit.com/java/profiler/index.jsp">YourKit Java Profiler</a> and <a href="http://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET Profiler</a>.
</li>
			</ul>
		</div>
	</div>	

EOHTML;


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