--- /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;
+ }
+
+}