<?php

/*
     File : plan.php
     Author : Diego Madruga Sandin (dmadruga)
     Date :	2008-03-14
     Description : This are the feature plan for the MTJ project. 

*/

/* 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'] . "/dsdp/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. */
$pageTitle 		= "DSDP&nbsp; - &nbsp;Mobile Tools for Java &nbsp; (MTJ) &nbsp; Feature Plan";
$pageKeywords	= "mobile, tools, Java, runtime, design, framework";
$pageAuthor		= "Diego Madruga Sandin";

$html = <<<EOHTML
<div id="maincontent">
    <div id="midcolumn">
       <h1>$pageTitle</h1>
       <div class="homeitem3col">
		<h3>MTJ 0.7</h3>
    		<ul>
                <li>
                	Current MTJ Code
                </li>
    		</ul>
		</div>
        <div class="homeitem3col">
        <h3>MTJ 0.9</h3>
    		<ul>
                <li> Move EclipseME to MTJ repository</li>
                <li> Re-organize EclipseME code to follow Eclipse standards</li>
                <li> Setup build environment</li>
                <li> Eclipse Foundation Intellectual Property review on new code</li>
    		</ul>
		</div>
        <div class="homeitem3col">
        <h3>MTJ 0.9.1</h3>
            <ul>
			    <li>Preprocessing enhancements</li>
			    <li>Library support</li>
			    <li>JMUnit support (Mobile JUnit)</li>
			    <li>MIDlet localization tool</li>
            </ul>
        </div>		
		<div class="homeitem3col">
        <h3>MTJ 1.0</h3>
    		<ul>
                <li> Re-structure code to make it more flexible and usable to different vendors </li>
                	<ul>
                		<li>Define a plug-in model to support more flexibility. Focus on:
                			<ul>
                                <li>
                                	Pre-verify
                                </li>
                                <li>
                                	Signing
                                </li>
                                <li>
                                	Packaging
                                </li>
                                <li>
                                	Deploying
                                </li>
                                <li>
                                	Device Manager
                                </li>
                                <li>
                                	Obfuscation
                                </li>
                                <li>
                                	Preprocessing
                                </li>
                			</ul>
                		</li>
                	</ul>
                <li>Include an API layer between UI and Core (possibly with code from current MTJ 0.7) </li>
                <li>Define Extension Points to implement the API layer </li>
    		<ul>
                 <li>Include deployment support (re-use MTJ 0.7 solution)</li>
                 <li>Include key store UI (re-use MTJ 0.7 solution)</li>
                 <li>Include import net beans project wizard (re-use MTJ 0.7 solution)</li>
                 <li>Include import carbideJ project wizard (re-use MTJ 0.7 solution)</li>
                 <li>MIDlets templates feature (re-use MTJ 0.7 solution)</li>
                 <li>Improve antenna support</li>
    		</ul>
            </ul>
		</div>
        <div class="homeitem3col">
        <h3>Others (not yet committed)</h3>
    		<ul>
                <li>Include MIDP 3.0 support</li>
                <li>Device Fragmentation support</li>
                <li>Enhance documentation (context sensitive help and cheat sheets)</li>
                <li>LCDUI and/or SVG UI Editor</li>
                <li>Enhance Device Editor UI</li>
    		</ul>
		</div>
    </div>
    <div id="rightcolumn">
            <div class="sideitem">
                <h6>Project Plan</h6>
                <div align="center">
                    <br>
                    Here you can find the project plan for version 1.0 in the <a href="http://www.eclipse.org/projects/project-plan.php?projectid=dsdp.mtj">pending standard form</a>.
                    <br><br>
                </div>
            </div>  <!-- sideitem-->
        </div> <!-- rightcolumn -->		
</div>
EOHTML;

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