<?php  	
    /* Required eclipse basic classes */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
    /* Functions and modules related to Navbar objects */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
    /* Functions and modules related to the page top eclipse menu */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
    /* Functions used for display events */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/mtj/events.func.php");
    
    $App 	= new App();
    /* Left Navbar */	
    $Nav	= new Nav();	
    /*  Page top eclipse menu */
    $Menu 	= new Menu();

    /* Find the _projectCommon.php file and include it */
    include($App->getProjectCommon());
    
	/* Begin: page-specific settings.  Change these. */
	$pageTitle 		= "Mobile Tools for Java &nbsp; (MTJ) &nbsp; Developer Resources";
	$pageKeywords	= "developer, resources, mtj";
	$pageAuthor		= "Diego Madruga Sandin";
		
	/* Paste your HTML content between the EOHTML markers! */	
	$html = <<<EOHTML

<div id="maincontent">
	<div id="midcolumn">
	<h1>$pageTitle</h1>
	
		<div class="homeitem">
			<h3>Development Tools</h3>
				<ul class="midlist">
					<li><b><a
						href="/mtj/development/svnsetup.php">SVN Repository</a></b><br/>
						MTJ development is managed in 
						the <a href="http://dev.eclipse.org/viewsvn/index.cgi/org.eclipse.mtj/?root=DSDP_SVN">MTJ</a>  Repository.
					</li>
					<li><a href="/mtj/development/bug_process.php" target="_self"><b>Bug Process</b></a><br> 
					   View <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&classification=DSDP&product=mtj&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&cmdtype=doit">all open</a> issues
					   | <a target="_top" href="https://bugs.eclipse.org/bugs/enter_bug.cgi?assigned_to=dsdp.mtj-inbox%40eclipse.org&blocked=&bug_file_loc=http%3A%2F%2F&bug_severity=normal&bug_status=NEW&comment=Overview%3A%20(More%20detailed%20restatement%20of%20summary)%0D%0A%0D%0ASteps%20to%20Reproduce%3A%20(Minimized%2C%20easy-to-follow%20steps%20that%20will%20trigger%20the%20bug)%0D%0A%0D%0A%20%20%20%201)%0D%0A%20%20%20%202)%0D%0A%0D%0AActual%20Results%3A%20(What%20MTJ%20did%20after%20performing%20the%20above%20steps)%0D%0A%0D%0A%0D%0A%0D%0AExpected%20Results%3A%20(What%20MTJ%20should%20have%20done%2C%20were%20the%20bug%20not%20present)%0D%0A%0D%0A%0D%0A%0D%0ABuild%20Date%20%26%20Platform%3A%20(update%20with%20the%20correct%20values%20from%20your%20workspace)%0D%0A%20%0D%0A%20Installation%20%3A%20eclipse-SDK-3.4.0%20(I20080617-2000)%20%0D%0A%20MTJ%20install%20%20%3A%20Runtime%20|%20SDK%20|%20Examples%0D%0A%20java.runtime%20%3A%20Java(TM)%20SE%20Runtime%20Environment%20(build%201.6.0_07-b06)%0D%0A%20os.name%3A%20%20%20%20%20%3A%20Windows%20XP%20Professional%2C%20Service%20Pack%203%0D%0A%0D%0AAdditional%20Builds%20and%20Platforms%3A%20(Whether%20or%20not%20it%20occurs%20on%20other%20platforms)%0D%0A%0D%0A%0D%0A%0D%0AAdditional%20Information%3A%20(Any%20other%20useful%20information)%0D%0A%0D%0A%0D%0A&contenttypeentry=&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&data=&dependson=&description=&flag_type-1=X&flag_type-2=X&flag_type-4=X&flag_type-6=X&flag_type-7=X&flag_type-8=X&form_name=enter_bug&keywords=&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=All&priority=P3&product=MTJ&qa_contact=&rep_platform=All&short_desc=&version=unspecified">Submit new</a> bugs
					   | Request an <a target="_top" href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=mtj&version=unspecified&rep_platform=All&op_sys=All&priority=P3&bug_severity=enhancement&form_name=enter_bug">enhancement</a>
					</li>
					<li><b><a
						href="http://www.eclipse.org/webtools/development/apiscanner/apiscanner.html">Eclipse API Scanner</a></b><br/>Describe the API of a component and scan plug-ins for API
						violations (from the <a href="http://www.eclipse.org/webtools"
						target="_self">WebTools</a> project).</li>
					<li><b><a href="http://www.eclipse.org/webtools/development/piitools/piitools.html">Check
						Unused Properties Tool</a></b> <br>
						Scan property files for unused messages (from the <a
							href="http://www.eclipse.org/webtools" target="_self">WebTools</a>
						project).</li>
					<li><b><a href="http://www.eclipse.org/eclipse/platform-core/downloads.html">Core
						Tools</a></b> <br>
						Useful utilities from the Platform team. Consider adding their
						<a href="http://www.eclipse.org/eclipse/platform-core/downloads.html#updates">
						update site</a> to your configuration.</li>
					<li><b><a
						href="http://wiki.eclipse.org/index.php/Platform-releng">Release Engineering</a></b> <br>
						See the instructions, FAQs and help from the Platform-Releng team.</li>
					<!-- Dashboard is currently not useful.
					<li><b><a
						href="http://www.eclipse.org/projects/dashboard/dashboard_detail.php?project=dsdp.mtj">Project
						Dashboard</a></b> <br>
						View generated project statistics.</li>
					-->
					<li><b><a
						href="https://dev.eclipse.org/committers">Eclipse Committer
						Tools</a></b> <br>
						Information on infrastructure status, file path information,
						FAQs, etc.</li>
				</ul>
		</div>
		<div class="homeitem">
			<h3>Development Resources</h3>
				<ul class="midlist">
					<li><b><a href="http://wiki.eclipse.org/index.php/API_Central">API Guidelines</a></b><br>
						Look <a href="http://help.eclipse.org/help30/topic/org.eclipse.platform.doc.isv/reference/misc/api-usage-rules.html">
						here</a> for general Eclipse API rules of engagement. We strive to achieve 
						<a href="http://www.eclipse.org/projects/dev_process/eclipse-quality.php">
						Eclipse Quality</a>, as outlined in the draft of
						<a href="http://www.eclipse.org/projects/dev_process/Eclipse%20Quality%20APIs%20v2.pdf">
						Eclipse Quality APIs</a>.
						</li>
					<li><b><a href="http://wiki.eclipse.org/index.php/Development_Conventions_and_Guidelines">
					    Development Conventions and Guidelines</a></b><br>
						Coding standards, naming conventions, and other
						guidelines used by the Platform. MTJ will use these conventions
						until such time as deviation is required.</li>
						
					<li><b><a
						href="http://www.eclipse.org/dsdp/dsdp-charter.php">Charter</a></b>
						<br>
						As a DSDP subproject, the MTJ project abides by the
						<a href="/dsdp/dsdp-charter.php">DSDP Project charter</a> and the
						<a href="http://www.eclipse.org/projects/dev_process/Eclipse_Standard_TopLevel_Charter_v1.0.php">
						Eclipse Standard Charter</a>.</li>
					<li><b><a
							href="/mtj/participants.php">Contributors and Committers</a></b> <br>
						List of MTJ Project contributors and committers.</li>
				</ul>
		</div>
			</div>
			
</div>

EOHTML;


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