org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/NewApplicationWizard.java
changeset 467 5a2901872fcf
parent 466 129c94e78375
--- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/NewApplicationWizard.java	Tue Aug 17 13:40:28 2010 -0700
+++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/NewApplicationWizard.java	Wed Aug 18 09:30:53 2010 -0700
@@ -18,22 +18,31 @@
  */
 package org.symbian.tools.tmw.internal.ui.wizard;
 
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Set;
 
 import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.IWizardPage;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
 import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
 import org.eclipse.wst.common.project.facet.ui.ModifyFacetedProjectWizard;
 import org.symbian.tools.tmw.core.TMWCore;
 import org.symbian.tools.tmw.core.projects.IFProjSupport;
+import org.symbian.tools.tmw.core.runtimes.ProjectCreationConfigFactory;
 import org.symbian.tools.tmw.ui.project.INewApplicationWizardPage;
 import org.symbian.tools.tmw.ui.project.IProjectTemplate;
 
@@ -74,32 +83,69 @@
     }
 
     public boolean canFinish() {
-        return this.firstPage.isPageComplete() && super.canFinish();
+        return getNextPage(getContainer().getCurrentPage()) == null && this.firstPage.isPageComplete()
+                && super.canFinish();
     }
 
     protected NewApplicationDetailsWizardPage createFirstPage() {
         firstPage = new NewApplicationDetailsWizardPage(wizardContext, databindingContext);
         return firstPage;
     }
+
     @Override
     public IWizardPage getNextPage(final IWizardPage page) {
+        final IFacetedProjectWorkingCopy fpjwc = getFacetedProjectWorkingCopy();
         if (page == this.firstPage) {
-            final IFacetedProjectWorkingCopy fpjwc = getFacetedProjectWorkingCopy();
             fpjwc.setProjectName(getProjectName());
             fpjwc.setProjectLocation(getProjectLocation());
             final IFProjSupport fprojSupport = TMWCore.getFProjSupport();
             IRuntime runtime = fprojSupport.getRuntime(wizardContext.getRuntime());
             fpjwc.setTargetedRuntimes(Collections.singleton(runtime));
             fpjwc.setPrimaryRuntime(runtime);
-            fpjwc.setProjectFacets(fprojSupport.getFixedFacetsVersions(wizardContext.getRuntime()));
-            fpjwc.setFixedProjectFacets(fprojSupport.getFixedFacets(wizardContext.getRuntime()));
-            fpjwc.setProjectFacetActionConfig(fprojSupport.getTMWFacet(), wizardContext);
+            Set<IProjectFacetVersion> facets = getCurrentFixedFacetVersions();
+            facets.addAll(fpjwc.getProjectFacets());
+            fpjwc.setProjectFacets(facets);
+            fpjwc.setFixedProjectFacets(getCurrentFixedFacets());
+        } else if (page == this.templatesPage) {
+            Set<IProjectFacetVersion> facets = getCurrentFixedFacetVersions();
+            facets.addAll(fpjwc.getProjectFacets());
+            fpjwc.setProjectFacets(facets);
+            fpjwc.setFixedProjectFacets(getCurrentFixedFacets());
+        }
+        final Collection<Action> actions = fpjwc.getProjectFacetActions();
+        final Collection<Action> toReplace = new HashSet<IFacetedProject.Action>();
+        for (Action action : actions) {
+            if (action.getConfig() == ProjectCreationConfigFactory.CONFIG_STANDIN) {
+                toReplace.add(action);
+            }
+        }
+        for (Action action : toReplace) {
+            fpjwc.setProjectFacetActionConfig(action.getProjectFacetVersion().getProjectFacet(), wizardContext);
         }
 
         IWizardPage nextPage = super.getNextPage(page);
         return nextPage;
     }
 
+    private Set<IProjectFacet> getCurrentFixedFacets() {
+        final Set<IProjectFacetVersion> fixedFacets = getCurrentFixedFacetVersions();
+        final Set<IProjectFacet> facets = new HashSet<IProjectFacet>();
+        for (IProjectFacetVersion facet : fixedFacets) {
+            facets.add(facet.getProjectFacet());
+        }
+        return facets;
+    }
+
+    private Set<IProjectFacetVersion> getCurrentFixedFacetVersions() {
+        final IFProjSupport fprojSupport = TMWCore.getFProjSupport();
+        Set<IProjectFacetVersion> facets = new HashSet<IProjectFacetVersion>(
+                fprojSupport.getFixedFacetsVersions(wizardContext.getRuntime()));
+        if (wizardContext.getTemplate() != null) {
+            facets.addAll(Arrays.asList(wizardContext.getTemplate().getRequiredFacets()));
+        }
+        return facets;
+    }
+
     public IWizardPage[] getPages() {
         final IProjectTemplate current = wizardContext.getTemplate();
         if (template != current) {
@@ -165,4 +211,12 @@
         this.workbench = workbench;
         this.selection = selection;
     }
+
+    @Override
+    protected void performFinish(IProgressMonitor monitor) throws CoreException {
+        monitor.beginTask("Preparing project", 100);
+        super.performFinish(new SubProgressMonitor(monitor, 20));
+        wizardContext.initialize(getFacetedProject().getProject(), new SubProgressMonitor(monitor, 80));
+        monitor.done();
+    }
 }