blob: d71a7c1d37b7f77be1e1e9924a3b59eed87b8800 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Mentor Graphics Corporation.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Mohamed Azab (Mentor Graphics) - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.autotools.ui.wizards;
import org.eclipse.cdt.autotools.core.AutotoolsNewProjectNature;
import org.eclipse.cdt.autotools.ui.AutotoolsUIPlugin;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.internal.autotools.core.AutotoolsNewMakeGenerator;
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
import org.eclipse.cdt.internal.ui.CUIMessages;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
import org.eclipse.cdt.managedbuilder.ui.wizards.NewMakeProjFromExistingPage;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
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.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
@SuppressWarnings("restriction")
public class AutotoolsProjectImportWizardPage extends NewMakeProjFromExistingPage {
private Button langc;
private Button langcpp;
protected AutotoolsProjectImportWizardPage() {
setTitle(AutotoolsWizardMessages.getResourceString("ImportWizardPage.title")); //$NON-NLS-1$
setDescription(AutotoolsWizardMessages.getResourceString("ImportWizardPage.description")); //$NON-NLS-1$
}
protected IProjectType getProjectType() {
return ((AutotoolsProjectImportWizard) getWizard()).getProjectType();
}
protected IConfiguration[] getSelectedConfigurations() {
return ((AutotoolsProjectImportWizard) getWizard()).getSelectedConfigurations();
}
@Override
public void createControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
comp.setLayout(layout);
comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
addProjectNameSelector(comp);
addSourceSelector(comp);
addLanguageSelector(comp);
setControl(comp);
}
@Override
public void addLanguageSelector(Composite parent) {
Group group = new Group(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
group.setLayout(layout);
group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
group.setText("Select project language");
SelectionListener cListener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
validatePage();
}
};
langc = ControlFactory.createRadioButton(group, CUIMessages.ConvertProjectWizardPage_CProject, "C ", //$NON-NLS-1$
cListener);
langc.setSelection(true);
langcpp = ControlFactory.createRadioButton(group, CUIMessages.ConvertProjectWizardPage_CppProject, "C++ ", //$NON-NLS-1$
cListener);
langcpp.setSelection(false);
}
@Override
public IToolChain getToolChain() {
return getSelectedConfigurations()[0].getToolChain();
}
public void convertProject(IProject project, IProgressMonitor monitor, String projectID) throws CoreException {
monitor.beginTask(
AutotoolsUIPlugin.getResourceString("WizardMakeProjectConversion.monitor.convertingToMakeProject"), 7); //$NON-NLS-1$
IConfiguration defaultCfg = null;
try {
monitor.subTask(AutotoolsUIPlugin.getResourceString("adding project nature")); //$NON-NLS-1$
ManagedCProjectNature.addManagedNature(project, SubMonitor.convert(monitor, 1));
AutotoolsNewProjectNature.addAutotoolsNature(project, SubMonitor.convert(monitor, 1));
monitor.subTask(AutotoolsUIPlugin.getResourceString("adding builder")); //$NON-NLS-1$
AutotoolsNewProjectNature.addAutotoolsBuilder(project, SubMonitor.convert(monitor, 1));
project.setPersistentProperty(AutotoolsPropertyConstants.SCANNER_USE_MAKE_W,
AutotoolsPropertyConstants.TRUE);
// Specify false for override in next call as override can cause the
// method to throw an
// exception.
CCorePlugin.getDefault().mapCProjectOwner(project, projectID, false);
// Add the ManagedProject to the project
IManagedProject newManagedProject = null;
IManagedBuildInfo info = null;
try {
info = ManagedBuildManager.createBuildInfo(project);
newManagedProject = ManagedBuildManager.createManagedProject(project, getProjectType());
if (newManagedProject != null) {
for (int i = 0; i < getSelectedConfigurations().length; i++) {
IConfiguration config = getSelectedConfigurations()[i];
int id = ManagedBuildManager.getRandomNumber();
IConfiguration newConfig = newManagedProject.createConfiguration(config,
config.getId() + "." + id); //$NON-NLS-1$
newConfig.setArtifactName(newManagedProject.getDefaultArtifactName());
}
// Now add the first supported config in the list as the
// default
IConfiguration[] newConfigs = newManagedProject.getConfigurations();
for (int i = 0; i < newConfigs.length; i++) {
if (newConfigs[i].isSupported()) {
defaultCfg = newConfigs[i];
break;
}
}
if (defaultCfg == null && newConfigs.length > 0)
defaultCfg = newConfigs[0];
if (defaultCfg != null) {
ManagedBuildManager.setDefaultConfiguration(project, defaultCfg);
ManagedBuildManager.setSelectedConfiguration(project, defaultCfg);
}
ManagedBuildManager.setNewProjectVersion(project);
AutotoolsNewMakeGenerator m = new AutotoolsNewMakeGenerator();
CUIPlugin.getDefault().startGlobalConsole();
m.initialize(project, info, SubMonitor.convert(monitor));
try {
m.reconfigure();
} catch (CoreException e) {
// do nothing for now
}
}
} catch (BuildException e) {
AutotoolsUIPlugin.log(e);
}
// Save the build options
monitor.subTask(AutotoolsUIPlugin.getResourceString("saving project")); //$NON-NLS-1$
if (info != null) {
info.setValid(true);
ManagedBuildManager.saveBuildInfo(project, true);
}
} finally {
monitor.done();
}
}
@Override
public boolean isC() {
return langc.getSelection();
}
@Override
public boolean isCPP() {
return langcpp.getSelection();
}
}