/*******************************************************************************
* Copyright (c) 2015 Mentor Graphics Corporation.
* 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:
* 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"));
setDescription(AutotoolsWizardMessages
.getResourceString("ImportWizardPage.description"));
}
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"));
ManagedCProjectNature.addManagedNature(project, SubMonitor.convert(monitor, 1));
AutotoolsNewProjectNature.addAutotoolsNature(project, SubMonitor.convert(monitor, 1));
monitor.subTask(AutotoolsUIPlugin
.getResourceString("adding builder"));
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"));
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();
}
}