Refactoring, some messages were updated
authorEugene Ostroukhov <eugeneo@symbian.org>
Thu, 25 Feb 2010 14:58:22 -0800
changeset 203 bb3a18c4e037
parent 202 53c1b4c3d783
child 204 fff9c0c94fa4
Refactoring, some messages were updated
org.symbian.tools.wrttools/plugin.xml
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/util/ProjectUtils.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/AptanaProjectLocationWizardPage.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/AptanaProjectsImportWizard.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/WrtProjectLocationWizardPage.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/WrtProjectsImportWizard.java
--- a/org.symbian.tools.wrttools/plugin.xml	Thu Feb 25 14:30:54 2010 -0800
+++ b/org.symbian.tools.wrttools/plugin.xml	Thu Feb 25 14:58:22 2010 -0800
@@ -188,7 +188,6 @@
 		</validator>
 	</extension>
 	 
-<!-- WRT WidgetWizard and AptanaProjectImportWizard -->
 	<extension point="org.eclipse.ui.newWizards">
 		<category id="org.symbian.tools.wrttools.core.category" name="Web Runtime(WRT)">
 		</category>
@@ -273,9 +272,12 @@
 		<category id="org.symbian.tools.wrttools.import" name="Web Runtime(WRT)">
 		</category>
 		<wizard category="org.symbian.tools.wrttools.import"
-			class="org.symbian.tools.wrttools.wizards.projectimport.AptanaProjectsImportWizard"
-			icon="icons/import_aptana_project.gif" id="org.symbian.tools.wrttools.import.aptanaImport"
+			class="org.symbian.tools.wrttools.wizards.projectimport.WrtProjectsImportWizard"
+			icon="icons/import_aptana_project.gif" id="org.symbian.tools.wrttools.import.projectImport"
 			name="WRT Project">
+     <description>
+        Import WRT project created in Aptana, Adobe Dreamweaver or WRT IDE
+     </description>
 		</wizard>
        <wizard
           category="org.symbian.tools.wrttools.import"
@@ -283,6 +285,9 @@
           icon="icons/WRTImport.gif"
           id="org.symbian.tools.wrttools.importwgz"
           name="Sources from WGZ File">
+          <description>
+             Create WRT project from deployable WGZ application archive
+          </description>
        </wizard>
     </extension>
 	
@@ -532,7 +537,7 @@
        </commonWizard>
        <commonWizard
              type="import"
-             wizardId="org.symbian.tools.wrttools.import.aptanaImport">
+             wizardId="org.symbian.tools.wrttools.import.projectImport">
           <enablement>
              <or>
                 <adapt
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/util/ProjectUtils.java	Thu Feb 25 14:30:54 2010 -0800
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/util/ProjectUtils.java	Thu Feb 25 14:58:22 2010 -0800
@@ -297,7 +297,7 @@
 		}
 	}
 
-    public static File isAptanaProject(File[] contents) {
+    public static File isWrtProject(File[] contents) {
 		for (int i = 0; i < contents.length; i++) {
 			File file = contents[i];
             if (file.isFile() && file.getName().equalsIgnoreCase(CoreUtil.METADATA_FILE)) {
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/AptanaProjectLocationWizardPage.java	Thu Feb 25 14:30:54 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1346 +0,0 @@
-/**
- * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the License "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Symbian Foundation - initial contribution.
- * Contributors:
- * Description:
- * Overview:
- * Details:
- * Platforms/Drives/Compatibility:
- * Assumptions/Requirement/Pre-requisites:
- * Failures and causes:
- */
-package org.symbian.tools.wrttools.wizards.projectimport;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.layout.PixelConverter;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TraverseEvent;
-import org.eclipse.swt.events.TraverseListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.IWorkingSetManager;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.ui.dialogs.IOverwriteQuery;
-import org.eclipse.ui.dialogs.WorkingSetGroup;
-import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
-import org.eclipse.ui.internal.ide.StatusUtil;
-import org.eclipse.ui.internal.wizards.datatransfer.ArchiveFileManipulations;
-import org.eclipse.ui.internal.wizards.datatransfer.DataTransferMessages;
-import org.eclipse.ui.internal.wizards.datatransfer.ILeveledImportStructureProvider;
-import org.eclipse.ui.internal.wizards.datatransfer.TarException;
-import org.eclipse.ui.internal.wizards.datatransfer.TarFile;
-import org.eclipse.ui.internal.wizards.datatransfer.TarLeveledStructureProvider;
-import org.eclipse.ui.internal.wizards.datatransfer.ZipLeveledStructureProvider;
-import org.eclipse.ui.statushandlers.StatusManager;
-import org.eclipse.ui.wizards.datatransfer.ImportOperation;
-import org.symbian.tools.wrttools.Activator;
-import org.symbian.tools.wrttools.util.ProjectUtils;
-
-@SuppressWarnings({"restriction", "unchecked"})
-public class AptanaProjectLocationWizardPage extends WizardPage implements
-		IOverwriteQuery {
-
-	/**
-	 * @since 3.5
-	 * 
-	 */
-	private final class ProjectLabelProvider extends LabelProvider implements
-			IColorProvider {
-
-		public Color getBackground(Object element) {
-			return null;
-		}
-
-		public Color getForeground(Object element) {
-			ProjectRecord projectRecord = (ProjectRecord) element;
-            if (projectRecord.hasConflicts()) {
-                return getShell().getDisplay().getSystemColor(SWT.COLOR_GRAY);
-            }
-			return null;
-		}
-
-		public String getText(Object element) {
-			return ((ProjectRecord) element).getProjectLabel();
-		}
-	}
-
-	// constant from WizardArchiveFileResourceImportPage1
-	private static final String[] FILE_IMPORT_MASK = {
-			"*.jar;*.zip;*.tar;*.tar.gz;*.tgz", "*.*" }; //$NON-NLS-1$ //$NON-NLS-2$
-
-	/**
-	 * The name of the folder containing metadata information for the workspace.
-	 */
-	public static final String METADATA_FOLDER = ".metadata"; //$NON-NLS-1$
-
-	// Keep track of the archive that we browsed to last time
-	// the wizard was invoked.
-	private static String previouslyBrowsedArchive = ""; //$NON-NLS-1$
-
-	// Keep track of the directory that we browsed to last time
-	// the wizard was invoked.
-	private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$
-
-	private final static String STORE_ARCHIVE_SELECTED = "WizardProjectsImportPage.STORE_ARCHIVE_SELECTED"; //$NON-NLS-1$
-
-	private Text archivePathField;
-
-	private Button browseArchivesButton;
-
-	private Button browseDirectoriesButton;
-
-	List createdProjects;
-
-	private IStructuredSelection currentSelection;
-
-	private Text directoryPathField;
-
-	// The initial path to set
-	private String initialPath;
-
-	// The last time that the file or folder at the selected path was modified
-	// to mimize searches
-	private long lastModified;
-
-	// The last selected path to minimize searches
-	private String lastPath;
-
-	private Button projectFromArchiveRadio;
-
-	private Button projectFromDirectoryRadio;
-
-	private CheckboxTreeViewer projectsList;
-	private ProjectRecord[] selectedProjects = new ProjectRecord[0];
-
-	/**
-	 * The import structure provider.
-	 * 
-	 * @since 3.4
-	 */
-	private ILeveledImportStructureProvider structureProvider;
-
-	private WorkingSetGroup workingSetGroup;
-
-	private IProject[] wsProjects;
-
-	public AptanaProjectLocationWizardPage() {
-		super("projectlocation", "Import Aptana WRT Projects", null);
-		setDescription("Select location of the Aptana WRT projects");
-	}
-
-	private void addToWorkingSets() {
-
-		IWorkingSet[] selectedWorkingSets = workingSetGroup
-				.getSelectedWorkingSets();
-		if (selectedWorkingSets == null || selectedWorkingSets.length == 0) {
-            return; // no Working set is selected
-        }
-		IWorkingSetManager workingSetManager = PlatformUI.getWorkbench()
-				.getWorkingSetManager();
-		for (Iterator i = createdProjects.iterator(); i.hasNext();) {
-			IProject project = (IProject) i.next();
-			workingSetManager.addToWorkingSets(project, selectedWorkingSets);
-		}
-	}
-
-	private void archiveRadioSelected() {
-		if (projectFromArchiveRadio.getSelection()) {
-			directoryPathField.setEnabled(false);
-			browseDirectoriesButton.setEnabled(false);
-			archivePathField.setEnabled(true);
-			browseArchivesButton.setEnabled(true);
-			updateProjectsList(archivePathField.getText());
-			archivePathField.setFocus();
-		}
-	}
-
-	public List<IProject> getCreatedProjects() {
-		return createdProjects;
-	}
-	
-	/**
-	 * Collect the list of .project files that are under directory into files.
-	 * 
-	 * @param files
-	 * @param directory
-	 * @param directoriesVisited
-	 *            Set of canonical paths of directories, used as recursion guard
-	 * @param monitor
-	 *            The monitor to report to
-	 * @return boolean <code>true</code> if the operation was completed.
-	 */
-	private boolean collectProjectFilesFromDirectory(Collection files,
-			File directory, Set directoriesVisited, IProgressMonitor monitor) {
-
-		if (monitor.isCanceled()) {
-			return false;
-		}
-		monitor.subTask(NLS.bind(
-				DataTransferMessages.WizardProjectsImportPage_CheckingMessage,
-				directory.getPath()));
-		File[] contents = directory.listFiles();
-		if (contents == null) {
-            return false;
-        }
-
-		// Initialize recursion guard for recursive symbolic links
-		if (directoriesVisited == null) {
-			directoriesVisited = new HashSet();
-			try {
-				directoriesVisited.add(directory.getCanonicalPath());
-			} catch (IOException exception) {
-				StatusManager.getManager().handle(
-						StatusUtil.newStatus(IStatus.ERROR, exception
-								.getLocalizedMessage(), exception));
-			}
-		}
-
-		
-		File dotProjectFile = ProjectUtils.isAptanaProject(contents);
-		
-		if (dotProjectFile != null) {
-			files.add(dotProjectFile);
-			// don't search sub-directories since we can't have nested
-			// projects
-			return true;
-		}
-		// no project description found, so recurse into sub-directories
-		for (int i = 0; i < contents.length; i++) {
-			if (contents[i].isDirectory()) {
-				if (!contents[i].getName().equals(METADATA_FOLDER)) {
-					try {
-						String canonicalPath = contents[i].getCanonicalPath();
-						if (!directoriesVisited.add(canonicalPath)) {
-							// already been here --> do not recurse
-							continue;
-						}
-					} catch (IOException exception) {
-						StatusManager.getManager().handle(
-								StatusUtil.newStatus(IStatus.ERROR, exception
-										.getLocalizedMessage(), exception));
-
-					}
-					collectProjectFilesFromDirectory(files, contents[i],
-							directoriesVisited, monitor);
-				}
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Collect the list of .project files that are under directory into files.
-	 * 
-	 * @param files
-	 * @param monitor
-	 *            The monitor to report to
-	 * @return boolean <code>true</code> if the operation was completed.
-	 */
-	private boolean collectProjectFilesFromProvider(Collection files,
-			Object entry, int level, IProgressMonitor monitor) {
-
-		if (monitor.isCanceled()) {
-			return false;
-		}
-		monitor.subTask(NLS.bind(
-				DataTransferMessages.WizardProjectsImportPage_CheckingMessage,
-				structureProvider.getLabel(entry)));
-		List children = structureProvider.getChildren(entry);
-		if (children == null) {
-			children = new ArrayList(1);
-		}
-		Iterator childrenEnum = children.iterator();
-		boolean hasPreviewFolder = false;
-		boolean hasFrameHtml = false;
-		ProjectRecord projectRecord = null;
-		while (childrenEnum.hasNext()) {
-			Object child = childrenEnum.next();
-			String elementLabel = structureProvider.getLabel(child);
-			if (structureProvider.isFolder(child)) {
-				if (ProjectUtils.PREVIEW_FOLDER.equalsIgnoreCase(elementLabel)) {
-					hasPreviewFolder = true;
-				}
-				collectProjectFilesFromProvider(files, child, level + 1,
-						monitor);
-			}
-			if (elementLabel.equals(IProjectDescription.DESCRIPTION_FILE_NAME)) {
-                projectRecord = new ArchivedProject(child, entry, level, structureProvider);
-			}
-			if (ProjectUtils.PREVIEW_FRAME_FILE.equalsIgnoreCase(elementLabel)) {
-				hasFrameHtml = true;
-			}
-		}
-		if (projectRecord != null && hasPreviewFolder && hasFrameHtml) {
-			files.add(projectRecord);
-		}
-		return true;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
-	 * .Composite)
-	 */
-	public void createControl(Composite parent) {
-
-		initializeDialogUnits(parent);
-
-		Composite workArea = new Composite(parent, SWT.NONE);
-		setControl(workArea);
-
-		workArea.setLayout(new GridLayout());
-		workArea.setLayoutData(new GridData(GridData.FILL_BOTH
-				| GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
-
-		createProjectsRoot(workArea);
-		createProjectsList(workArea);
-		createWorkingSetGroup(workArea);
-		restoreWidgetValues();
-		Dialog.applyDialogFont(workArea);
-		
-		updateProjectsList(directoryPathField.getText().trim());
-	}
-
-	/**
-	 * Create the project described in record. If it is successful return true.
-	 * 
-	 * @param record
-	 * @return boolean <code>true</code> if successful
-	 * @throws InterruptedException
-	 */
-	private boolean createExistingProject(final ProjectRecord record,
-			IProgressMonitor monitor) throws InvocationTargetException,
-			InterruptedException {
-		monitor.beginTask(MessageFormat.format("Creating {0}", record
-				.getProjectName()), IProgressMonitor.UNKNOWN);
-
-		try {
-			IProject project = ProjectUtils.createWrtProject(record
-					.getProjectName(), null,
-					new SubProgressMonitor(monitor, 10));
-			createdProjects.add(project);
-            ImportOperation operation = record.getImportOperation(project, structureProvider, this);
-            if (operation != null) {
-                operation.setContext(getShell());
-                operation.run(monitor);
-            }
-			return true;
-		} catch (CoreException e) {
-			Activator.log(e);
-			return false;
-		} finally {
-			monitor.done();
-		}
-	}
-
-	/**
-	 * Create the selected projects
-	 * 
-	 * @return boolean <code>true</code> if all project creations were
-	 *         successful.
-	 */
-	public boolean createProjects() {
-		saveWidgetValues();
-
-		final Object[] selected = projectsList.getCheckedElements();
-		createdProjects = new ArrayList();
-		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
-			protected void execute(IProgressMonitor monitor)
-					throws InvocationTargetException, InterruptedException {
-				try {
-					monitor.beginTask("", selected.length); 
-					if (monitor.isCanceled()) {
-						throw new OperationCanceledException();
-					}
-					for (int i = 0; i < selected.length; i++) {
-						createExistingProject((ProjectRecord) selected[i],
-								new SubProgressMonitor(monitor, 1));
-					}
-				} finally {
-					monitor.done();
-				}
-			}
-		};
-		// run the new project creation operation
-		try {
-			getContainer().run(true, true, op);
-		} catch (InterruptedException e) {
-			return false;
-		} catch (InvocationTargetException e) {
-			// one of the steps resulted in a core exception
-			Throwable t = e.getTargetException();
-			String message = DataTransferMessages.WizardExternalProjectImportPage_errorMessage;
-			IStatus status;
-			if (t instanceof CoreException) {
-				status = ((CoreException) t).getStatus();
-			} else {
-				status = new Status(IStatus.ERROR,
- Activator.PLUGIN_ID, 1, message, t);
-			}
-			ErrorDialog.openError(getShell(), message, null, status);
-			return false;
-		}
-		ArchiveFileManipulations.closeStructureProvider(structureProvider,
-				getShell());
-
-		// Adds the projects to the working sets
-		addToWorkingSets();
-
-		return true;
-	}
-
-	/**
-	 * Create the checkbox list for the found projects.
-	 * 
-	 * @param workArea
-	 */
-	private void createProjectsList(Composite workArea) {
-
-		Label title = new Label(workArea, SWT.NONE);
-		title
-				.setText(DataTransferMessages.WizardProjectsImportPage_ProjectsListTitle);
-
-		Composite listComposite = new Composite(workArea, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 2;
-		layout.marginWidth = 0;
-		layout.makeColumnsEqualWidth = false;
-		listComposite.setLayout(layout);
-
-		listComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
-				| GridData.GRAB_VERTICAL | GridData.FILL_BOTH));
-
-		projectsList = new CheckboxTreeViewer(listComposite, SWT.BORDER);
-		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
-		gridData.widthHint = new PixelConverter(projectsList.getControl())
-				.convertWidthInCharsToPixels(25);
-		gridData.heightHint = new PixelConverter(projectsList.getControl())
-				.convertHeightInCharsToPixels(10);
-		projectsList.getControl().setLayoutData(gridData);
-		projectsList.setContentProvider(new ITreeContentProvider() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-			 */
-			public void dispose() {
-
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java
-			 * .lang.Object)
-			 */
-			public Object[] getChildren(Object parentElement) {
-				return null;
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.jface.viewers.IStructuredContentProvider#getElements
-			 * (java.lang.Object)
-			 */
-			public Object[] getElements(Object inputElement) {
-				return getProjectRecords();
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.jface.viewers.ITreeContentProvider#getParent(java
-			 * .lang.Object)
-			 */
-			public Object getParent(Object element) {
-				return null;
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java
-			 * .lang.Object)
-			 */
-			public boolean hasChildren(Object element) {
-				return false;
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse
-			 * .jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput,
-					Object newInput) {
-			}
-
-		});
-
-		projectsList.setLabelProvider(new ProjectLabelProvider());
-
-		projectsList.addCheckStateListener(new ICheckStateListener() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged
-			 * (org.eclipse.jface.viewers.CheckStateChangedEvent)
-			 */
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				ProjectRecord element = (ProjectRecord) event.getElement();
-                if (element.hasConflicts()) {
-					projectsList.setChecked(element, false);
-				}
-				setPageComplete(projectsList.getCheckedElements().length > 0);
-			}
-		});
-
-		projectsList.setInput(this);
-		projectsList.setComparator(new ViewerComparator());
-		createSelectionButtons(listComposite);
-	}
-
-	/**
-	 * Create the area where you select the root directory for the projects.
-	 * 
-	 * @param workArea
-	 *            Composite
-	 */
-	private void createProjectsRoot(Composite workArea) {
-
-		// project specification group
-		Composite projectGroup = new Composite(workArea, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 3;
-		layout.makeColumnsEqualWidth = false;
-		layout.marginWidth = 0;
-		projectGroup.setLayout(layout);
-		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		// new project from directory radio button
-		projectFromDirectoryRadio = new Button(projectGroup, SWT.RADIO);
-		projectFromDirectoryRadio
-				.setText(DataTransferMessages.WizardProjectsImportPage_RootSelectTitle);
-
-		// project location entry field
-		this.directoryPathField = new Text(projectGroup, SWT.BORDER);
-
-		GridData directoryPathData = new GridData(SWT.FILL, SWT.NONE, true,
-				false);
-		directoryPathData.widthHint = new PixelConverter(directoryPathField)
-				.convertWidthInCharsToPixels(25);
-		directoryPathField.setLayoutData(directoryPathData);
-
-		directoryPathField.setText(ProjectUtils.getDefaultAptanaLocation());
-		
-		// browse button
-		browseDirectoriesButton = new Button(projectGroup, SWT.PUSH);
-		browseDirectoriesButton
-				.setText(DataTransferMessages.DataTransfer_browse);
-		setButtonLayoutData(browseDirectoriesButton);
-
-		// new project from archive radio button
-		projectFromArchiveRadio = new Button(projectGroup, SWT.RADIO);
-		projectFromArchiveRadio
-				.setText(DataTransferMessages.WizardProjectsImportPage_ArchiveSelectTitle);
-
-		// project location entry field
-		archivePathField = new Text(projectGroup, SWT.BORDER);
-
-		GridData archivePathData = new GridData(SWT.FILL, SWT.NONE, true, false);
-		archivePathData.widthHint = new PixelConverter(archivePathField)
-				.convertWidthInCharsToPixels(25);
-		archivePathField.setLayoutData(archivePathData); // browse button
-		browseArchivesButton = new Button(projectGroup, SWT.PUSH);
-		browseArchivesButton.setText(DataTransferMessages.DataTransfer_browse);
-		setButtonLayoutData(browseArchivesButton);
-
-		projectFromDirectoryRadio.setSelection(true);
-		archivePathField.setEnabled(false);
-		browseArchivesButton.setEnabled(false);
-
-		browseDirectoriesButton.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetS
-			 * elected(org.eclipse.swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				handleLocationDirectoryButtonPressed();
-			}
-
-		});
-
-		browseArchivesButton.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
-			 * .swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				handleLocationArchiveButtonPressed();
-			}
-
-		});
-
-		directoryPathField.addTraverseListener(new TraverseListener() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.TraverseListener#keyTraversed(org.eclipse
-			 * .swt.events.TraverseEvent)
-			 */
-			public void keyTraversed(TraverseEvent e) {
-				if (e.detail == SWT.TRAVERSE_RETURN) {
-					e.doit = false;
-					updateProjectsList(directoryPathField.getText().trim());
-				}
-			}
-
-		});
-
-		directoryPathField.addFocusListener(new FocusAdapter() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt
-			 * .events.FocusEvent)
-			 */
-			public void focusLost(org.eclipse.swt.events.FocusEvent e) {
-				updateProjectsList(directoryPathField.getText().trim());
-			}
-
-		});
-
-		archivePathField.addTraverseListener(new TraverseListener() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.TraverseListener#keyTraversed(org.eclipse
-			 * .swt.events.TraverseEvent)
-			 */
-			public void keyTraversed(TraverseEvent e) {
-				if (e.detail == SWT.TRAVERSE_RETURN) {
-					e.doit = false;
-					updateProjectsList(archivePathField.getText().trim());
-				}
-			}
-
-		});
-
-		archivePathField.addFocusListener(new FocusAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt
-			 * .events.FocusEvent)
-			 */
-			public void focusLost(org.eclipse.swt.events.FocusEvent e) {
-				updateProjectsList(archivePathField.getText().trim());
-			}
-		});
-
-		projectFromDirectoryRadio.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse
-			 * .swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				directoryRadioSelected();
-			}
-		});
-
-		projectFromArchiveRadio.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse
-			 * .swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				archiveRadioSelected();
-			}
-		});
-	}
-
-	/**
-	 * Create the selection buttons in the listComposite.
-	 * 
-	 * @param listComposite
-	 */
-	private void createSelectionButtons(Composite listComposite) {
-		Composite buttonsComposite = new Composite(listComposite, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		buttonsComposite.setLayout(layout);
-
-		buttonsComposite.setLayoutData(new GridData(
-				GridData.VERTICAL_ALIGN_BEGINNING));
-
-		Button selectAll = new Button(buttonsComposite, SWT.PUSH);
-		selectAll.setText(DataTransferMessages.DataTransfer_selectAll);
-		selectAll.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				for (int i = 0; i < selectedProjects.length; i++) {
-                    if (selectedProjects[i].hasConflicts()) {
-                        projectsList.setChecked(selectedProjects[i], false);
-                    } else {
-                        projectsList.setChecked(selectedProjects[i], true);
-                    }
-				}
-				setPageComplete(projectsList.getCheckedElements().length > 0);
-			}
-		});
-		Dialog.applyDialogFont(selectAll);
-		setButtonLayoutData(selectAll);
-
-		Button deselectAll = new Button(buttonsComposite, SWT.PUSH);
-		deselectAll.setText(DataTransferMessages.DataTransfer_deselectAll);
-		deselectAll.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
-			 * .swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-
-				projectsList.setCheckedElements(new Object[0]);
-				setPageComplete(false);
-			}
-		});
-		Dialog.applyDialogFont(deselectAll);
-		setButtonLayoutData(deselectAll);
-
-		Button refresh = new Button(buttonsComposite, SWT.PUSH);
-		refresh.setText(DataTransferMessages.DataTransfer_refresh);
-		refresh.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see
-			 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
-			 * .swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				if (projectFromDirectoryRadio.getSelection()) {
-					updateProjectsList(directoryPathField.getText().trim());
-				} else {
-					updateProjectsList(archivePathField.getText().trim());
-				}
-			}
-		});
-		Dialog.applyDialogFont(refresh);
-		setButtonLayoutData(refresh);
-	}
-
-	/**
-	 * @param workArea
-	 */
-	private void createWorkingSetGroup(Composite workArea) {
-		String[] workingSetIds = new String[] {
-				"org.eclipse.ui.resourceWorkingSetPage", //$NON-NLS-1$
-				"org.eclipse.jdt.ui.JavaWorkingSetPage" }; //$NON-NLS-1$
-		workingSetGroup = new WorkingSetGroup(workArea, currentSelection,
-				workingSetIds);
-	}
-
-	private void directoryRadioSelected() {
-		if (projectFromDirectoryRadio.getSelection()) {
-			directoryPathField.setEnabled(true);
-			browseDirectoriesButton.setEnabled(true);
-			archivePathField.setEnabled(false);
-			browseArchivesButton.setEnabled(false);
-			updateProjectsList(directoryPathField.getText());
-			directoryPathField.setFocus();
-		}
-	}
-
-	/**
-	 * Display an error dialog with the specified message.
-	 * 
-	 * @param message
-	 *            the error message
-	 */
-	protected void displayErrorDialog(String message) {
-		MessageDialog.open(MessageDialog.ERROR, getContainer().getShell(),
-				getErrorDialogTitle(), message, SWT.SHEET);
-	}
-
-	/**
-	 * Get the title for an error dialog. Subclasses should override.
-	 */
-	protected String getErrorDialogTitle() {
-		return IDEWorkbenchMessages.WizardExportPage_internalErrorTitle;
-	}
-
-	/**
-	 * Method used for test suite.
-	 * 
-	 * @return Button the Import from Directory RadioButton
-	 */
-	public Button getProjectFromDirectoryRadio() {
-		return projectFromDirectoryRadio;
-	}
-
-	/**
-	 * Get the array of project records that can be imported from the source
-	 * workspace or archive, selected by the user. If a project with the same
-	 * name exists in both the source workspace and the current workspace, then
-	 * the hasConflicts flag would be set on that project record.
-	 * 
-	 * Method declared public for test suite.
-	 * 
-	 * @return ProjectRecord[] array of projects that can be imported into the
-	 *         workspace
-	 */
-	public ProjectRecord[] getProjectRecords() {
-		List projectRecords = new ArrayList();
-		for (int i = 0; i < selectedProjects.length; i++) {
-            if (isProjectInWorkspace(selectedProjects[i].getProjectName())) {
-                selectedProjects[i].setHasConflicts(true);
-			}
-			projectRecords.add(selectedProjects[i]);
-		}
-		return (ProjectRecord[]) projectRecords
-				.toArray(new ProjectRecord[projectRecords.size()]);
-	}
-
-	/**
-	 * Retrieve all the projects in the current workspace.
-	 * 
-	 * @return IProject[] array of IProject in the current workspace
-	 */
-	private IProject[] getProjectsInWorkspace() {
-		if (wsProjects == null) {
-            wsProjects = ResourcesPlugin.getWorkspace().getRoot()
-					.getProjects();
-		}
-		return wsProjects;
-	}
-
-	/**
-	 * Method used for test suite.
-	 * 
-	 * @return CheckboxTreeViewer the viewer containing all the projects found
-	 */
-	public CheckboxTreeViewer getProjectsList() {
-		return projectsList;
-	}
-
-	/**
-	 * Answer a handle to the zip file currently specified as being the source.
-	 * Return null if this file does not exist or is not of valid format.
-	 */
-	private TarFile getSpecifiedTarSourceFile(String fileName) {
-		if (fileName.length() == 0) {
-			return null;
-		}
-
-		try {
-			return new TarFile(fileName);
-		} catch (TarException e) {
-			displayErrorDialog(DataTransferMessages.TarImport_badFormat);
-		} catch (IOException e) {
-			displayErrorDialog(DataTransferMessages.ZipImport_couldNotRead);
-		}
-
-		archivePathField.setFocus();
-		return null;
-	}
-
-	/**
-	 * Answer a handle to the zip file currently specified as being the source.
-	 * Return null if this file does not exist or is not of valid format.
-	 */
-	private ZipFile getSpecifiedZipSourceFile(String fileName) {
-		if (fileName.length() == 0) {
-			return null;
-		}
-
-		try {
-			return new ZipFile(fileName);
-		} catch (ZipException e) {
-			displayErrorDialog(DataTransferMessages.ZipImport_badFormat);
-		} catch (IOException e) {
-			displayErrorDialog(DataTransferMessages.ZipImport_couldNotRead);
-		}
-
-		archivePathField.setFocus();
-		return null;
-	}
-
-	/**
-	 * The browse button has been selected. Select the location.
-	 */
-	protected void handleLocationArchiveButtonPressed() {
-
-		FileDialog dialog = new FileDialog(archivePathField.getShell(),
-				SWT.SHEET);
-		dialog.setFilterExtensions(FILE_IMPORT_MASK);
-		dialog
-				.setText(DataTransferMessages.WizardProjectsImportPage_SelectArchiveDialogTitle);
-
-		String fileName = archivePathField.getText().trim();
-		if (fileName.length() == 0) {
-			fileName = previouslyBrowsedArchive;
-		}
-
-		if (fileName.length() == 0) {
-            dialog.setFilterPath(ResourcesPlugin.getWorkspace()
-					.getRoot().getLocation().toOSString());
-		} else {
-			File path = new File(fileName).getParentFile();
-			if (path != null && path.exists()) {
-				dialog.setFilterPath(path.toString());
-			}
-		}
-
-		String selectedArchive = dialog.open();
-		if (selectedArchive != null) {
-			previouslyBrowsedArchive = selectedArchive;
-			archivePathField.setText(previouslyBrowsedArchive);
-			updateProjectsList(selectedArchive);
-		}
-
-	}
-
-	/**
-	 * The browse button has been selected. Select the location.
-	 */
-	protected void handleLocationDirectoryButtonPressed() {
-
-		DirectoryDialog dialog = new DirectoryDialog(directoryPathField
-				.getShell(), SWT.SHEET);
-		dialog
-				.setMessage(DataTransferMessages.WizardProjectsImportPage_SelectDialogTitle);
-
-		String dirName = directoryPathField.getText().trim();
-		if (dirName.length() == 0) {
-			dirName = previouslyBrowsedDirectory;
-		}
-
-		if (dirName.length() == 0) {
-            dialog.setFilterPath(ResourcesPlugin.getWorkspace()
-					.getRoot().getLocation().toOSString());
-		} else {
-			File path = new File(dirName);
-			if (path.exists()) {
-				dialog.setFilterPath(new Path(dirName).toOSString());
-			}
-		}
-
-		String selectedDirectory = dialog.open();
-		if (selectedDirectory != null) {
-			previouslyBrowsedDirectory = selectedDirectory;
-			directoryPathField.setText(previouslyBrowsedDirectory);
-			updateProjectsList(selectedDirectory);
-		}
-
-	}
-
-	/**
-	 * Determine if the project with the given name is in the current workspace.
-	 * 
-	 * @param projectName
-	 *            String the project name to check
-	 * @return boolean true if the project with the given name is in this
-	 *         workspace
-	 */
-	private boolean isProjectInWorkspace(String projectName) {
-		if (projectName == null) {
-			return false;
-		}
-		IProject[] workspaceProjects = getProjectsInWorkspace();
-		for (int i = 0; i < workspaceProjects.length; i++) {
-			if (projectName.equals(workspaceProjects[i].getName())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Performs clean-up if the user cancels the wizard without doing anything
-	 */
-	public void performCancel() {
-		ArchiveFileManipulations.closeStructureProvider(structureProvider,
-				getShell());
-	}
-
-	/**
-	 * The <code>WizardDataTransfer</code> implementation of this
-	 * <code>IOverwriteQuery</code> method asks the user whether the existing
-	 * resource at the given path should be overwritten.
-	 * 
-	 * @param pathString
-	 * @return the user's reply: one of <code>"YES"</code>, <code>"NO"</code>,
-	 *         <code>"ALL"</code>, or <code>"CANCEL"</code>
-	 */
-	public String queryOverwrite(String pathString) {
-
-		Path path = new Path(pathString);
-
-		String messageString;
-		// Break the message up if there is a file name and a directory
-		// and there are at least 2 segments.
-		if (path.getFileExtension() == null || path.segmentCount() < 2) {
-			messageString = NLS.bind(
-					IDEWorkbenchMessages.WizardDataTransfer_existsQuestion,
-					pathString);
-		} else {
-			messageString = NLS
-					.bind(
-							IDEWorkbenchMessages.WizardDataTransfer_overwriteNameAndPathQuestion,
-							path.lastSegment(), path.removeLastSegments(1)
-									.toOSString());
-		}
-
-		final MessageDialog dialog = new MessageDialog(getContainer()
-				.getShell(), IDEWorkbenchMessages.Question, null,
-				messageString, MessageDialog.QUESTION, new String[] {
-						IDialogConstants.YES_LABEL,
-						IDialogConstants.YES_TO_ALL_LABEL,
-						IDialogConstants.NO_LABEL,
-						IDialogConstants.NO_TO_ALL_LABEL,
-						IDialogConstants.CANCEL_LABEL }, 0) {
-			protected int getShellStyle() {
-				return super.getShellStyle() | SWT.SHEET;
-			}
-		};
-		String[] response = new String[] { YES, ALL, NO, NO_ALL, CANCEL };
-		// run in syncExec because callback is from an operation,
-		// which is probably not running in the UI thread.
-		getControl().getDisplay().syncExec(new Runnable() {
-			public void run() {
-				dialog.open();
-			}
-		});
-		return dialog.getReturnCode() < 0 ? CANCEL : response[dialog
-				.getReturnCode()];
-	}
-
-	/**
-	 * Use the dialog store to restore widget values to the values that they
-	 * held last time this wizard was used to completion, or alternatively, if
-	 * an initial path is specified, use it to select values.
-	 * 
-	 * Method declared public only for use of tests.
-	 */
-	public void restoreWidgetValues() {
-
-		// First, check to see if we have resore settings, and
-		// take care of the checkbox
-		IDialogSettings settings = getDialogSettings();
-
-		// Second, check to see if we don't have an initial path,
-		// and if we do have restore settings. If so, set the
-		// radio selection properly to restore settings
-
-		if (initialPath == null && settings != null) {
-			// radio selection
-			boolean archiveSelected = settings
-					.getBoolean(STORE_ARCHIVE_SELECTED);
-			projectFromDirectoryRadio.setSelection(!archiveSelected);
-			projectFromArchiveRadio.setSelection(archiveSelected);
-			if (archiveSelected) {
-				archiveRadioSelected();
-			} else {
-				directoryRadioSelected();
-			}
-		}
-		// Third, if we do have an initial path, set the proper
-		// path and radio buttons to the initial value. Move
-		// cursor to the end of the path so user can see the
-		// most relevant part (directory / archive name)
-		else if (initialPath != null) {
-			boolean dir = new File(initialPath).isDirectory();
-
-			projectFromDirectoryRadio.setSelection(dir);
-			projectFromArchiveRadio.setSelection(!dir);
-
-			if (dir) {
-				directoryPathField.setText(initialPath);
-				directoryPathField.setSelection(initialPath.length());
-				directoryRadioSelected();
-			} else {
-				archivePathField.setText(initialPath);
-				archivePathField.setSelection(initialPath.length());
-				archiveRadioSelected();
-			}
-		}
-	}
-
-	/**
-	 * Since Finish was pressed, write widget values to the dialog store so that
-	 * they will persist into the next invocation of this wizard page.
-	 * 
-	 * Method declared public only for use of tests.
-	 */
-	public void saveWidgetValues() {
-		IDialogSettings settings = getDialogSettings();
-		if (settings != null) {
-			settings.put(STORE_ARCHIVE_SELECTED, projectFromArchiveRadio
-					.getSelection());
-		}
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on IDialogPage. Set the focus on path
-	 * fields when page becomes visible.
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible && this.projectFromDirectoryRadio.getSelection()) {
-			this.directoryPathField.setFocus();
-		}
-		if (visible && this.projectFromArchiveRadio.getSelection()) {
-			this.archivePathField.setFocus();
-		}
-	}
-
-	/**
-	 * Update the list of projects based on path. Method declared public only
-	 * for test suite.
-	 * 
-	 * @param path
-	 */
-	public void updateProjectsList(final String path) {
-		// on an empty path empty selectedProjects
-		if (path == null || path.length() == 0) {
-			setMessage(DataTransferMessages.WizardProjectsImportPage_ImportProjectsDescription);
-			selectedProjects = new ProjectRecord[0];
-			projectsList.refresh(true);
-			projectsList.setCheckedElements(selectedProjects);
-			setPageComplete(projectsList.getCheckedElements().length > 0);
-			lastPath = path;
-			return;
-		}
-
-		final File directory = new File(path);
-		long modified = directory.lastModified();
-		if (path.equals(lastPath) && lastModified == modified) {
-			// since the file/folder was not modified and the path did not
-			// change, no refreshing is required
-			return;
-		}
-
-		lastPath = path;
-		lastModified = modified;
-
-		// We can't access the radio button from the inner class so get the
-		// status beforehand
-		final boolean dirSelected = this.projectFromDirectoryRadio
-				.getSelection();
-		try {
-			getContainer().run(true, true, new IRunnableWithProgress() {
-
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see
-				 * org.eclipse.jface.operation.IRunnableWithProgress#run(org
-				 * .eclipse.core.runtime.IProgressMonitor)
-				 */
-				public void run(IProgressMonitor monitor) {
-
-					monitor
-							.beginTask(
-									DataTransferMessages.WizardProjectsImportPage_SearchingMessage,
-									100);
-					selectedProjects = new ProjectRecord[0];
-					Collection files = new ArrayList();
-					monitor.worked(10);
-					if (!dirSelected
-							&& ArchiveFileManipulations.isTarFile(path)) {
-						TarFile sourceTarFile = getSpecifiedTarSourceFile(path);
-						if (sourceTarFile == null) {
-							return;
-						}
-
-						structureProvider = new TarLeveledStructureProvider(
-								sourceTarFile);
-						Object child = structureProvider.getRoot();
-
-						if (!collectProjectFilesFromProvider(files, child, 0,
-								monitor)) {
-							return;
-						}
-						Iterator filesIterator = files.iterator();
-						selectedProjects = new ProjectRecord[files.size()];
-						int index = 0;
-						monitor.worked(50);
-						monitor
-								.subTask(DataTransferMessages.WizardProjectsImportPage_ProcessingMessage);
-						while (filesIterator.hasNext()) {
-							selectedProjects[index++] = (ProjectRecord) filesIterator
-									.next();
-						}
-					} else if (!dirSelected
-							&& ArchiveFileManipulations.isZipFile(path)) {
-						ZipFile sourceFile = getSpecifiedZipSourceFile(path);
-						if (sourceFile == null) {
-							return;
-						}
-						structureProvider = new ZipLeveledStructureProvider(
-								sourceFile);
-						Object child = structureProvider.getRoot();
-
-						if (!collectProjectFilesFromProvider(files, child, 0,
-								monitor)) {
-							return;
-						}
-						Iterator filesIterator = files.iterator();
-						selectedProjects = new ProjectRecord[files.size()];
-						int index = 0;
-						monitor.worked(50);
-						monitor
-								.subTask(DataTransferMessages.WizardProjectsImportPage_ProcessingMessage);
-						while (filesIterator.hasNext()) {
-							selectedProjects[index++] = (ProjectRecord) filesIterator
-									.next();
-						}
-					}
-
-					else if (dirSelected && directory.isDirectory()) {
-
-						if (!collectProjectFilesFromDirectory(files, directory,
-								null, monitor)) {
-							return;
-						}
-						Iterator filesIterator = files.iterator();
-						selectedProjects = new ProjectRecord[files.size()];
-						int index = 0;
-						monitor.worked(50);
-						monitor
-								.subTask(DataTransferMessages.WizardProjectsImportPage_ProcessingMessage);
-						while (filesIterator.hasNext()) {
-							File file = (File) filesIterator.next();
-                            selectedProjects[index] = new FileSystemProject(file);
-							index++;
-						}
-					} else {
-						monitor.worked(60);
-					}
-					monitor.done();
-				}
-
-			});
-		} catch (InvocationTargetException e) {
-            Activator.log(e.getMessage(), e);
-		} catch (InterruptedException e) {
-			// Nothing to do if the user interrupts.
-		}
-
-		projectsList.refresh(true);
-		ProjectRecord[] projects = getProjectRecords();
-		boolean displayWarning = false;
-		for (int i = 0; i < projects.length; i++) {
-            if (projects[i].hasConflicts()) {
-				displayWarning = true;
-				projectsList.setGrayed(projects[i], true);
-			} else {
-				projectsList.setChecked(projects[i], true);
-			}
-		}
-
-		if (displayWarning) {
-			setMessage(
-					DataTransferMessages.WizardProjectsImportPage_projectsInWorkspace,
-					WARNING);
-		} else {
-			setMessage(DataTransferMessages.WizardProjectsImportPage_ImportProjectsDescription);
-		}
-		setPageComplete(projectsList.getCheckedElements().length > 0);
-		if (selectedProjects.length == 0) {
-			setMessage(
-					DataTransferMessages.WizardProjectsImportPage_noProjectsToImport,
-					WARNING);
-		}
-	}
-}
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/AptanaProjectsImportWizard.java	Thu Feb 25 14:30:54 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/**
- * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the License "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Symbian Foundation - initial contribution.
- * Contributors:
- * Description:
- * Overview:
- * Details:
- * Platforms/Drives/Compatibility:
- * Assumptions/Requirement/Pre-requisites:
- * Failures and causes:
- */
-package org.symbian.tools.wrttools.wizards.projectimport;
-
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExecutableExtension;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.ui.IImportWizard;
-import org.eclipse.ui.INewWizard;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
-import org.symbian.tools.wrttools.util.ProjectUtils;
-
-public class AptanaProjectsImportWizard extends Wizard implements
-		IImportWizard, INewWizard, IExecutableExtension {
-
-	private AptanaProjectLocationWizardPage mainPage;
-	private IConfigurationElement config;
-
-	public AptanaProjectsImportWizard() {
-		setWindowTitle("Import Aptana Project");
-		setNeedsProgressMonitor(true);
-	}
-
-	@Override
-	public boolean performCancel() {
-		mainPage.performCancel();
-		return true;
-	}
-
-	@Override
-	public boolean performFinish() {
-		if (mainPage.createProjects()) {
-			BasicNewProjectResourceWizard.updatePerspective(config);
-			List<IProject> projects = mainPage.getCreatedProjects();
-				ProjectUtils.focusOn(projects.toArray(new IProject[projects.size()]));
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	@Override
-	public void addPages() {
-		mainPage = new AptanaProjectLocationWizardPage();
-		addPage(mainPage);
-	}
-
-	public void init(IWorkbench workbench, IStructuredSelection selection) {
-		// Do nothing
-	}
-
-	public void setInitializationData(IConfigurationElement config,
-			String propertyName, Object data) throws CoreException {
-		this.config = config;
-	}
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/WrtProjectLocationWizardPage.java	Thu Feb 25 14:58:22 2010 -0800
@@ -0,0 +1,1346 @@
+/**
+ * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Symbian Foundation - initial contribution.
+ * Contributors:
+ * Description:
+ * Overview:
+ * Details:
+ * Platforms/Drives/Compatibility:
+ * Assumptions/Requirement/Pre-requisites:
+ * Failures and causes:
+ */
+package org.symbian.tools.wrttools.wizards.projectimport;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkingSet;
+import org.eclipse.ui.IWorkingSetManager;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.IOverwriteQuery;
+import org.eclipse.ui.dialogs.WorkingSetGroup;
+import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
+import org.eclipse.ui.internal.ide.StatusUtil;
+import org.eclipse.ui.internal.wizards.datatransfer.ArchiveFileManipulations;
+import org.eclipse.ui.internal.wizards.datatransfer.DataTransferMessages;
+import org.eclipse.ui.internal.wizards.datatransfer.ILeveledImportStructureProvider;
+import org.eclipse.ui.internal.wizards.datatransfer.TarException;
+import org.eclipse.ui.internal.wizards.datatransfer.TarFile;
+import org.eclipse.ui.internal.wizards.datatransfer.TarLeveledStructureProvider;
+import org.eclipse.ui.internal.wizards.datatransfer.ZipLeveledStructureProvider;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.ui.wizards.datatransfer.ImportOperation;
+import org.symbian.tools.wrttools.Activator;
+import org.symbian.tools.wrttools.util.ProjectUtils;
+
+@SuppressWarnings({"restriction", "unchecked"})
+public class WrtProjectLocationWizardPage extends WizardPage implements
+		IOverwriteQuery {
+
+	/**
+	 * @since 3.5
+	 * 
+	 */
+	private final class ProjectLabelProvider extends LabelProvider implements
+			IColorProvider {
+
+		public Color getBackground(Object element) {
+			return null;
+		}
+
+		public Color getForeground(Object element) {
+			ProjectRecord projectRecord = (ProjectRecord) element;
+            if (projectRecord.hasConflicts()) {
+                return getShell().getDisplay().getSystemColor(SWT.COLOR_GRAY);
+            }
+			return null;
+		}
+
+		public String getText(Object element) {
+			return ((ProjectRecord) element).getProjectLabel();
+		}
+	}
+
+	// constant from WizardArchiveFileResourceImportPage1
+	private static final String[] FILE_IMPORT_MASK = {
+			"*.jar;*.zip;*.tar;*.tar.gz;*.tgz", "*.*" }; //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The name of the folder containing metadata information for the workspace.
+	 */
+	public static final String METADATA_FOLDER = ".metadata"; //$NON-NLS-1$
+
+	// Keep track of the archive that we browsed to last time
+	// the wizard was invoked.
+	private static String previouslyBrowsedArchive = ""; //$NON-NLS-1$
+
+	// Keep track of the directory that we browsed to last time
+	// the wizard was invoked.
+	private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$
+
+	private final static String STORE_ARCHIVE_SELECTED = "WizardProjectsImportPage.STORE_ARCHIVE_SELECTED"; //$NON-NLS-1$
+
+	private Text archivePathField;
+
+	private Button browseArchivesButton;
+
+	private Button browseDirectoriesButton;
+
+	List createdProjects;
+
+	private IStructuredSelection currentSelection;
+
+	private Text directoryPathField;
+
+	// The initial path to set
+	private String initialPath;
+
+	// The last time that the file or folder at the selected path was modified
+	// to mimize searches
+	private long lastModified;
+
+	// The last selected path to minimize searches
+	private String lastPath;
+
+	private Button projectFromArchiveRadio;
+
+	private Button projectFromDirectoryRadio;
+
+	private CheckboxTreeViewer projectsList;
+	private ProjectRecord[] selectedProjects = new ProjectRecord[0];
+
+	/**
+	 * The import structure provider.
+	 * 
+	 * @since 3.4
+	 */
+	private ILeveledImportStructureProvider structureProvider;
+
+	private WorkingSetGroup workingSetGroup;
+
+	private IProject[] wsProjects;
+
+    public WrtProjectLocationWizardPage() {
+        super("projectlocation", "Import WRT Projects", null);
+        setDescription("Import existing WRT project created in any IDEs");
+	}
+
+	private void addToWorkingSets() {
+
+		IWorkingSet[] selectedWorkingSets = workingSetGroup
+				.getSelectedWorkingSets();
+		if (selectedWorkingSets == null || selectedWorkingSets.length == 0) {
+            return; // no Working set is selected
+        }
+		IWorkingSetManager workingSetManager = PlatformUI.getWorkbench()
+				.getWorkingSetManager();
+		for (Iterator i = createdProjects.iterator(); i.hasNext();) {
+			IProject project = (IProject) i.next();
+			workingSetManager.addToWorkingSets(project, selectedWorkingSets);
+		}
+	}
+
+	private void archiveRadioSelected() {
+		if (projectFromArchiveRadio.getSelection()) {
+			directoryPathField.setEnabled(false);
+			browseDirectoriesButton.setEnabled(false);
+			archivePathField.setEnabled(true);
+			browseArchivesButton.setEnabled(true);
+			updateProjectsList(archivePathField.getText());
+			archivePathField.setFocus();
+		}
+	}
+
+	public List<IProject> getCreatedProjects() {
+		return createdProjects;
+	}
+	
+	/**
+	 * Collect the list of .project files that are under directory into files.
+	 * 
+	 * @param files
+	 * @param directory
+	 * @param directoriesVisited
+	 *            Set of canonical paths of directories, used as recursion guard
+	 * @param monitor
+	 *            The monitor to report to
+	 * @return boolean <code>true</code> if the operation was completed.
+	 */
+	private boolean collectProjectFilesFromDirectory(Collection files,
+			File directory, Set directoriesVisited, IProgressMonitor monitor) {
+
+		if (monitor.isCanceled()) {
+			return false;
+		}
+		monitor.subTask(NLS.bind(
+				DataTransferMessages.WizardProjectsImportPage_CheckingMessage,
+				directory.getPath()));
+		File[] contents = directory.listFiles();
+		if (contents == null) {
+            return false;
+        }
+
+		// Initialize recursion guard for recursive symbolic links
+		if (directoriesVisited == null) {
+			directoriesVisited = new HashSet();
+			try {
+				directoriesVisited.add(directory.getCanonicalPath());
+			} catch (IOException exception) {
+				StatusManager.getManager().handle(
+						StatusUtil.newStatus(IStatus.ERROR, exception
+								.getLocalizedMessage(), exception));
+			}
+		}
+
+		
+		File dotProjectFile = ProjectUtils.isWrtProject(contents);
+		
+		if (dotProjectFile != null) {
+			files.add(dotProjectFile);
+			// don't search sub-directories since we can't have nested
+			// projects
+			return true;
+		}
+		// no project description found, so recurse into sub-directories
+		for (int i = 0; i < contents.length; i++) {
+			if (contents[i].isDirectory()) {
+				if (!contents[i].getName().equals(METADATA_FOLDER)) {
+					try {
+						String canonicalPath = contents[i].getCanonicalPath();
+						if (!directoriesVisited.add(canonicalPath)) {
+							// already been here --> do not recurse
+							continue;
+						}
+					} catch (IOException exception) {
+						StatusManager.getManager().handle(
+								StatusUtil.newStatus(IStatus.ERROR, exception
+										.getLocalizedMessage(), exception));
+
+					}
+					collectProjectFilesFromDirectory(files, contents[i],
+							directoriesVisited, monitor);
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Collect the list of .project files that are under directory into files.
+	 * 
+	 * @param files
+	 * @param monitor
+	 *            The monitor to report to
+	 * @return boolean <code>true</code> if the operation was completed.
+	 */
+	private boolean collectProjectFilesFromProvider(Collection files,
+			Object entry, int level, IProgressMonitor monitor) {
+
+		if (monitor.isCanceled()) {
+			return false;
+		}
+		monitor.subTask(NLS.bind(
+				DataTransferMessages.WizardProjectsImportPage_CheckingMessage,
+				structureProvider.getLabel(entry)));
+		List children = structureProvider.getChildren(entry);
+		if (children == null) {
+			children = new ArrayList(1);
+		}
+		Iterator childrenEnum = children.iterator();
+		boolean hasPreviewFolder = false;
+		boolean hasFrameHtml = false;
+		ProjectRecord projectRecord = null;
+		while (childrenEnum.hasNext()) {
+			Object child = childrenEnum.next();
+			String elementLabel = structureProvider.getLabel(child);
+			if (structureProvider.isFolder(child)) {
+				if (ProjectUtils.PREVIEW_FOLDER.equalsIgnoreCase(elementLabel)) {
+					hasPreviewFolder = true;
+				}
+				collectProjectFilesFromProvider(files, child, level + 1,
+						monitor);
+			}
+			if (elementLabel.equals(IProjectDescription.DESCRIPTION_FILE_NAME)) {
+                projectRecord = new ArchivedProject(child, entry, level, structureProvider);
+			}
+			if (ProjectUtils.PREVIEW_FRAME_FILE.equalsIgnoreCase(elementLabel)) {
+				hasFrameHtml = true;
+			}
+		}
+		if (projectRecord != null && hasPreviewFolder && hasFrameHtml) {
+			files.add(projectRecord);
+		}
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
+	 * .Composite)
+	 */
+	public void createControl(Composite parent) {
+
+		initializeDialogUnits(parent);
+
+		Composite workArea = new Composite(parent, SWT.NONE);
+		setControl(workArea);
+
+		workArea.setLayout(new GridLayout());
+		workArea.setLayoutData(new GridData(GridData.FILL_BOTH
+				| GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+		createProjectsRoot(workArea);
+		createProjectsList(workArea);
+		createWorkingSetGroup(workArea);
+		restoreWidgetValues();
+		Dialog.applyDialogFont(workArea);
+		
+		updateProjectsList(directoryPathField.getText().trim());
+	}
+
+	/**
+	 * Create the project described in record. If it is successful return true.
+	 * 
+	 * @param record
+	 * @return boolean <code>true</code> if successful
+	 * @throws InterruptedException
+	 */
+	private boolean createExistingProject(final ProjectRecord record,
+			IProgressMonitor monitor) throws InvocationTargetException,
+			InterruptedException {
+		monitor.beginTask(MessageFormat.format("Creating {0}", record
+				.getProjectName()), IProgressMonitor.UNKNOWN);
+
+		try {
+			IProject project = ProjectUtils.createWrtProject(record
+					.getProjectName(), null,
+					new SubProgressMonitor(monitor, 10));
+			createdProjects.add(project);
+            ImportOperation operation = record.getImportOperation(project, structureProvider, this);
+            if (operation != null) {
+                operation.setContext(getShell());
+                operation.run(monitor);
+            }
+			return true;
+		} catch (CoreException e) {
+			Activator.log(e);
+			return false;
+		} finally {
+			monitor.done();
+		}
+	}
+
+	/**
+	 * Create the selected projects
+	 * 
+	 * @return boolean <code>true</code> if all project creations were
+	 *         successful.
+	 */
+	public boolean createProjects() {
+		saveWidgetValues();
+
+		final Object[] selected = projectsList.getCheckedElements();
+		createdProjects = new ArrayList();
+		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+			protected void execute(IProgressMonitor monitor)
+					throws InvocationTargetException, InterruptedException {
+				try {
+					monitor.beginTask("", selected.length); 
+					if (monitor.isCanceled()) {
+						throw new OperationCanceledException();
+					}
+					for (int i = 0; i < selected.length; i++) {
+						createExistingProject((ProjectRecord) selected[i],
+								new SubProgressMonitor(monitor, 1));
+					}
+				} finally {
+					monitor.done();
+				}
+			}
+		};
+		// run the new project creation operation
+		try {
+			getContainer().run(true, true, op);
+		} catch (InterruptedException e) {
+			return false;
+		} catch (InvocationTargetException e) {
+			// one of the steps resulted in a core exception
+			Throwable t = e.getTargetException();
+			String message = DataTransferMessages.WizardExternalProjectImportPage_errorMessage;
+			IStatus status;
+			if (t instanceof CoreException) {
+				status = ((CoreException) t).getStatus();
+			} else {
+				status = new Status(IStatus.ERROR,
+ Activator.PLUGIN_ID, 1, message, t);
+			}
+			ErrorDialog.openError(getShell(), message, null, status);
+			return false;
+		}
+		ArchiveFileManipulations.closeStructureProvider(structureProvider,
+				getShell());
+
+		// Adds the projects to the working sets
+		addToWorkingSets();
+
+		return true;
+	}
+
+	/**
+	 * Create the checkbox list for the found projects.
+	 * 
+	 * @param workArea
+	 */
+	private void createProjectsList(Composite workArea) {
+
+		Label title = new Label(workArea, SWT.NONE);
+		title
+				.setText(DataTransferMessages.WizardProjectsImportPage_ProjectsListTitle);
+
+		Composite listComposite = new Composite(workArea, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginWidth = 0;
+		layout.makeColumnsEqualWidth = false;
+		listComposite.setLayout(layout);
+
+		listComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+				| GridData.GRAB_VERTICAL | GridData.FILL_BOTH));
+
+		projectsList = new CheckboxTreeViewer(listComposite, SWT.BORDER);
+		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+		gridData.widthHint = new PixelConverter(projectsList.getControl())
+				.convertWidthInCharsToPixels(25);
+		gridData.heightHint = new PixelConverter(projectsList.getControl())
+				.convertHeightInCharsToPixels(10);
+		projectsList.getControl().setLayoutData(gridData);
+		projectsList.setContentProvider(new ITreeContentProvider() {
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+			 */
+			public void dispose() {
+
+			}
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java
+			 * .lang.Object)
+			 */
+			public Object[] getChildren(Object parentElement) {
+				return null;
+			}
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.jface.viewers.IStructuredContentProvider#getElements
+			 * (java.lang.Object)
+			 */
+			public Object[] getElements(Object inputElement) {
+				return getProjectRecords();
+			}
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.jface.viewers.ITreeContentProvider#getParent(java
+			 * .lang.Object)
+			 */
+			public Object getParent(Object element) {
+				return null;
+			}
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java
+			 * .lang.Object)
+			 */
+			public boolean hasChildren(Object element) {
+				return false;
+			}
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse
+			 * .jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+			 */
+			public void inputChanged(Viewer viewer, Object oldInput,
+					Object newInput) {
+			}
+
+		});
+
+		projectsList.setLabelProvider(new ProjectLabelProvider());
+
+		projectsList.addCheckStateListener(new ICheckStateListener() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged
+			 * (org.eclipse.jface.viewers.CheckStateChangedEvent)
+			 */
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				ProjectRecord element = (ProjectRecord) event.getElement();
+                if (element.hasConflicts()) {
+					projectsList.setChecked(element, false);
+				}
+				setPageComplete(projectsList.getCheckedElements().length > 0);
+			}
+		});
+
+		projectsList.setInput(this);
+		projectsList.setComparator(new ViewerComparator());
+		createSelectionButtons(listComposite);
+	}
+
+	/**
+	 * Create the area where you select the root directory for the projects.
+	 * 
+	 * @param workArea
+	 *            Composite
+	 */
+	private void createProjectsRoot(Composite workArea) {
+
+		// project specification group
+		Composite projectGroup = new Composite(workArea, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		layout.makeColumnsEqualWidth = false;
+		layout.marginWidth = 0;
+		projectGroup.setLayout(layout);
+		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		// new project from directory radio button
+		projectFromDirectoryRadio = new Button(projectGroup, SWT.RADIO);
+		projectFromDirectoryRadio
+				.setText(DataTransferMessages.WizardProjectsImportPage_RootSelectTitle);
+
+		// project location entry field
+		this.directoryPathField = new Text(projectGroup, SWT.BORDER);
+
+		GridData directoryPathData = new GridData(SWT.FILL, SWT.NONE, true,
+				false);
+		directoryPathData.widthHint = new PixelConverter(directoryPathField)
+				.convertWidthInCharsToPixels(25);
+		directoryPathField.setLayoutData(directoryPathData);
+
+		directoryPathField.setText(ProjectUtils.getDefaultAptanaLocation());
+		
+		// browse button
+		browseDirectoriesButton = new Button(projectGroup, SWT.PUSH);
+		browseDirectoriesButton
+				.setText(DataTransferMessages.DataTransfer_browse);
+		setButtonLayoutData(browseDirectoriesButton);
+
+		// new project from archive radio button
+		projectFromArchiveRadio = new Button(projectGroup, SWT.RADIO);
+		projectFromArchiveRadio
+				.setText(DataTransferMessages.WizardProjectsImportPage_ArchiveSelectTitle);
+
+		// project location entry field
+		archivePathField = new Text(projectGroup, SWT.BORDER);
+
+		GridData archivePathData = new GridData(SWT.FILL, SWT.NONE, true, false);
+		archivePathData.widthHint = new PixelConverter(archivePathField)
+				.convertWidthInCharsToPixels(25);
+		archivePathField.setLayoutData(archivePathData); // browse button
+		browseArchivesButton = new Button(projectGroup, SWT.PUSH);
+		browseArchivesButton.setText(DataTransferMessages.DataTransfer_browse);
+		setButtonLayoutData(browseArchivesButton);
+
+		projectFromDirectoryRadio.setSelection(true);
+		archivePathField.setEnabled(false);
+		browseArchivesButton.setEnabled(false);
+
+		browseDirectoriesButton.addSelectionListener(new SelectionAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetS
+			 * elected(org.eclipse.swt.events.SelectionEvent)
+			 */
+			public void widgetSelected(SelectionEvent e) {
+				handleLocationDirectoryButtonPressed();
+			}
+
+		});
+
+		browseArchivesButton.addSelectionListener(new SelectionAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
+			 * .swt.events.SelectionEvent)
+			 */
+			public void widgetSelected(SelectionEvent e) {
+				handleLocationArchiveButtonPressed();
+			}
+
+		});
+
+		directoryPathField.addTraverseListener(new TraverseListener() {
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.TraverseListener#keyTraversed(org.eclipse
+			 * .swt.events.TraverseEvent)
+			 */
+			public void keyTraversed(TraverseEvent e) {
+				if (e.detail == SWT.TRAVERSE_RETURN) {
+					e.doit = false;
+					updateProjectsList(directoryPathField.getText().trim());
+				}
+			}
+
+		});
+
+		directoryPathField.addFocusListener(new FocusAdapter() {
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt
+			 * .events.FocusEvent)
+			 */
+			public void focusLost(org.eclipse.swt.events.FocusEvent e) {
+				updateProjectsList(directoryPathField.getText().trim());
+			}
+
+		});
+
+		archivePathField.addTraverseListener(new TraverseListener() {
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.TraverseListener#keyTraversed(org.eclipse
+			 * .swt.events.TraverseEvent)
+			 */
+			public void keyTraversed(TraverseEvent e) {
+				if (e.detail == SWT.TRAVERSE_RETURN) {
+					e.doit = false;
+					updateProjectsList(archivePathField.getText().trim());
+				}
+			}
+
+		});
+
+		archivePathField.addFocusListener(new FocusAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt
+			 * .events.FocusEvent)
+			 */
+			public void focusLost(org.eclipse.swt.events.FocusEvent e) {
+				updateProjectsList(archivePathField.getText().trim());
+			}
+		});
+
+		projectFromDirectoryRadio.addSelectionListener(new SelectionAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse
+			 * .swt.events.SelectionEvent)
+			 */
+			public void widgetSelected(SelectionEvent e) {
+				directoryRadioSelected();
+			}
+		});
+
+		projectFromArchiveRadio.addSelectionListener(new SelectionAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse
+			 * .swt.events.SelectionEvent)
+			 */
+			public void widgetSelected(SelectionEvent e) {
+				archiveRadioSelected();
+			}
+		});
+	}
+
+	/**
+	 * Create the selection buttons in the listComposite.
+	 * 
+	 * @param listComposite
+	 */
+	private void createSelectionButtons(Composite listComposite) {
+		Composite buttonsComposite = new Composite(listComposite, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		buttonsComposite.setLayout(layout);
+
+		buttonsComposite.setLayoutData(new GridData(
+				GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Button selectAll = new Button(buttonsComposite, SWT.PUSH);
+		selectAll.setText(DataTransferMessages.DataTransfer_selectAll);
+		selectAll.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				for (int i = 0; i < selectedProjects.length; i++) {
+                    if (selectedProjects[i].hasConflicts()) {
+                        projectsList.setChecked(selectedProjects[i], false);
+                    } else {
+                        projectsList.setChecked(selectedProjects[i], true);
+                    }
+				}
+				setPageComplete(projectsList.getCheckedElements().length > 0);
+			}
+		});
+		Dialog.applyDialogFont(selectAll);
+		setButtonLayoutData(selectAll);
+
+		Button deselectAll = new Button(buttonsComposite, SWT.PUSH);
+		deselectAll.setText(DataTransferMessages.DataTransfer_deselectAll);
+		deselectAll.addSelectionListener(new SelectionAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
+			 * .swt.events.SelectionEvent)
+			 */
+			public void widgetSelected(SelectionEvent e) {
+
+				projectsList.setCheckedElements(new Object[0]);
+				setPageComplete(false);
+			}
+		});
+		Dialog.applyDialogFont(deselectAll);
+		setButtonLayoutData(deselectAll);
+
+		Button refresh = new Button(buttonsComposite, SWT.PUSH);
+		refresh.setText(DataTransferMessages.DataTransfer_refresh);
+		refresh.addSelectionListener(new SelectionAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see
+			 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
+			 * .swt.events.SelectionEvent)
+			 */
+			public void widgetSelected(SelectionEvent e) {
+				if (projectFromDirectoryRadio.getSelection()) {
+					updateProjectsList(directoryPathField.getText().trim());
+				} else {
+					updateProjectsList(archivePathField.getText().trim());
+				}
+			}
+		});
+		Dialog.applyDialogFont(refresh);
+		setButtonLayoutData(refresh);
+	}
+
+	/**
+	 * @param workArea
+	 */
+	private void createWorkingSetGroup(Composite workArea) {
+		String[] workingSetIds = new String[] {
+				"org.eclipse.ui.resourceWorkingSetPage", //$NON-NLS-1$
+				"org.eclipse.jdt.ui.JavaWorkingSetPage" }; //$NON-NLS-1$
+		workingSetGroup = new WorkingSetGroup(workArea, currentSelection,
+				workingSetIds);
+	}
+
+	private void directoryRadioSelected() {
+		if (projectFromDirectoryRadio.getSelection()) {
+			directoryPathField.setEnabled(true);
+			browseDirectoriesButton.setEnabled(true);
+			archivePathField.setEnabled(false);
+			browseArchivesButton.setEnabled(false);
+			updateProjectsList(directoryPathField.getText());
+			directoryPathField.setFocus();
+		}
+	}
+
+	/**
+	 * Display an error dialog with the specified message.
+	 * 
+	 * @param message
+	 *            the error message
+	 */
+	protected void displayErrorDialog(String message) {
+		MessageDialog.open(MessageDialog.ERROR, getContainer().getShell(),
+				getErrorDialogTitle(), message, SWT.SHEET);
+	}
+
+	/**
+	 * Get the title for an error dialog. Subclasses should override.
+	 */
+	protected String getErrorDialogTitle() {
+		return IDEWorkbenchMessages.WizardExportPage_internalErrorTitle;
+	}
+
+	/**
+	 * Method used for test suite.
+	 * 
+	 * @return Button the Import from Directory RadioButton
+	 */
+	public Button getProjectFromDirectoryRadio() {
+		return projectFromDirectoryRadio;
+	}
+
+	/**
+	 * Get the array of project records that can be imported from the source
+	 * workspace or archive, selected by the user. If a project with the same
+	 * name exists in both the source workspace and the current workspace, then
+	 * the hasConflicts flag would be set on that project record.
+	 * 
+	 * Method declared public for test suite.
+	 * 
+	 * @return ProjectRecord[] array of projects that can be imported into the
+	 *         workspace
+	 */
+	public ProjectRecord[] getProjectRecords() {
+		List projectRecords = new ArrayList();
+		for (int i = 0; i < selectedProjects.length; i++) {
+            if (isProjectInWorkspace(selectedProjects[i].getProjectName())) {
+                selectedProjects[i].setHasConflicts(true);
+			}
+			projectRecords.add(selectedProjects[i]);
+		}
+		return (ProjectRecord[]) projectRecords
+				.toArray(new ProjectRecord[projectRecords.size()]);
+	}
+
+	/**
+	 * Retrieve all the projects in the current workspace.
+	 * 
+	 * @return IProject[] array of IProject in the current workspace
+	 */
+	private IProject[] getProjectsInWorkspace() {
+		if (wsProjects == null) {
+            wsProjects = ResourcesPlugin.getWorkspace().getRoot()
+					.getProjects();
+		}
+		return wsProjects;
+	}
+
+	/**
+	 * Method used for test suite.
+	 * 
+	 * @return CheckboxTreeViewer the viewer containing all the projects found
+	 */
+	public CheckboxTreeViewer getProjectsList() {
+		return projectsList;
+	}
+
+	/**
+	 * Answer a handle to the zip file currently specified as being the source.
+	 * Return null if this file does not exist or is not of valid format.
+	 */
+	private TarFile getSpecifiedTarSourceFile(String fileName) {
+		if (fileName.length() == 0) {
+			return null;
+		}
+
+		try {
+			return new TarFile(fileName);
+		} catch (TarException e) {
+			displayErrorDialog(DataTransferMessages.TarImport_badFormat);
+		} catch (IOException e) {
+			displayErrorDialog(DataTransferMessages.ZipImport_couldNotRead);
+		}
+
+		archivePathField.setFocus();
+		return null;
+	}
+
+	/**
+	 * Answer a handle to the zip file currently specified as being the source.
+	 * Return null if this file does not exist or is not of valid format.
+	 */
+	private ZipFile getSpecifiedZipSourceFile(String fileName) {
+		if (fileName.length() == 0) {
+			return null;
+		}
+
+		try {
+			return new ZipFile(fileName);
+		} catch (ZipException e) {
+			displayErrorDialog(DataTransferMessages.ZipImport_badFormat);
+		} catch (IOException e) {
+			displayErrorDialog(DataTransferMessages.ZipImport_couldNotRead);
+		}
+
+		archivePathField.setFocus();
+		return null;
+	}
+
+	/**
+	 * The browse button has been selected. Select the location.
+	 */
+	protected void handleLocationArchiveButtonPressed() {
+
+		FileDialog dialog = new FileDialog(archivePathField.getShell(),
+				SWT.SHEET);
+		dialog.setFilterExtensions(FILE_IMPORT_MASK);
+		dialog
+				.setText(DataTransferMessages.WizardProjectsImportPage_SelectArchiveDialogTitle);
+
+		String fileName = archivePathField.getText().trim();
+		if (fileName.length() == 0) {
+			fileName = previouslyBrowsedArchive;
+		}
+
+		if (fileName.length() == 0) {
+            dialog.setFilterPath(ResourcesPlugin.getWorkspace()
+					.getRoot().getLocation().toOSString());
+		} else {
+			File path = new File(fileName).getParentFile();
+			if (path != null && path.exists()) {
+				dialog.setFilterPath(path.toString());
+			}
+		}
+
+		String selectedArchive = dialog.open();
+		if (selectedArchive != null) {
+			previouslyBrowsedArchive = selectedArchive;
+			archivePathField.setText(previouslyBrowsedArchive);
+			updateProjectsList(selectedArchive);
+		}
+
+	}
+
+	/**
+	 * The browse button has been selected. Select the location.
+	 */
+	protected void handleLocationDirectoryButtonPressed() {
+
+		DirectoryDialog dialog = new DirectoryDialog(directoryPathField
+				.getShell(), SWT.SHEET);
+		dialog
+				.setMessage(DataTransferMessages.WizardProjectsImportPage_SelectDialogTitle);
+
+		String dirName = directoryPathField.getText().trim();
+		if (dirName.length() == 0) {
+			dirName = previouslyBrowsedDirectory;
+		}
+
+		if (dirName.length() == 0) {
+            dialog.setFilterPath(ResourcesPlugin.getWorkspace()
+					.getRoot().getLocation().toOSString());
+		} else {
+			File path = new File(dirName);
+			if (path.exists()) {
+				dialog.setFilterPath(new Path(dirName).toOSString());
+			}
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			previouslyBrowsedDirectory = selectedDirectory;
+			directoryPathField.setText(previouslyBrowsedDirectory);
+			updateProjectsList(selectedDirectory);
+		}
+
+	}
+
+	/**
+	 * Determine if the project with the given name is in the current workspace.
+	 * 
+	 * @param projectName
+	 *            String the project name to check
+	 * @return boolean true if the project with the given name is in this
+	 *         workspace
+	 */
+	private boolean isProjectInWorkspace(String projectName) {
+		if (projectName == null) {
+			return false;
+		}
+		IProject[] workspaceProjects = getProjectsInWorkspace();
+		for (int i = 0; i < workspaceProjects.length; i++) {
+			if (projectName.equals(workspaceProjects[i].getName())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Performs clean-up if the user cancels the wizard without doing anything
+	 */
+	public void performCancel() {
+		ArchiveFileManipulations.closeStructureProvider(structureProvider,
+				getShell());
+	}
+
+	/**
+	 * The <code>WizardDataTransfer</code> implementation of this
+	 * <code>IOverwriteQuery</code> method asks the user whether the existing
+	 * resource at the given path should be overwritten.
+	 * 
+	 * @param pathString
+	 * @return the user's reply: one of <code>"YES"</code>, <code>"NO"</code>,
+	 *         <code>"ALL"</code>, or <code>"CANCEL"</code>
+	 */
+	public String queryOverwrite(String pathString) {
+
+		Path path = new Path(pathString);
+
+		String messageString;
+		// Break the message up if there is a file name and a directory
+		// and there are at least 2 segments.
+		if (path.getFileExtension() == null || path.segmentCount() < 2) {
+			messageString = NLS.bind(
+					IDEWorkbenchMessages.WizardDataTransfer_existsQuestion,
+					pathString);
+		} else {
+			messageString = NLS
+					.bind(
+							IDEWorkbenchMessages.WizardDataTransfer_overwriteNameAndPathQuestion,
+							path.lastSegment(), path.removeLastSegments(1)
+									.toOSString());
+		}
+
+		final MessageDialog dialog = new MessageDialog(getContainer()
+				.getShell(), IDEWorkbenchMessages.Question, null,
+				messageString, MessageDialog.QUESTION, new String[] {
+						IDialogConstants.YES_LABEL,
+						IDialogConstants.YES_TO_ALL_LABEL,
+						IDialogConstants.NO_LABEL,
+						IDialogConstants.NO_TO_ALL_LABEL,
+						IDialogConstants.CANCEL_LABEL }, 0) {
+			protected int getShellStyle() {
+				return super.getShellStyle() | SWT.SHEET;
+			}
+		};
+		String[] response = new String[] { YES, ALL, NO, NO_ALL, CANCEL };
+		// run in syncExec because callback is from an operation,
+		// which is probably not running in the UI thread.
+		getControl().getDisplay().syncExec(new Runnable() {
+			public void run() {
+				dialog.open();
+			}
+		});
+		return dialog.getReturnCode() < 0 ? CANCEL : response[dialog
+				.getReturnCode()];
+	}
+
+	/**
+	 * Use the dialog store to restore widget values to the values that they
+	 * held last time this wizard was used to completion, or alternatively, if
+	 * an initial path is specified, use it to select values.
+	 * 
+	 * Method declared public only for use of tests.
+	 */
+	public void restoreWidgetValues() {
+
+		// First, check to see if we have resore settings, and
+		// take care of the checkbox
+		IDialogSettings settings = getDialogSettings();
+
+		// Second, check to see if we don't have an initial path,
+		// and if we do have restore settings. If so, set the
+		// radio selection properly to restore settings
+
+		if (initialPath == null && settings != null) {
+			// radio selection
+			boolean archiveSelected = settings
+					.getBoolean(STORE_ARCHIVE_SELECTED);
+			projectFromDirectoryRadio.setSelection(!archiveSelected);
+			projectFromArchiveRadio.setSelection(archiveSelected);
+			if (archiveSelected) {
+				archiveRadioSelected();
+			} else {
+				directoryRadioSelected();
+			}
+		}
+		// Third, if we do have an initial path, set the proper
+		// path and radio buttons to the initial value. Move
+		// cursor to the end of the path so user can see the
+		// most relevant part (directory / archive name)
+		else if (initialPath != null) {
+			boolean dir = new File(initialPath).isDirectory();
+
+			projectFromDirectoryRadio.setSelection(dir);
+			projectFromArchiveRadio.setSelection(!dir);
+
+			if (dir) {
+				directoryPathField.setText(initialPath);
+				directoryPathField.setSelection(initialPath.length());
+				directoryRadioSelected();
+			} else {
+				archivePathField.setText(initialPath);
+				archivePathField.setSelection(initialPath.length());
+				archiveRadioSelected();
+			}
+		}
+	}
+
+	/**
+	 * Since Finish was pressed, write widget values to the dialog store so that
+	 * they will persist into the next invocation of this wizard page.
+	 * 
+	 * Method declared public only for use of tests.
+	 */
+	public void saveWidgetValues() {
+		IDialogSettings settings = getDialogSettings();
+		if (settings != null) {
+			settings.put(STORE_ARCHIVE_SELECTED, projectFromArchiveRadio
+					.getSelection());
+		}
+	}
+
+	/*
+	 * (non-Javadoc) Method declared on IDialogPage. Set the focus on path
+	 * fields when page becomes visible.
+	 */
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible && this.projectFromDirectoryRadio.getSelection()) {
+			this.directoryPathField.setFocus();
+		}
+		if (visible && this.projectFromArchiveRadio.getSelection()) {
+			this.archivePathField.setFocus();
+		}
+	}
+
+	/**
+	 * Update the list of projects based on path. Method declared public only
+	 * for test suite.
+	 * 
+	 * @param path
+	 */
+	public void updateProjectsList(final String path) {
+		// on an empty path empty selectedProjects
+		if (path == null || path.length() == 0) {
+            setMessage("Select a directory to search for existing WRT projects.");
+			selectedProjects = new ProjectRecord[0];
+			projectsList.refresh(true);
+			projectsList.setCheckedElements(selectedProjects);
+			setPageComplete(projectsList.getCheckedElements().length > 0);
+			lastPath = path;
+			return;
+		}
+
+		final File directory = new File(path);
+		long modified = directory.lastModified();
+		if (path.equals(lastPath) && lastModified == modified) {
+			// since the file/folder was not modified and the path did not
+			// change, no refreshing is required
+			return;
+		}
+
+		lastPath = path;
+		lastModified = modified;
+
+		// We can't access the radio button from the inner class so get the
+		// status beforehand
+		final boolean dirSelected = this.projectFromDirectoryRadio
+				.getSelection();
+		try {
+			getContainer().run(true, true, new IRunnableWithProgress() {
+
+				/*
+				 * (non-Javadoc)
+				 * 
+				 * @see
+				 * org.eclipse.jface.operation.IRunnableWithProgress#run(org
+				 * .eclipse.core.runtime.IProgressMonitor)
+				 */
+				public void run(IProgressMonitor monitor) {
+
+					monitor
+							.beginTask(
+									DataTransferMessages.WizardProjectsImportPage_SearchingMessage,
+									100);
+					selectedProjects = new ProjectRecord[0];
+					Collection files = new ArrayList();
+					monitor.worked(10);
+					if (!dirSelected
+							&& ArchiveFileManipulations.isTarFile(path)) {
+						TarFile sourceTarFile = getSpecifiedTarSourceFile(path);
+						if (sourceTarFile == null) {
+							return;
+						}
+
+						structureProvider = new TarLeveledStructureProvider(
+								sourceTarFile);
+						Object child = structureProvider.getRoot();
+
+						if (!collectProjectFilesFromProvider(files, child, 0,
+								monitor)) {
+							return;
+						}
+						Iterator filesIterator = files.iterator();
+						selectedProjects = new ProjectRecord[files.size()];
+						int index = 0;
+						monitor.worked(50);
+						monitor
+								.subTask(DataTransferMessages.WizardProjectsImportPage_ProcessingMessage);
+						while (filesIterator.hasNext()) {
+							selectedProjects[index++] = (ProjectRecord) filesIterator
+									.next();
+						}
+					} else if (!dirSelected
+							&& ArchiveFileManipulations.isZipFile(path)) {
+						ZipFile sourceFile = getSpecifiedZipSourceFile(path);
+						if (sourceFile == null) {
+							return;
+						}
+						structureProvider = new ZipLeveledStructureProvider(
+								sourceFile);
+						Object child = structureProvider.getRoot();
+
+						if (!collectProjectFilesFromProvider(files, child, 0,
+								monitor)) {
+							return;
+						}
+						Iterator filesIterator = files.iterator();
+						selectedProjects = new ProjectRecord[files.size()];
+						int index = 0;
+						monitor.worked(50);
+						monitor
+								.subTask(DataTransferMessages.WizardProjectsImportPage_ProcessingMessage);
+						while (filesIterator.hasNext()) {
+							selectedProjects[index++] = (ProjectRecord) filesIterator
+									.next();
+						}
+					}
+
+					else if (dirSelected && directory.isDirectory()) {
+
+						if (!collectProjectFilesFromDirectory(files, directory,
+								null, monitor)) {
+							return;
+						}
+						Iterator filesIterator = files.iterator();
+						selectedProjects = new ProjectRecord[files.size()];
+						int index = 0;
+						monitor.worked(50);
+						monitor
+								.subTask(DataTransferMessages.WizardProjectsImportPage_ProcessingMessage);
+						while (filesIterator.hasNext()) {
+							File file = (File) filesIterator.next();
+                            selectedProjects[index] = new FileSystemProject(file);
+							index++;
+						}
+					} else {
+						monitor.worked(60);
+					}
+					monitor.done();
+				}
+
+			});
+		} catch (InvocationTargetException e) {
+            Activator.log(e.getMessage(), e);
+		} catch (InterruptedException e) {
+			// Nothing to do if the user interrupts.
+		}
+
+		projectsList.refresh(true);
+		ProjectRecord[] projects = getProjectRecords();
+		boolean displayWarning = false;
+		for (int i = 0; i < projects.length; i++) {
+            if (projects[i].hasConflicts()) {
+				displayWarning = true;
+				projectsList.setGrayed(projects[i], true);
+			} else {
+				projectsList.setChecked(projects[i], true);
+			}
+		}
+
+		if (displayWarning) {
+			setMessage(
+					DataTransferMessages.WizardProjectsImportPage_projectsInWorkspace,
+					WARNING);
+		} else {
+            setMessage("Select a directory to search for existing WRT projects.");
+		}
+		setPageComplete(projectsList.getCheckedElements().length > 0);
+		if (selectedProjects.length == 0) {
+			setMessage(
+					DataTransferMessages.WizardProjectsImportPage_noProjectsToImport,
+					WARNING);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/projectimport/WrtProjectsImportWizard.java	Thu Feb 25 14:58:22 2010 -0800
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Symbian Foundation - initial contribution.
+ * Contributors:
+ * Description:
+ * Overview:
+ * Details:
+ * Platforms/Drives/Compatibility:
+ * Assumptions/Requirement/Pre-requisites:
+ * Failures and causes:
+ */
+package org.symbian.tools.wrttools.wizards.projectimport;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
+import org.symbian.tools.wrttools.util.ProjectUtils;
+
+public class WrtProjectsImportWizard extends Wizard implements
+		IImportWizard, INewWizard, IExecutableExtension {
+
+    private WrtProjectLocationWizardPage mainPage;
+	private IConfigurationElement config;
+
+    public WrtProjectsImportWizard() {
+        setWindowTitle("Import WRT Project");
+		setNeedsProgressMonitor(true);
+	}
+
+	@Override
+	public boolean performCancel() {
+		mainPage.performCancel();
+		return true;
+	}
+
+	@Override
+	public boolean performFinish() {
+		if (mainPage.createProjects()) {
+			BasicNewProjectResourceWizard.updatePerspective(config);
+			List<IProject> projects = mainPage.getCreatedProjects();
+				ProjectUtils.focusOn(projects.toArray(new IProject[projects.size()]));
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	@Override
+	public void addPages() {
+        mainPage = new WrtProjectLocationWizardPage();
+		addPage(mainPage);
+	}
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		// Do nothing
+	}
+
+	public void setInitializationData(IConfigurationElement config,
+			String propertyName, Object data) throws CoreException {
+		this.config = config;
+	}
+}