<?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 Generators Downloads";
$pageKeywords	= "Tigerstripe, Generators";
$pageAuthor		= "Eric Dillon";

# 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="maincontent">
<div id="midcolumn">
<h1>$pageTitle</h1>
	<p>This page contains a list of the Tigerstripe Generators that are available from the Tigerstripe project.</p>
	<p>Tigerstripe Generators are of 2 kinds:
		<ul>
			<li><a href="#class">Class-based Generators (M1-Level)</a>: This is the most common case for Model-Driven Engineering environment, in that the 
			generation is based on the model itself, i.e. classes, associations and other artifacts defined as part of the model.</li>
			<li><a href="#instance">Instance-based Generators (M0-level)</a>: allowing to generate content based on object instances of a specific model, driven by
			the instances created on an Instance Diagram, e.g.</li>
		</ul>
	</p>
	<h4>Instructions</h4>
	<p>These generators are provided directly out of our CVS repository. Please follow these instructions to deploy the generators in your local 
	instance of Tigerstripe:
	  <ul>
	  	<li>Check-out the chosen Generator from CVS
	  		<ul>
	  			<li>File->Import..., CVS->Projects from CVS...</li>
	  			<li>If you don't already have it you need to create a Repository Location for the Tigerstripe Eclipe Project, with the following details:
	  				<ul>
	  					<li><strong>Host</strong>: dev.eclipse.org</li>
	  					<li><strong>Repository Path</strong>: /cvsroot/technology</li>
	  					<li><strong>User</strong>: anonymous</li>
	  					<li><strong>Password</strong>: <small><i>leave blank</i></small></li>
	  					<li>use the default connection details</li>
	  				</ul>
	  			</li>
	  			<li>Browse to the org.eclipse.tigerstripe/generators directory and select the target Generator Project for import</li>
	  		</ul>
	  	</li>
	  	<li>Once imported in your workspace, you need to deploy the generator to make use of them against one of you Models.<br/>
	  	Right-click on the Generator project and select plugin->deploy... 
	  	</li>
	  	<li>Then simply navigate to the "plugin settings" tab of the tigerstripe.xml in your model project to enable the generator</li>
	  	<li>Run it!</li>
	  </ul>
	</p>
		<div class="homeitem3col">
			<h3><a name="class"> </a>Class-Based Generators (M1-Level)</h3>
			<ul>
				<li><h4>Export-xml</h4>
					<ul>
						<li><strong>Description</strong>: Generates an XML export of a Tigerstripe model.</li>
						<li><strong>CVS Path</strong>: org.eclipse.tigerstripe/generators/export-xml</li>
						<li><strong>Details</strong>: more information can be found <a href="http://wiki.eclipse.org/Tigerstripe_XML_Export_Generation">Tigerstripe XML Export Generation</a> wiki topic.</li>
					</ul>
				</li>
				<li><h4>Tigerstripe-Documentation</h4>
					<ul>
						<li><strong>Description</strong>: Generates HTML documentation of a Tigerstripe model.</li>
						<li><strong>CVS Path</strong>: org.eclipse.tigerstripe/generators/tigerstripe-documentation</li>
						<li><strong>Details</strong>: More details on the <a href="http://wiki.eclipse.org/Tigerstripe_Documentation_Generation">Tigerstripe Documentation Generation</a> wiki topic. The original Bugzilla is <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=228670">228670</a></li>
					</ul>
				</li>
				</ul>
		</div>
		<div class="homeitem3col">
			<h3><a name="instance"> </a>Instance-Based Generators (M0-Level)</h3>
			<ul>
				<li><h4>M0-xml</h4>
					<ul>
						<li><strong>Description</strong>: creates an XML representation of instances found on an Instance Diagram.</li>
						<li><strong>CVS Path</strong>: org.eclipse.tigerstripe/generators/m0xml</li>
					</ul>
				</li>
			</ul>
		</div>
		</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related links</h6>
			<ul>
				<li><a href="/tigerstripe/downloads"">Tigerstripe Downloads</a></li>
			</ul>
		</div>
	</div>
</div>


EOHTML;


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