sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/wizard/NewSMTProjectWizard.java
changeset 0 522a326673b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/wizard/NewSMTProjectWizard.java	Thu Mar 11 19:08:43 2010 +0200
@@ -0,0 +1,373 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ${file_name}
+// 
+//
+
+package com.symbian.smt.gui.wizard;
+
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceDescription;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWizard;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
+
+import com.symbian.smt.gui.AbstractPersistentDataStore;
+import com.symbian.smt.gui.Activator;
+import com.symbian.smt.gui.Logger;
+import com.symbian.smt.gui.ManageResources;
+import com.symbian.smt.gui.PersistentDataStore;
+
+public class NewSMTProjectWizard extends Wizard implements INewWizard,
+		IExecutableExtension {
+	private NewProjectCreationPageCaseInsensitive projectCreationWizardPage;
+
+	private NewProjectWizardSystemDefsPage systemDefsWizardPage;
+	private NewProjectWizardTabbedPropertiesPage tabbedPropertiesWizardPage;
+
+	private ISelection selection;
+	private IWorkbench workbench;
+	private IConfigurationElement config;
+	private IProject projectHandle;
+
+	/**
+	 * This is the entry point for creating and managing the wizard
+	 * 
+	 * @return void
+	 */
+	public NewSMTProjectWizard() {
+		super();
+		setNeedsProgressMonitor(true);
+	}
+
+	/**
+	 * Adds pages to the wizard
+	 * 
+	 * @return void
+	 */
+	public void addPages() {
+		projectCreationWizardPage = new NewProjectCreationPageCaseInsensitive(
+				"page1");
+
+		projectCreationWizardPage.setTitle("System Model Manager Wizard");
+		projectCreationWizardPage
+				.setDescription("Enter a name for the new project...");
+		addPage(projectCreationWizardPage);
+
+		systemDefsWizardPage = new NewProjectWizardSystemDefsPage(selection);
+		addPage(systemDefsWizardPage);
+
+		tabbedPropertiesWizardPage = new NewProjectWizardTabbedPropertiesPage(
+				selection);
+		addPage(tabbedPropertiesWizardPage);
+	}
+
+	private void copyFilesIntoProject() {
+		// Add the folders and files to the project
+		ManageResources.updateShapesFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultShapesFiles());
+		ManageResources.updateLevelsFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultLevelsFiles());
+		ManageResources.updateLocalisationFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultLocalisationFiles());
+		ManageResources.updateDependenciesFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultDependenciesFiles());
+		ManageResources.updateSystemInfoFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultSystemInfoFiles());
+		ManageResources.updateColoursFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultColoursFiles());
+		ManageResources.updateBorderStylesFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultBorderStylesFiles());
+		ManageResources.updateBorderShapesFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultBorderShapesFiles());
+		ManageResources.updatePatternsFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultPatternsFiles());
+		ManageResources.updateS12XmlFiles(projectHandle,
+				tabbedPropertiesWizardPage.getDefaultS12XmlFiles());
+
+		// Add the system definition files to the project
+		ManageResources.updateSystemDefinitionFiles(projectHandle,
+				systemDefsWizardPage.getSystemDefinitions(), false);
+	}
+
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+
+		IScopeContext defaultScope = new DefaultScope();
+		IEclipsePreferences defaultNode = defaultScope
+				.getNode(Activator.PLUGIN_ID);
+
+		IScopeContext instanceScope = new InstanceScope();
+		IEclipsePreferences instanceNode = instanceScope
+				.getNode(Activator.PLUGIN_ID);
+		PersistentDataStore instanceStore = new PersistentDataStore(
+				instanceNode, defaultNode);
+
+		tabbedPropertiesWizardPage.initialize(instanceStore);
+	}
+
+	/**
+	 * Sets up the project - project folder, nature, files, folders etc
+	 * 
+	 * @return void
+	 */
+	void createProject(IProjectDescription description, IProject proj,
+			IProgressMonitor monitor) throws CoreException,
+			OperationCanceledException {
+		try {
+
+			monitor.beginTask("", 2000);
+
+			proj.create(description, new SubProgressMonitor(monitor, 1000));
+
+			if (monitor.isCanceled()) {
+				throw new OperationCanceledException();
+			}
+
+			proj.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(
+					monitor, 1000));
+
+			try {
+				String[] natures = description.getNatureIds();
+				String[] newNatures = new String[natures.length + 1];
+				System.arraycopy(natures, 0, newNatures, 0, natures.length);
+				newNatures[natures.length] = "com.symbian.smt.gui.nature";
+				description.setNatureIds(newNatures);
+				proj.setDescription(description, null);
+			} catch (CoreException e) {
+				Logger.log(e.getMessage(), e);
+			}
+
+		} finally {
+			monitor.done();
+		}
+	}
+
+	/**
+	 * We will accept the selection in the workbench to see if we can initialise
+	 * from it.
+	 * 
+	 * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection)
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.selection = selection;
+		this.workbench = workbench;
+	}
+
+	/**
+	 * This method is called when the finish button is pressed in the wizard
+	 * 
+	 * @return boolean
+	 */
+	public boolean performFinish() {
+		projectHandle = projectCreationWizardPage.getProjectHandle();
+
+		if (projectHandle == null) {
+			return false;
+		}
+
+		URI projectURI = (!projectCreationWizardPage.useDefaults()) ? projectCreationWizardPage
+				.getLocationURI()
+				: null;
+
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+
+		final IProjectDescription desc = workspace
+				.newProjectDescription(projectHandle.getName());
+
+		desc.setLocationURI(projectURI);
+
+		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+			protected void execute(IProgressMonitor monitor)
+					throws CoreException {
+				createProject(desc, projectHandle, monitor);
+			}
+		};
+
+		try {
+			getContainer().run(false, false, op);
+		} catch (InterruptedException e) {
+			return false;
+		} catch (InvocationTargetException e) {
+			Throwable realException = e.getTargetException();
+			MessageDialog.openError(getShell(), "Error", realException
+					.getMessage());
+			return false;
+		}
+		
+		completePerformFinish();
+
+		// If auto building has been disabled then we force the build
+
+	    IWorkspaceDescription description = workspace.getDescription();
+	    // If auto building has been disabled then we force the build
+	    if (!description.isAutoBuilding()) {
+			Job j= new Job("Building workspace") {
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {
+					try {
+						projectHandle.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);
+					} catch (CoreException e) {
+						Logger.log(e.getMessage(), e);
+					}
+					
+					return new Status(IStatus.OK, Activator.PLUGIN_ID, IStatus.OK, "updating properties succeeded", null);
+				}
+			};
+			j.schedule();
+	    }
+		
+		return true;
+	}
+
+	private void completePerformFinish() {
+		IWorkspaceRunnable  op = new IWorkspaceRunnable () {
+			public void run(IProgressMonitor monitor) throws CoreException  {
+				monitor.beginTask("Creating project", 0);
+				
+				// Persist the project information
+				// This needs to be done first as the builder will try to read from the
+				// persistent store
+				persistInformation();
+
+				// Copy the files into the project / Create file shortcut icons
+				copyFilesIntoProject();
+
+				BasicNewProjectResourceWizard.updatePerspective(config);
+				BasicNewProjectResourceWizard.selectAndReveal(projectHandle, workbench
+						.getActiveWorkbenchWindow());
+
+				monitor.worked(1);
+				monitor.done();
+			}
+		};
+		
+		try {
+			ResourcesPlugin.getWorkspace().run(op, projectHandle, IWorkspace.AVOID_UPDATE, null);
+		} catch (CoreException e) {
+			MessageDialog.openError(getShell(), "Error", e.getMessage());
+			return;
+		}
+	}
+	
+	private void persistInformation() {
+		IScopeContext projectScope = new ProjectScope(projectHandle);
+		IEclipsePreferences node = projectScope.getNode(Activator.PLUGIN_ID);
+
+		AbstractPersistentDataStore dataStore = new PersistentDataStore(node);
+
+		// Persist the Output Filename
+		dataStore.setOutputFilename(tabbedPropertiesWizardPage
+				.getOutputFilename());
+		
+		// Persist the Model Labels
+		dataStore.setCopyrightText(tabbedPropertiesWizardPage
+				.getCopyrightText());
+		dataStore.setDistributionTexts(tabbedPropertiesWizardPage
+				.getDistributionTexts());
+		dataStore.setSelectedDistributionText(tabbedPropertiesWizardPage
+				.getSelectedDistributionText());
+		dataStore.setModelName(tabbedPropertiesWizardPage.getModelName());
+		dataStore.setModelVersion(tabbedPropertiesWizardPage.getModelVersion());
+		dataStore.setModelVersionTexts(tabbedPropertiesWizardPage
+				.getModelVersionTexts());
+		dataStore.setSelectedModelVersionText(tabbedPropertiesWizardPage
+				.getSelectedModelVersionText());
+		dataStore.setSystemName(tabbedPropertiesWizardPage.getSystemName());
+		dataStore.setSystemVersion(tabbedPropertiesWizardPage
+				.getSystemVersion());
+
+		// Persist the Model Control
+		dataStore.setHighlightCoreOS(tabbedPropertiesWizardPage
+				.getHighlightCoreOS());
+		dataStore.setLevelOfDetail(tabbedPropertiesWizardPage
+				.getLevelOfDetail());
+		dataStore.setPrintedDpis(tabbedPropertiesWizardPage.getPrintedDpis());
+		dataStore.setSelectedPrintedDpi(tabbedPropertiesWizardPage
+				.getSelectedPrintedDpi());
+		dataStore.setSuppressMouseOverEffect(tabbedPropertiesWizardPage
+				.getSuppressMouseOverEffect());
+		dataStore.setFixItemSize(tabbedPropertiesWizardPage.getFixItemSize());
+
+		// Persist the Resources, the selected file is persisted by the
+		// ManageResources widget
+		// All files (Selection is persisted as part of method
+		// copyFilesIntoProject())
+		dataStore.setBorderShapesFiles(tabbedPropertiesWizardPage
+				.getBorderShapesFiles());
+		dataStore.setBorderStylesFiles(tabbedPropertiesWizardPage
+				.getBorderStylesFiles());
+		dataStore.setColoursFiles(tabbedPropertiesWizardPage.getColoursFiles());
+		dataStore.setDependenciesFiles(tabbedPropertiesWizardPage
+				.getDependenciesFiles());
+		dataStore.setLevelsFiles(tabbedPropertiesWizardPage.getLevelsFiles());
+		dataStore.setLocalisationFiles(tabbedPropertiesWizardPage
+				.getLocalisationFiles());
+		dataStore.setPatternsFiles(tabbedPropertiesWizardPage
+				.getPatternsFiles());
+		dataStore.setShapesFiles(tabbedPropertiesWizardPage.getShapesFiles());
+		dataStore.setSystemInfoFiles(tabbedPropertiesWizardPage
+				.getSystemInfoFiles());
+		dataStore.setS12XmlFiles(tabbedPropertiesWizardPage.getS12XmlFiles());
+
+		// Persist the Ignore Items
+		dataStore.setIgnoreItems(tabbedPropertiesWizardPage.getIgnoreItems());
+
+		// Persist the Filter Items
+		dataStore
+				.setFilterHasItems(tabbedPropertiesWizardPage.getFilterItems());
+
+		// Persist the Advanced Options
+		dataStore.setAdvancedOptions(tabbedPropertiesWizardPage
+				.getAdvancedOptions());
+
+
+	}
+
+	public void setInitializationData(IConfigurationElement config,
+			String propertyName, Object data) throws CoreException {
+		this.config = config;
+	}
+
+}