<?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'
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "DSDP&nbsp; - &nbsp;Mobile Tools for Java &nbsp; (MTJ) &nbsp; Repository";
	$pageKeywords	= "DSDP, MTJ, SVN, repository";
	$pageAuthor		= "Diego Madruga Sandin";
	
    /* 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"); 	

    
    $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. */ 
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>$pageTitle</h1>
        <h2>Team Project Set</h2>
        <p>The easiest way to setup a development environment is to import the team project sets that are available below.
        Simply download the file and select a <b>File->Import->Team->Team Project Set</b>.
        Two files are available: one for DSDP MTJ Committer and another to external contributors. The main difference between them
        is that the commiter's one access the repository via a secure connection which requires a valid SVN/CVS login. The other file
        can only be used to checkout the source code, change the code and generate patches that are attached to the bugzilla</p>
        <ul>
            <li>
                <a href="http://www.eclipse.org/dsdp/mtj/development/mtj_anonymous.psf">
                Contributor Access 
                </a>
            </li>         
            <li>
                <a href="http://www.eclipse.org/dsdp/mtj/development/mtj_sshproxy.psf">
                Committer Access 
                </a>
            </li>         
        </ul>
        <p>Once the psf file is imported all projects will be added to your workspace.
        for some additional information about how to use Team Project Sets, please refer to
        <a href="http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-cvs-project-set.htm">
        Eclipse Help 
        </a>
        </p> 
		
		<h2>Web access</h2>
		<p>Our repositories can also be accessed over the internet 
		through the viewsvn interface:</p>
        <ul>
            <li>
                <a href="http://dev.eclipse.org/viewsvn/index.cgi/?root=DSDP_MTJ">
                org.eclipse.mtj
                </a>
            </li>		  
        </ul>

		<h2>Direct manual access to MTJ Repositories</h2>
		<p>
    		If you want to manually browse MTJ repositories in the
    		Eclipse SVN Repository Explorer or a similar SVN browser, here is
    		how to access them:
		</p>
		<ul>
    		<li>Configuration <br>
    		    &nbsp;&nbsp;&nbsp;&nbsp;<b>host:</b> dev.eclipse.org <br>
        		&nbsp;&nbsp;&nbsp;&nbsp;<b>repository:</b> /svnroot/dsdp/org.eclipse.mtj<br>
        		&nbsp;&nbsp;&nbsp;&nbsp;<b>method:</b> svn+ssh or https<br>
    		</li>
		</ul>
		

		<h2>Background information on SVN and Eclipse</h2>
		<ul>
		  <li>See <a href="http://wiki.eclipse.org/index.php/SVN_Howto">
			Using Eclipse with SVN</a> for instructions on how to use
			Eclipse with SVN.</li>
		</ul>
		<p/>
	</div>

EOHTML;

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