<?php
/*******************************************************************************
 * Copyright (c) 2009, 2014 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*		Eclipse Foundation - Initial version
*		Anthony Hunter - changes for EMF Validation
********************************************************************************/
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());

$localVersion = false;

$pageTitle 		= "Eclipse EMF Validation";

// 	# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML
<div id="bigbuttons">
<h3>Primary Links</h3>
<ul>
<li><a id="buttonDownload" href="downloads.php" title="Download">
	Downloads, Software Install Site</a></li>
<li><a id="buttonDocumentation" href="documentation.php" title="Documentation">
	Tutorials, Examples, Reference Documentation</a></li>
<li><a id="buttonSupport" href="support.php" title="Support">
	Bug Tracker, Newsgroup</a></li>
<li><a id="buttonInvolved" href="getting_involved.php" title="Getting Involved">
	git, Workspace Setup, Wiki, Committers</a></li>
</ul>
</div>

<div id="midcolumn">
<h3>Eclipse Modeling Framework (EMF) Model Validation</h3>

<div id="introText">
<p>EMF model validation provides the following capabilities:</p>
<ol>
	<li>Constraint Definition  - Provides API for defining constraints for any EMF meta-model (batch and live constraints).</li>
	<li>Customizable model traversal algorithms - Extensibility API to support meta-models that require custom strategies for model traversal.</li>
	<li>Constraint parsing for languages - Provides support for parsing the content of constraint elements defined in specific languages. The validation framework provides support for two languages: Java and OCL.</li>
	<li>Configurable constraint bindings to application contexts - API support to define "client contexts" that describe the objects that need to be validated and to bind them to constraints that need to be enforced on these objects.</li>
	<li>Validation listeners - Support for listening to validation events.</li>
</ol>

</div>

</div>

<div id="rightcolumn">

<div>
<h3>Current Status</h3>
<p>Development is underway for the proposed EMF Validation 1.8.0 release for Eclipse Luna, due June 2014.</p>
</div>

<div id="headlines">
<h3>EMF Validation 1.7.0 Now Available</h3>
<p><i>June 26, 2013 -</i> EMF Validation 1.7.0 for Eclipse Kepler has been released. Check the <a href="/emf-validation/downloads.php">Download</a> page.</p>
</div>

</div>
EOHTML;

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

?>
