diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/wizard/NewSMTProjectWizard.java --- /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; + } + +}