<?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'
$pageTitle = "WTP Incubator";
$pageKeywords = "Eclipse WTP webtools XML IDE XQuery JSF VEX XQDT Secuiryt XST JAX WS";
$pageAuthor ="Ugur Yildirim @ Eteration A.S.";

//include( 'rightcolumn.php' );

$root = $_SERVER['DOCUMENT_ROOT'];
require_once ($root . '/webtools/common.php');

# Generate the web page
// Load the XML source
$xml = DOMDocument::load('index.xml');

//Set the page title
$xpath = new DOMXPath($xml);
$titleNode = $xpath->query("/html/head/title")->item(0);
$pageTitle = ($titleNode != null) ? $titleNode->nodeValue : "eclipse.org webtools page";

// Load the XSL source
$xsl = DOMDocument::load('../wtpnova.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

$html = $proc->transformToXML($xml);
$html .= $wtpTopButtons;

if (file_exists("rightcolumn.xml")) {
	$xml = DOMDocument::load('rightcolumn.xml');
	$xsl = DOMDocument::load('../wtpnovaside.xsl');
	$proc->importStylesheet($xsl);
	$html .= $proc->transformToXml($xml);
	$html .= "<style>#midcolumn{width:685px !important;}</style>";
}

$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>