<?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 		= "Tigerstripe";
$pageKeywords	= "Type, page, keywords, here";
$pageAuthor		= "Eric Dillon";
# End: page-specific settings
#

# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

<div id="maincontent">

<div id="midcolumn">
<h1>$pageTitle</h1>
		<table border="0" width="750">
			<td valign="top" >
				<h3>An Eclipse Technology Subproject</h3>
				<p>Tigerstripe is a framework for Model Driven Engineering (MDE) with special support for the Telecommunications Industry.</p>
				<small>Note: this is the open-source incarnation of Tigerstripe that was available from the <a href="http://www.tigerstripedev.net">www.tigerstripedev.net</a> website.</small>
			</td>
			<td><img src="/tigerstripe/images/tsScreenShot.gif"/>
			</td>
		</table>
		
		<div class="homeitem3col">
			<h3>Get the latest about Tigerstripe !</a></h3>
			<ul>
				<li>Looking to get started with Tigerstripe, for more informations, or insight? Visit our <a href="http://wiki.eclipse.org/Tigerstripe">wiki!</a></li>
				<li>Looking for the latest build of Tigerstripe? Get it from <a href="downloads/allDownloads.php#latest">Here</a></li>
				<li>Tigerstripe Generators can be checked-out from the "<a href="generators">generators</a>" page</li>
				</ul>
		</div>
		<hr class="clearer" />
						
		<div class="homeitem">
			<h3>Why Tigerstripe?</h3>
			<p>Tigerstripe is focusing on themes that we found were typically not covered in existing MDE frameworks:</p> 
			<ul>
				<li><a href="http://wiki.eclipse.org/Why_Tigerstripe_%3F#Focused_Modeling">Users of MDE frameworks may not be UML experts</a>...</li> 
				<li><a href="http://wiki.eclipse.org/Why_Tigerstripe_%3F#Large_Model_Support">Enterprise Models are BIG</a>...</li> 
				<li><a href="http://wiki.eclipse.org/Why_Tigerstripe_%3F#Distributed_Teams">Smaller pieces of Enterprise Models are owned by various Teams</a>...</li> 
				<li><a href="http://wiki.eclipse.org/Why_Tigerstripe_%3F#MDE_Roles">MDE involves multiple roles</a>...</li> 
			</ul>
			<hr class="clearer" />
 		  	<div align="right">
				<a href="http://wiki.eclipse.org/Why_Tigerstripe_%3F">Read more...</a>
		 	</div>
		</div>
		
		<div class="homeitem">
			<h3>Project News and Events</h3>
			<ul>
				<li><a href="http://www.eclipse.org/tigerstripe/downloads">July 1st, 2008: Tigerstripe 0.3 is released!</li>
				<li><a href="http://www.eclipse.org/tigerstripe/downloads">June 20th, 2008: Tigerstripe 0.3RC1 build available!</li>
				<li><a href="http://www.eclipse.org/tigerstripe/downloads">May 26th, 2008: Tigerstripe 0.3M2 build available!</li>
				<li><a href="http://www.eclipse.org/tigerstripe/downloads">May 6th, 2008: Tigerstripe 0.3M1 build available!</li>
				<li><a href="http://wiki.eclipse.org/TigerstripeF2F_20080421">April 21-23, 2008: Tigerstripe Committers summit, Seattle</a>, hosted by Cisco</li>
				<li><a href="http://live.eclipse.org/node/482">April 17th, 2008: Webinar on Tigerstripe</a>, co-presented with HP</li>
				<li>...</li>
			</ul>
		</div>
		
	</div>

	<div id="rightcolumn">
 		<div class="sideitem">
		   <h6>Incubation</h6>
 		  <div align="center">
 		  	<a href="/projects/what-is-incubation.php">
 		  		<img align="center" src="/images/egg-incubation.png" border="0" alt="Incubation" />
 		  	</a>
 		  </div>
 		</div>
 		<div class="sideitem">
 			<h6>New to Tigerstripe?</h6>
 			<ul>
 				<li><a href="http://wiki.eclipse.org/Tigerstripe_Community_Resources">Community Resources</a></li>
 				<li><a href="/tigerstripe/downloads.php">Downloads</a></li>
 				<li><a href="/tigerstripe/generators">Generators</a></li>
 				<li><a href="/tigerstripe/documentation/index.php">Documentation</a></li>
 				<li><a href="/tigerstripe/mailing-lists.php">Mailing Lists</a></li>
 				<li><a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.tigerstripe">Newsgroup</a></li>
 				<li><a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Tigerstripe">Report Bug</a></li>
 			</ul>
 		</div>
	</div>
</div>
EOHTML;


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