/******************************************************************************* * Copyright (c) 2011-2014 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.ui.wizard; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.SortedSet; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants; import org.eclipse.jst.servlet.ui.project.facet.WebProjectFirstPage; import org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework; import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate; import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy; import org.eclipse.wst.common.project.facet.core.IPreset; 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.ProjectFacetsManager; import org.eclipse.wst.common.project.facet.core.runtime.IRuntime; import org.jboss.tools.cdi.core.CDIImages; import org.jboss.tools.cdi.internal.core.project.facet.ICDIFacetDataModelProperties; import org.jboss.tools.cdi.ui.CDIUIMessages; /** * @author Alexey Kazakov */ public class CDIProjectWizard extends WebProjectWizard implements IExecutableExtension { public static final String CDI10_TEMPALTE = "template.jboss.tools.cdi10"; public static final String CDI12_TEMPALTE = "template.jboss.tools.cdi12"; private IPreset oldPreset; public static final String ID = "org.jboss.tools.cdi.ui.wizard.NewCDIProjectWizard"; private FirstPage firstPage; public CDIProjectWizard() { super(); setWindowTitle(CDIUIMessages.CDI_PROJECT_WIZARD_NEW_PROJECT); } /* * (non-Javadoc) * @see org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard#getTemplate() */ @Override protected IFacetedProjectTemplate getTemplate() { return ProjectFacetsManager.getTemplate(CDI10_TEMPALTE); } /* * (non-Javadoc) * @see org.eclipse.wst.web.ui.internal.wizards.NewProjectDataModelFacetWizard#setRuntimeAndDefaultFacets(org.eclipse.wst.common.project.facet.core.runtime.IRuntime) */ @Override protected void setRuntimeAndDefaultFacets(IRuntime runtime) { IFacetedProjectWorkingCopy dm = getFacetedProjectWorkingCopy(); IPreset preset = dm.getSelectedPreset(); if(preset!=null) { oldPreset = preset; } dm.setTargetedRuntimes(Collections.<IRuntime> emptySet()); boolean dontUseRuntimeConfig = false; if (runtime != null) { if(runtime.supports(IJ2EEFacetConstants.DYNAMIC_WEB_31)) { Set<IProjectFacetVersion> facets = ProjectFacetsManager.getTemplate(CDI10_TEMPALTE).getInitialPreset().getProjectFacets(); dm.setProjectFacets(facets); dontUseRuntimeConfig = true; } else { if(oldPreset!=null) { dm.setProjectFacets(oldPreset.getProjectFacets()); dontUseRuntimeConfig = true; } else { Set<IProjectFacetVersion> minFacets = new HashSet<IProjectFacetVersion>(); try { for (IProjectFacet f : dm.getFixedProjectFacets()) { minFacets.add(f.getLatestSupportedVersion(runtime)); } } catch (CoreException e) { throw new RuntimeException(e); } dm.setProjectFacets(minFacets); } } dm.setTargetedRuntimes(Collections.singleton(runtime)); } if(dontUseRuntimeConfig) { if(dm.getAvailablePresets().contains(oldPreset)) { dm.setSelectedPreset(oldPreset.getId()); } } else if(dm.getAvailablePresets().contains(FacetedProjectFramework.DEFAULT_CONFIGURATION_PRESET_ID)) { dm.setSelectedPreset(FacetedProjectFramework.DEFAULT_CONFIGURATION_PRESET_ID); } } /* * (non-Javadoc) * @see org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard#createFirstPage() */ @Override protected IWizardPage createFirstPage() { firstPage = new FirstPage(model, "first.page"); //$NON-NLS-1$ return firstPage; } /** * For test purposes only * @param webFacet */ public void setWebVersionCombo(IProjectFacetVersion webFacet) { firstPage.setWebVersionCombo(webFacet.getVersionString()); firstPage.handlePrimaryFacetVersionSelectedEvent(); } /* * (non-Javadoc) * @see org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard#getDefaultPageImageDescriptor() */ @Override protected ImageDescriptor getDefaultPageImageDescriptor() { return CDIImages.getImageDescriptor(CDIImages.CDI_PROJECT_IMAGE); } /* * (non-Javadoc) * @see org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard#getFinalPerspectiveID() */ @Override protected String getFinalPerspectiveID() { return null; } class FirstPage extends WebProjectFirstPage { public FirstPage(IDataModel model, String pageName) { super(model, pageName); setTitle(CDIUIMessages.CDI_PROJECT_WIZARD_NEW_PROJECT_TITLE); setDescription(CDIUIMessages.CDI_PROJECT_WIZARD_NEW_PROJECT_DESCRIPTION); setImageDescriptor(CDIProjectWizard.this.getDefaultPageImageDescriptor()); } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.WizardPage#isPageComplete() */ @Override public boolean isPageComplete() { boolean pageComplete = super.isPageComplete(); IProjectFacet pFacet = ProjectFacetsManager.getProjectFacet(ICDIFacetDataModelProperties.CDI_FACET_ID); IFacetedProjectWorkingCopy fProject = getFacetedProjectWorkingCopy(); if(fProject!=null) { IProjectFacetVersion cdiFacet = fProject.getProjectFacetVersion(pFacet); if(cdiFacet==null) { if(pageComplete) { this.setErrorMessage(CDIUIMessages.CDI_PROJECT_WIZARD_PAGE1_CDI_FACET_MUST_BE_SPECIFIED); return false; } } else { if(pageComplete) { this.setErrorMessage(null); } else if(CDIUIMessages.CDI_PROJECT_WIZARD_PAGE1_CDI_FACET_MUST_BE_SPECIFIED.equals(getErrorMessage())) { this.setErrorMessage(null); } } } return pageComplete; } @Override protected void handlePrimaryFacetVersionSelectedEvent() { super.handlePrimaryFacetVersionSelectedEvent(); IFacetedProjectWorkingCopy dm = getFacetedProjectWorkingCopy(); IFacetedProjectTemplate template = dm.hasProjectFacet(IJ2EEFacetConstants.DYNAMIC_WEB_31)?ProjectFacetsManager.getTemplate(CDI12_TEMPALTE):ProjectFacetsManager.getTemplate(CDI10_TEMPALTE); dm.setFixedProjectFacets(template.getFixedProjectFacets()); dm.setProjectFacets(template.getInitialPreset().getProjectFacets()); dm.setSelectedPreset(template.getInitialPreset().getId()); } @Override protected void updatePrimaryVersions(){ IFacetedProjectWorkingCopy dm = getFacetedProjectWorkingCopy(); IRuntime runtime = dm.getPrimaryRuntime(); if(runtime!=null) { IFacetedProjectTemplate template = null; String webFacet = null; IPreset defaultPreset = dm.getDefaultConfiguration(); boolean defaultPresetContainsWeb30 = false; if(defaultPreset!=null) { Set<IProjectFacetVersion> presetFacets = defaultPreset.getProjectFacets(); for (IProjectFacetVersion facetVersion : presetFacets) { if(facetVersion.equals(IJ2EEFacetConstants.DYNAMIC_WEB_30)) { // Don't use CDI 1.2 && JavaEE 7 facets for runtimes with Web 3.0 (JavaEE 6) as default facet even if it supports Web 3.1. // See https://issues.jboss.org/browse/JBIDE-19356 defaultPresetContainsWeb30 = true; break; } } } if(!defaultPresetContainsWeb30 && runtime.supports(IJ2EEFacetConstants.DYNAMIC_WEB_31)) { template = ProjectFacetsManager.getTemplate(CDI12_TEMPALTE); webFacet = IJ2EEFacetConstants.DYNAMIC_WEB_31.getVersionString(); } else if(runtime.supports(IJ2EEFacetConstants.DYNAMIC_WEB_30)) { template = ProjectFacetsManager.getTemplate(CDI10_TEMPALTE); webFacet = IJ2EEFacetConstants.DYNAMIC_WEB_30.getVersionString(); } if(template!=null) { setWebVersionCombo(webFacet); dm.setFixedProjectFacets(template.getFixedProjectFacets()); dm.setProjectFacets(template.getInitialPreset().getProjectFacets()); dm.setSelectedPreset(template.getInitialPreset().getId()); return; } } super.updatePrimaryVersions(); } public void setWebVersionCombo(String webFacet) { IFacetedProjectWorkingCopy dm = getFacetedProjectWorkingCopy(); SortedSet<IProjectFacetVersion> initialVersions = dm.getAvailableVersions(primaryProjectFacet); String[] items = new String[initialVersions.size()]; int i=0; int selectedVersionIndex = -1; for(Iterator <IProjectFacetVersion> iterator = initialVersions.iterator(); iterator.hasNext(); i++){ items[i] = iterator.next().getVersionString(); if(selectedVersionIndex == -1 && items[i].equals(webFacet)){ selectedVersionIndex = i; } } primaryVersionCombo.clearSelection(); primaryVersionCombo.setItems(items); primaryVersionCombo.select(selectedVersionIndex); } } }