<?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());

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "Installing Mobile Tools for Java<sup><small>TM</small></sup>";
$pageKeywords	= "mobile, java, tools";
$pageAuthor		= "Diego Madruga Sandin";


# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

<div id="maincontent">
	<div id="midcolumn">
        <h1>$pageTitle</h1>
        <p>This document provides instructions on how to install or upgrade
           the MTJ plug-in/feature set. In addition, once you have finished the
           installation itself, you will need to configure MTJ's settings as well as
           some Eclipse settings.
         </p>
		<h3 id="step0">Before you begin</h3>
		<ol>
			<li>
			<p>Please make sure you have all the <a href="/dsdp/mtj/development/tutorial/prerequisites.php">prerequisites</a>.
			</p>
			</li>
			<li>
			<p>If you have been using Eclipse without MTJ to do J2ME
			development using a Wireless Toolkit, your Eclipse project may need
			some classpath changes.</p>
			</li>
		</ol>
		<h3 id="step1">Install the Wireless Toolkit(s)</h3>
		<p>Install any of the wireless toolkits you want to use. When you do
		this, make note of the base directory into which each is installed, as
		you will need this information when you configure MTJ.</p>
		<p>Unix users - if you install a Wireless Toolkit for use by more
		than one user on your system, please ensure that all the users have the
		appropriate read and execute permissions on the contents of the toolkit.
		For example, WTK's contain a preverifier that MTJ will need to access
		during the build process. If the user doing the build does not have
		execute permissions on the preverifier, the build will fail. Similarly,
		if the user does not have execute permissions on the emulator, he or she
		will not be able to test the build.</p>
		<h3 id="step2a">Installing via the MTJ Update site</h3>
		<p>
		<ol>
			<li>Please visit <a href="/dsdp/mtj/download/update.php">
			the update page</a> to get update sites URLs</li>
			<li>Please refer Eclipse help document or visit <a
				href="http://help.eclipse.org/" target="blank">Eclipse Help web
			site</a>, select Workbench User Guide &gt; Tasks &gt; Updating and
			installing software document node for information about how to install
			software.</li>
		</ol>
		<strong>Note:</strong>
		If you would like to take advantage of MTJ's support for preprocessing,
		it is imperative that MTJ be installed into the same directory structure
		as your base Eclipse installation. For instance, if your base Eclipse
		installation (not your workspace) is installed to C:\software\eclipse,
		you will need to make sure that you install MTJ into
		C:\software\eclipse.
		</p>
		
		<h3 id="step2b">Configuring Preprocessor Support</h3>
		<p>Due to limitations in the extensibility of the Eclipse Java
		Compiler (see <a
			href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=116143"
			target="blank">Bug 116143</a> for further information), it is necessary
		for MTJ to hook into the Eclipse platform at a lower level in order to
		provide preprocessor support. If you would like to take advantage of
		MTJ's support for preprocessing, a few extra changes need to be made to
		your Eclipse installation.</p>
		<ol>
			<li>MTJ should be installed into the same directory structure as
			your base Eclipse installation. When the installation has completed,
			the org.eclipse.mtj.core.hooks_[version].jar file must be located in
			the same directory as the org.eclipse.osgi_[version].jar.</li>
			<li>The Eclipse configuration file must be altered to reference
			the MTJ framework hooks bundle.
			<ol>
				<li>Locate the file config.ini. This file is located in the
				&lt;eclipse install&gt;/configuration directory.</li>
				<li>Edit the config.ini with your favorite text editor.</li>
				<li>Add the following property definition to the configuration file.<br>
				<pre>osgi.framework.extensions=org.eclipse.mtj.core.hooks</pre>
				If the property already exists, append <code>",org.eclipse.mtj.core.hooks"
				</code> to the end of the current property definition.<br>
				<br>
				It is very important that the line be added before the end-of-file
				marker. Failure to properly place the new line before the end-of-file
				marker could cause your Eclipse workbench to fail to start.</li>
				<li>Save the configuration file.</li>
				<li>Restart Eclipse.</li>
			</ol>
			</li>
		</ol>
		<p>You will be warned if you have projects that are configured for
		preprocessing, but the necessary configuration changes have not been
		made. In this case, a warning will be written to the Eclipse workspace
		log file with text similar to <br>
		<i>"Preprocessor invoked, but hook is not installed. Consult the
		installation instructions for MTJ."</i><br>
         
    </div>    
	<div id="rightcolumn">
        <div class="sideitem">
        	<h6>Getting started</h6>
        	<ul>				
        		
        		<a href="/dsdp/mtj/development/tutorial/prerequisites.php" target="_self">Prerequisites</a>
        		</li>
        	</ul>
        	<ul>
        	    				
        		<a href="/dsdp/mtj/development/tutorial/supported.php" target="_self">Supported Wireless Toolkits</a>
        		</li>
        	</ul>
        	<ul>
        	    			
        		<a href="/dsdp/mtj/development/tutorial/installation.php" target="_self">Installation Instructions</a>
        		<ul>
        			<li><a href="#step0">Before you begin</a></li>
					<li><a href="#step1">Install the Wireless Toolkit(s)</a></li>
					<li><a href="#step2a">Installing via the MTJ Update site</a></li>
					<li><a href="#step2b">Configuring Preprocessor Support</a></li>
        		</ul>
        		</li>
        	</ul>
        	<ul>				
        		<a href="/dsdp/mtj/development/tutorial/removal.php" target="_self">Removal Instructions</a>
        		</li>
        	</ul>
        </div>
	</div>
</div>

EOHTML;


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