<?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 		= "Removing Mobile Tools for Java<sup><small>TM</small></sup> from Eclipse";
$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>
			Obviously we hope that you find MTJ so useful that you will never
			want to be without it. If you really feel you need to remove it,
			however, or if you want to do a completely "clean" install, you can
			follow these steps to remove MTJ from your Eclipse installation:
		</p>
		<h3 id="removing1">The "Normal" way</h3>
		<ol>
			<li>Uninstall MTJ. Please refer Eclipse help document or visit <a
				href="http://help.eclipse.org/" target="blank">Eclipse Help web
			site</a>, select <b<Workbench User Guide &gt; Tasks &gt; Updating and
			installing software &gt; Uninstalling software using the Uninstall
			wizard</b> document node for information about how to install software.</li>
			<li>Uninstall the preprocessor hooks:
		
			<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>Remove the property definition
				<pre>osgi.framework.extensions=org.eclipse.mtj.core.hooks</pre>
				from the configuration file.</li>
				<li>Save the configuration file.</li>
				<li>Restart Eclipse.</li>
				<li>Delete the org.eclipse.mtj.core.hooks plugin from your file system.</li>
			</ol>
			</li>
		</ol>
		<h3 id="removing2">The "Brute Force" method</h3>
		<p>If the "Normal" method doesn't work, or if you want to make
		absolutely sure that everything is gone, you can always remove MTJ the
		"brute force" way:</p>
		<ol>
			<li>Close any running copies of Eclipse.</li>
			<li>Open the <span class="directory">features</span> directory
			within your Eclipse installation directory.</li>
			<li>Delete any directories whose name begin with
			"org.eclipse.mtj". (e.g. <span class="directory">org.eclipse.mtj.feature_0.9.0</span>)
			</li>
			<li>Open the <span class="directory">plugins</span> directory
			within your Eclipse installation directory.</li>
			<li>Delete any directories whose name begin with
			"org.eclipse.mtj". (e.g. <span class="directory">org.eclipse.mtj.core_0.9.0</span>,
			<span class="directory">org.eclipse.mtj.doc.user_0.9.0</span>, etc.)</li>
			<li>
			<p>If you have chosen to install the preprocessor support using <a
				href="/dsdp/mtj/development/tutorial/installation.php#step2b">the instructions</a>, Eclipse will not
			remove the hooks necessary for the preprocessor. To uninstall, the
			preprocessor hooks:</p>
			<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>Remove the property definition <br />
				<code>osgi.framework.extensions=org.eclipse.mtj.core.hooks</code> <br />
				from the configuration file.</li>
				<li>Save the configuration file.</li>
			</ol>
			</li>
			<li>Invoke eclipse using the <span class="keyword">-clean</span>
			command line option. This will force Eclipse to re-scan its lists of
			installed features and plug-ins in order to ensure that the appropriate
			updates to Eclipse's metadata are performed.</li>
		</ol>
		<h3 id="removing3">Removing MTJ traces from a project</h3>
		<p>If you want to remove all traces of MTJ from a project, you need
		to do the following from outside Eclipse:</p>
		<ol>
			<li>MTJ creates a file named <span class="directory">.mtj</span>
			in the root of each MIDlet project. Remove this file.</li>
			<li>MTJ adds build commands and "natures" to the <span
				class="directory">.project</span> file associated with each Eclipse
			project. A typical Eclipse <span class="directory">.project</span> file
			looks like this:
			<div>
			
			<pre>
&lt;xml version="1.0" encoding="UTF-8"?&gt;
&lt;projectDescription&gt;
	&lt;name&gt;PaperClick Java Go Window&lt;/name&gt;
	&lt;comment&gt;&lt;/comment&gt;
	&lt;projects&gt;
	&lt;/projects&gt;
	&lt;buildSpec&gt;
		&lt;buildCommand&gt;
			&lt;name&gt;org.eclipse.jdt.core.javabuilder&lt;/name&gt;
			&lt;arguments&gt;
			&lt;/arguments&gt;
		&lt;/buildCommand&gt;
		<span style="text-decoration: underline">&lt;buildCommand&gt;</span>
			<span style="text-decoration: underline">&lt;name&gt;org.eclipse.mtj.core.preverifier&lt;/name&gt;</span>
			<span style="text-decoration: underline">&lt;arguments&gt;</span>
			<span style="text-decoration: underline">&lt;/arguments&gt;</span>
		<span style="text-decoration: underline">&lt;/buildCommand&gt;</span>
		<span style="text-decoration: underline">&lt;buildCommand&gt;</span>
			<span style="text-decoration: underline">&lt;name&gt;org.eclipse.mtj.core.l10nBuilder&lt;/name&gt;</span>
			<span style="text-decoration: underline">&lt;arguments&gt;</span>
			<span style="text-decoration: underline">&lt;/arguments&gt;</span>
		<span style="text-decoration: underline">&lt;/buildCommand&gt;</span>		
	&lt;/buildSpec&gt;
	&lt;natures&gt;
		&lt;nature&gt;org.eclipse.jdt.core.javanature&lt;/nature&gt;
		<span style="text-decoration: underline">&lt;nature&gt;org.eclipse.mtj.core.nature&lt;/nature&gt;</span>
		<span style="text-decoration: underline">&lt;nature&gt;org.eclipse.mtj.jmunit.jmunitNature&lt;/nature&gt;</span>
		<span style="text-decoration: underline">&lt;nature&gt;org.eclipse.mtj.core.l10nNature&lt;/nature&gt;</span>
	&lt;/natures&gt;
&lt;/projectDescription&gt;
		</pre>
		</div>
			The underlined items are the ones you should remove.</li>
		</ol>
	</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>
        		</li>
        	</ul>
        	<ul>				
        		<a href="/dsdp/mtj/development/tutorial/removal.php" target="_self">Removal Instructions</a>
        		<ul>
					<li><a href="#removing1">The "Normal" way</a></li>
					<li><a href="#removing2">The "Brute	Force" method</a></li>
					<li><a href="#removing3">Removing MTJ traces from a project</a></li>
				</ul>
        		</li>
        	</ul>
        </div>
	</div>
</div>

EOHTML;


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