|
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // ${file_name} |
|
15 // |
|
16 // |
|
17 |
|
18 package com.symbian.smt.gui.wizard; |
|
19 |
|
20 import java.lang.reflect.InvocationTargetException; |
|
21 import java.net.URI; |
|
22 |
|
23 import org.eclipse.core.resources.IProject; |
|
24 import org.eclipse.core.resources.IProjectDescription; |
|
25 import org.eclipse.core.resources.IResource; |
|
26 import org.eclipse.core.resources.IWorkspace; |
|
27 import org.eclipse.core.resources.IWorkspaceDescription; |
|
28 import org.eclipse.core.resources.IWorkspaceRunnable; |
|
29 import org.eclipse.core.resources.IncrementalProjectBuilder; |
|
30 import org.eclipse.core.resources.ProjectScope; |
|
31 import org.eclipse.core.resources.ResourcesPlugin; |
|
32 import org.eclipse.core.runtime.CoreException; |
|
33 import org.eclipse.core.runtime.IConfigurationElement; |
|
34 import org.eclipse.core.runtime.IExecutableExtension; |
|
35 import org.eclipse.core.runtime.IProgressMonitor; |
|
36 import org.eclipse.core.runtime.IStatus; |
|
37 import org.eclipse.core.runtime.OperationCanceledException; |
|
38 import org.eclipse.core.runtime.Status; |
|
39 import org.eclipse.core.runtime.SubProgressMonitor; |
|
40 import org.eclipse.core.runtime.jobs.Job; |
|
41 import org.eclipse.core.runtime.preferences.DefaultScope; |
|
42 import org.eclipse.core.runtime.preferences.IEclipsePreferences; |
|
43 import org.eclipse.core.runtime.preferences.IScopeContext; |
|
44 import org.eclipse.core.runtime.preferences.InstanceScope; |
|
45 import org.eclipse.jface.dialogs.MessageDialog; |
|
46 import org.eclipse.jface.viewers.ISelection; |
|
47 import org.eclipse.jface.viewers.IStructuredSelection; |
|
48 import org.eclipse.jface.wizard.Wizard; |
|
49 import org.eclipse.swt.widgets.Composite; |
|
50 import org.eclipse.ui.INewWizard; |
|
51 import org.eclipse.ui.IWorkbench; |
|
52 import org.eclipse.ui.IWorkbenchWizard; |
|
53 import org.eclipse.ui.actions.WorkspaceModifyOperation; |
|
54 import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard; |
|
55 |
|
56 import com.symbian.smt.gui.AbstractPersistentDataStore; |
|
57 import com.symbian.smt.gui.Activator; |
|
58 import com.symbian.smt.gui.Logger; |
|
59 import com.symbian.smt.gui.ManageResources; |
|
60 import com.symbian.smt.gui.PersistentDataStore; |
|
61 |
|
62 public class NewSMTProjectWizard extends Wizard implements INewWizard, |
|
63 IExecutableExtension { |
|
64 private NewProjectCreationPageCaseInsensitive projectCreationWizardPage; |
|
65 |
|
66 private NewProjectWizardSystemDefsPage systemDefsWizardPage; |
|
67 private NewProjectWizardTabbedPropertiesPage tabbedPropertiesWizardPage; |
|
68 |
|
69 private ISelection selection; |
|
70 private IWorkbench workbench; |
|
71 private IConfigurationElement config; |
|
72 private IProject projectHandle; |
|
73 |
|
74 /** |
|
75 * This is the entry point for creating and managing the wizard |
|
76 * |
|
77 * @return void |
|
78 */ |
|
79 public NewSMTProjectWizard() { |
|
80 super(); |
|
81 setNeedsProgressMonitor(true); |
|
82 } |
|
83 |
|
84 /** |
|
85 * Adds pages to the wizard |
|
86 * |
|
87 * @return void |
|
88 */ |
|
89 public void addPages() { |
|
90 projectCreationWizardPage = new NewProjectCreationPageCaseInsensitive( |
|
91 "page1"); |
|
92 |
|
93 projectCreationWizardPage.setTitle("System Model Manager Wizard"); |
|
94 projectCreationWizardPage |
|
95 .setDescription("Enter a name for the new project..."); |
|
96 addPage(projectCreationWizardPage); |
|
97 |
|
98 systemDefsWizardPage = new NewProjectWizardSystemDefsPage(selection); |
|
99 addPage(systemDefsWizardPage); |
|
100 |
|
101 tabbedPropertiesWizardPage = new NewProjectWizardTabbedPropertiesPage( |
|
102 selection); |
|
103 addPage(tabbedPropertiesWizardPage); |
|
104 } |
|
105 |
|
106 private void copyFilesIntoProject() { |
|
107 // Add the folders and files to the project |
|
108 ManageResources.updateShapesFiles(projectHandle, |
|
109 tabbedPropertiesWizardPage.getDefaultShapesFiles()); |
|
110 ManageResources.updateLevelsFiles(projectHandle, |
|
111 tabbedPropertiesWizardPage.getDefaultLevelsFiles()); |
|
112 ManageResources.updateLocalisationFiles(projectHandle, |
|
113 tabbedPropertiesWizardPage.getDefaultLocalisationFiles()); |
|
114 ManageResources.updateDependenciesFiles(projectHandle, |
|
115 tabbedPropertiesWizardPage.getDefaultDependenciesFiles()); |
|
116 ManageResources.updateSystemInfoFiles(projectHandle, |
|
117 tabbedPropertiesWizardPage.getDefaultSystemInfoFiles()); |
|
118 ManageResources.updateColoursFiles(projectHandle, |
|
119 tabbedPropertiesWizardPage.getDefaultColoursFiles()); |
|
120 ManageResources.updateBorderStylesFiles(projectHandle, |
|
121 tabbedPropertiesWizardPage.getDefaultBorderStylesFiles()); |
|
122 ManageResources.updateBorderShapesFiles(projectHandle, |
|
123 tabbedPropertiesWizardPage.getDefaultBorderShapesFiles()); |
|
124 ManageResources.updatePatternsFiles(projectHandle, |
|
125 tabbedPropertiesWizardPage.getDefaultPatternsFiles()); |
|
126 ManageResources.updateS12XmlFiles(projectHandle, |
|
127 tabbedPropertiesWizardPage.getDefaultS12XmlFiles()); |
|
128 |
|
129 // Add the system definition files to the project |
|
130 ManageResources.updateSystemDefinitionFiles(projectHandle, |
|
131 systemDefsWizardPage.getSystemDefinitions(), false); |
|
132 } |
|
133 |
|
134 public void createPageControls(Composite pageContainer) { |
|
135 super.createPageControls(pageContainer); |
|
136 |
|
137 IScopeContext defaultScope = new DefaultScope(); |
|
138 IEclipsePreferences defaultNode = defaultScope |
|
139 .getNode(Activator.PLUGIN_ID); |
|
140 |
|
141 IScopeContext instanceScope = new InstanceScope(); |
|
142 IEclipsePreferences instanceNode = instanceScope |
|
143 .getNode(Activator.PLUGIN_ID); |
|
144 PersistentDataStore instanceStore = new PersistentDataStore( |
|
145 instanceNode, defaultNode); |
|
146 |
|
147 tabbedPropertiesWizardPage.initialize(instanceStore); |
|
148 } |
|
149 |
|
150 /** |
|
151 * Sets up the project - project folder, nature, files, folders etc |
|
152 * |
|
153 * @return void |
|
154 */ |
|
155 void createProject(IProjectDescription description, IProject proj, |
|
156 IProgressMonitor monitor) throws CoreException, |
|
157 OperationCanceledException { |
|
158 try { |
|
159 |
|
160 monitor.beginTask("", 2000); |
|
161 |
|
162 proj.create(description, new SubProgressMonitor(monitor, 1000)); |
|
163 |
|
164 if (monitor.isCanceled()) { |
|
165 throw new OperationCanceledException(); |
|
166 } |
|
167 |
|
168 proj.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor( |
|
169 monitor, 1000)); |
|
170 |
|
171 try { |
|
172 String[] natures = description.getNatureIds(); |
|
173 String[] newNatures = new String[natures.length + 1]; |
|
174 System.arraycopy(natures, 0, newNatures, 0, natures.length); |
|
175 newNatures[natures.length] = "com.symbian.smt.gui.nature"; |
|
176 description.setNatureIds(newNatures); |
|
177 proj.setDescription(description, null); |
|
178 } catch (CoreException e) { |
|
179 Logger.log(e.getMessage(), e); |
|
180 } |
|
181 |
|
182 } finally { |
|
183 monitor.done(); |
|
184 } |
|
185 } |
|
186 |
|
187 /** |
|
188 * We will accept the selection in the workbench to see if we can initialise |
|
189 * from it. |
|
190 * |
|
191 * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) |
|
192 */ |
|
193 public void init(IWorkbench workbench, IStructuredSelection selection) { |
|
194 this.selection = selection; |
|
195 this.workbench = workbench; |
|
196 } |
|
197 |
|
198 /** |
|
199 * This method is called when the finish button is pressed in the wizard |
|
200 * |
|
201 * @return boolean |
|
202 */ |
|
203 public boolean performFinish() { |
|
204 projectHandle = projectCreationWizardPage.getProjectHandle(); |
|
205 |
|
206 if (projectHandle == null) { |
|
207 return false; |
|
208 } |
|
209 |
|
210 URI projectURI = (!projectCreationWizardPage.useDefaults()) ? projectCreationWizardPage |
|
211 .getLocationURI() |
|
212 : null; |
|
213 |
|
214 IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
|
215 |
|
216 final IProjectDescription desc = workspace |
|
217 .newProjectDescription(projectHandle.getName()); |
|
218 |
|
219 desc.setLocationURI(projectURI); |
|
220 |
|
221 WorkspaceModifyOperation op = new WorkspaceModifyOperation() { |
|
222 protected void execute(IProgressMonitor monitor) |
|
223 throws CoreException { |
|
224 createProject(desc, projectHandle, monitor); |
|
225 } |
|
226 }; |
|
227 |
|
228 try { |
|
229 getContainer().run(false, false, op); |
|
230 } catch (InterruptedException e) { |
|
231 return false; |
|
232 } catch (InvocationTargetException e) { |
|
233 Throwable realException = e.getTargetException(); |
|
234 MessageDialog.openError(getShell(), "Error", realException |
|
235 .getMessage()); |
|
236 return false; |
|
237 } |
|
238 |
|
239 completePerformFinish(); |
|
240 |
|
241 // If auto building has been disabled then we force the build |
|
242 |
|
243 IWorkspaceDescription description = workspace.getDescription(); |
|
244 // If auto building has been disabled then we force the build |
|
245 if (!description.isAutoBuilding()) { |
|
246 Job j= new Job("Building workspace") { |
|
247 @Override |
|
248 protected IStatus run(IProgressMonitor monitor) { |
|
249 try { |
|
250 projectHandle.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor); |
|
251 } catch (CoreException e) { |
|
252 Logger.log(e.getMessage(), e); |
|
253 } |
|
254 |
|
255 return new Status(IStatus.OK, Activator.PLUGIN_ID, IStatus.OK, "updating properties succeeded", null); |
|
256 } |
|
257 }; |
|
258 j.schedule(); |
|
259 } |
|
260 |
|
261 return true; |
|
262 } |
|
263 |
|
264 private void completePerformFinish() { |
|
265 IWorkspaceRunnable op = new IWorkspaceRunnable () { |
|
266 public void run(IProgressMonitor monitor) throws CoreException { |
|
267 monitor.beginTask("Creating project", 0); |
|
268 |
|
269 // Persist the project information |
|
270 // This needs to be done first as the builder will try to read from the |
|
271 // persistent store |
|
272 persistInformation(); |
|
273 |
|
274 // Copy the files into the project / Create file shortcut icons |
|
275 copyFilesIntoProject(); |
|
276 |
|
277 BasicNewProjectResourceWizard.updatePerspective(config); |
|
278 BasicNewProjectResourceWizard.selectAndReveal(projectHandle, workbench |
|
279 .getActiveWorkbenchWindow()); |
|
280 |
|
281 monitor.worked(1); |
|
282 monitor.done(); |
|
283 } |
|
284 }; |
|
285 |
|
286 try { |
|
287 ResourcesPlugin.getWorkspace().run(op, projectHandle, IWorkspace.AVOID_UPDATE, null); |
|
288 } catch (CoreException e) { |
|
289 MessageDialog.openError(getShell(), "Error", e.getMessage()); |
|
290 return; |
|
291 } |
|
292 } |
|
293 |
|
294 private void persistInformation() { |
|
295 IScopeContext projectScope = new ProjectScope(projectHandle); |
|
296 IEclipsePreferences node = projectScope.getNode(Activator.PLUGIN_ID); |
|
297 |
|
298 AbstractPersistentDataStore dataStore = new PersistentDataStore(node); |
|
299 |
|
300 // Persist the Output Filename |
|
301 dataStore.setOutputFilename(tabbedPropertiesWizardPage |
|
302 .getOutputFilename()); |
|
303 |
|
304 // Persist the Model Labels |
|
305 dataStore.setCopyrightText(tabbedPropertiesWizardPage |
|
306 .getCopyrightText()); |
|
307 dataStore.setDistributionTexts(tabbedPropertiesWizardPage |
|
308 .getDistributionTexts()); |
|
309 dataStore.setSelectedDistributionText(tabbedPropertiesWizardPage |
|
310 .getSelectedDistributionText()); |
|
311 dataStore.setModelName(tabbedPropertiesWizardPage.getModelName()); |
|
312 dataStore.setModelVersion(tabbedPropertiesWizardPage.getModelVersion()); |
|
313 dataStore.setModelVersionTexts(tabbedPropertiesWizardPage |
|
314 .getModelVersionTexts()); |
|
315 dataStore.setSelectedModelVersionText(tabbedPropertiesWizardPage |
|
316 .getSelectedModelVersionText()); |
|
317 dataStore.setSystemName(tabbedPropertiesWizardPage.getSystemName()); |
|
318 dataStore.setSystemVersion(tabbedPropertiesWizardPage |
|
319 .getSystemVersion()); |
|
320 |
|
321 // Persist the Model Control |
|
322 dataStore.setHighlightCoreOS(tabbedPropertiesWizardPage |
|
323 .getHighlightCoreOS()); |
|
324 dataStore.setLevelOfDetail(tabbedPropertiesWizardPage |
|
325 .getLevelOfDetail()); |
|
326 dataStore.setPrintedDpis(tabbedPropertiesWizardPage.getPrintedDpis()); |
|
327 dataStore.setSelectedPrintedDpi(tabbedPropertiesWizardPage |
|
328 .getSelectedPrintedDpi()); |
|
329 dataStore.setSuppressMouseOverEffect(tabbedPropertiesWizardPage |
|
330 .getSuppressMouseOverEffect()); |
|
331 dataStore.setFixItemSize(tabbedPropertiesWizardPage.getFixItemSize()); |
|
332 |
|
333 // Persist the Resources, the selected file is persisted by the |
|
334 // ManageResources widget |
|
335 // All files (Selection is persisted as part of method |
|
336 // copyFilesIntoProject()) |
|
337 dataStore.setBorderShapesFiles(tabbedPropertiesWizardPage |
|
338 .getBorderShapesFiles()); |
|
339 dataStore.setBorderStylesFiles(tabbedPropertiesWizardPage |
|
340 .getBorderStylesFiles()); |
|
341 dataStore.setColoursFiles(tabbedPropertiesWizardPage.getColoursFiles()); |
|
342 dataStore.setDependenciesFiles(tabbedPropertiesWizardPage |
|
343 .getDependenciesFiles()); |
|
344 dataStore.setLevelsFiles(tabbedPropertiesWizardPage.getLevelsFiles()); |
|
345 dataStore.setLocalisationFiles(tabbedPropertiesWizardPage |
|
346 .getLocalisationFiles()); |
|
347 dataStore.setPatternsFiles(tabbedPropertiesWizardPage |
|
348 .getPatternsFiles()); |
|
349 dataStore.setShapesFiles(tabbedPropertiesWizardPage.getShapesFiles()); |
|
350 dataStore.setSystemInfoFiles(tabbedPropertiesWizardPage |
|
351 .getSystemInfoFiles()); |
|
352 dataStore.setS12XmlFiles(tabbedPropertiesWizardPage.getS12XmlFiles()); |
|
353 |
|
354 // Persist the Ignore Items |
|
355 dataStore.setIgnoreItems(tabbedPropertiesWizardPage.getIgnoreItems()); |
|
356 |
|
357 // Persist the Filter Items |
|
358 dataStore |
|
359 .setFilterHasItems(tabbedPropertiesWizardPage.getFilterItems()); |
|
360 |
|
361 // Persist the Advanced Options |
|
362 dataStore.setAdvancedOptions(tabbedPropertiesWizardPage |
|
363 .getAdvancedOptions()); |
|
364 |
|
365 |
|
366 } |
|
367 |
|
368 public void setInitializationData(IConfigurationElement config, |
|
369 String propertyName, Object data) throws CoreException { |
|
370 this.config = config; |
|
371 } |
|
372 |
|
373 } |