/******************************************************************************* * Copyright (c) 2000, 2015 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are 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: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.autotools.ui.wizards; import java.lang.reflect.InvocationTargetException; import org.eclipse.cdt.autotools.ui.AutotoolsUIPlugin; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IProjectType; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.ui.wizards.MBSCustomPageManager; import org.eclipse.cdt.ui.wizards.NewCProjectWizardPage; import org.eclipse.cdt.ui.wizards.conversion.ConversionWizard; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.Wizard; /** * This wizard provides a method by which the user can * add a C nature to a project that previously had no nature associated with it. */ public class ConvertToAutotoolsProjectWizard extends ConversionWizard { private static final String WZ_TITLE = "WizardAutotoolsProjectConversion.title"; //$NON-NLS-1$ private static final String WZ_DESC = "WizardAutotoolsProjectConversion.description"; //$NON-NLS-1$ private static final String PREFIX = "WizardAutotoolsConversion"; //$NON-NLS-1$ private static final String WINDOW_TITLE = "WizardAutotoolsConversion.windowTitle"; //$NON-NLS-1$ protected static final String CONF_TITLE = PREFIX + ".config.title"; //$NON-NLS-1$ protected static final String CONF_DESC = PREFIX + ".config.desc"; //$NON-NLS-1$ protected static final String MSG_SAVE = PREFIX + ".message.save"; //$NON-NLS-1$ protected static final String OPTIONS_TITLE = PREFIX + ".options.title"; //$NON-NLS-1$ protected static final String OPTIONS_DESC = PREFIX + ".options.desc"; //$NON-NLS-1$ public static final String NULL_INDEXER_ID = "org.eclipse.cdt.core.nullindexer"; //$NON-NLS-1$ protected CProjectPlatformPage projectConfigurationPage; protected NewAutotoolsProjectOptionPage optionPage; protected IProject curProject; /** * ConvertToAutotoolsConversionWizard Wizard constructor */ public ConvertToAutotoolsProjectWizard() { this(getWindowTitleResource(), getWzDescriptionResource()); } /** * ConvertToAutotoolsConversionWizard Wizard constructor * * @param title * @param desc */ public ConvertToAutotoolsProjectWizard(String title, String desc) { super(title, desc); } /** * Method getWzDescriptionResource, allows Wizard description label value * to be changed by subclasses * * @return String */ protected static String getWzDescriptionResource() { return AutotoolsUIPlugin.getResourceString(WZ_DESC); } /** * Method getWzTitleResource, allows Wizard description label value * to be changed by subclasses * * @return String */ protected static String getWzTitleResource() { return AutotoolsUIPlugin.getResourceString(WZ_TITLE); } /** * Method getWindowTitleResource, allows Wizard Title label value to be * changed by subclasses * * @return String */ protected static String getWindowTitleResource() { return AutotoolsUIPlugin.getResourceString(WINDOW_TITLE); } /** * Method getPrefix, allows prefix value to be changed by subclasses * * @return String */ protected static String getPrefix() { return PREFIX; } /** * Method addPages adds our Simple to C conversion Wizard page. * * @see Wizard#createPages */ @Override public void addPages() { addPage(mainPage = new ConvertToAutotoolsProjectWizardPage(getPrefix(), this)); // Add the configuration selection page projectConfigurationPage = new CProjectPlatformPage(PREFIX); projectConfigurationPage.setTitle(AutotoolsUIPlugin.getResourceString(CONF_TITLE)); projectConfigurationPage.setDescription(AutotoolsUIPlugin.getResourceString(CONF_DESC)); addPage(projectConfigurationPage); // Add the options (tabbed) page optionPage = new NewAutotoolsProjectOptionPage(PREFIX); optionPage.setTitle(AutotoolsUIPlugin.getResourceString(OPTIONS_TITLE)); optionPage.setDescription(AutotoolsUIPlugin.getResourceString(OPTIONS_DESC)); addPage(optionPage); // add custom pages MBSCustomPageManager.init(); // add stock pages MBSCustomPageManager.addStockPage(fMainPage, NewCProjectWizardPage.PAGE_ID); MBSCustomPageManager.addStockPage(projectConfigurationPage, CProjectPlatformPage.PAGE_ID); MBSCustomPageManager.addStockPage(optionPage, NewAutotoolsProjectOptionPage.PAGE_ID); } @Override public String getProjectID() { return ManagedBuilderCorePlugin.MANAGED_MAKE_PROJECT_ID; } public IProjectType getProjectType() { return projectConfigurationPage.getProjectType(); } public IConfiguration[] getSelectedConfigurations() { return projectConfigurationPage.getSelectedConfigurations(); } protected void setCurrentProject (IProject project) { curProject = project; } public IProject getProject() { return curProject; } @SuppressWarnings("deprecation") public void applyOptions(IProject project, IProgressMonitor monitor) { // When applying the project options, we need to specify which // project because the conversion wizard allows us to convert // more than one project at once. We accomplish this by setting // the current project we are working on. The optionPage when // applying options will ask the wizard (us) to get the project which // we will report is the current project being converted. setCurrentProject(project); optionPage.performApply(monitor); } @Override protected void doRun(IProgressMonitor monitor) throws CoreException { monitor.beginTask(AutotoolsUIPlugin.getResourceString("WizardAutotoolsProjectConversion.monitor.convertingToMakeProject"), 2); //$NON-NLS-1$ try { super.doRun(SubMonitor.convert(monitor, 5)); } finally { monitor.done(); } } @Override protected void doRunPrologue(IProgressMonitor monitor) { // Auto-generated method stub } @Override protected void doRunEpilogue(IProgressMonitor monitor) { // Get my initializer to run // if (project == null) // return; // // IStatus initResult = ManagedBuildManager.initBuildInfoContainer(project); // if (initResult.getCode() != IStatus.OK) { // // At this point, I can live with a failure // ManagedBuilderUIPlugin.log(initResult); // } // execute any operations specified by custom pages IRunnableWithProgress operations[] = MBSCustomPageManager.getOperations(); if (operations != null) { for(int k = 0; k < operations.length; k++) { try { operations[k].run(monitor); } catch(InvocationTargetException |InterruptedException e) { //TODO: what should we do? } } } } }