<?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&trade;";
$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>Please make sure you have all the <a href="/mtj/development/tutorial/prerequisites.php">prerequisites</a>.</li>
			<li>If you have been using Eclipse without MTJ to do Java ME development using an SDK or a Wireless Toolkit, your Eclipse project may need
			some classpath changes.</li>
		</ol>
		<h3 id="step1">Install an SDK or a Wireless Toolkit</h3>
		<p>Install any of SDKs or 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 an SDK or 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 target SDK or toolkit.
		For instance, some toolkits or SDKs 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="../../download/downloads.php">
			the downloads 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="/mtj/development/tutorial/prerequisites.php" target="_self">Prerequisites</a>
        		</li>
        	</ul>
        	<ul>
        	    				
        		<a href="/mtj/development/tutorial/supported.php" target="_self">Supported SDKs and Wireless Toolkits</a>
        		</li>
        	</ul>
        	<ul>
        	    			
        		<a href="/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 an SDK or a Wireless Toolkit</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="/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);
?>
