blob: b6f121c1703342cc8736d9eff9d94945e8a393af [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.internal.debug.ui.interpreters;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IStatusHandler;
import org.eclipse.dltk.core.IBuildpathEntry;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.environment.EnvironmentManager;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.debug.ui.ScriptDebugImages;
import org.eclipse.dltk.internal.ui.wizards.IBuildpathContainerPage;
import org.eclipse.dltk.ui.wizards.IBuildpathContainerPageExtension;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
/**
* Extension to allow a user to associate a InterpreterEnvironment with a Script
* project.
*/
public abstract class AbstractInterpreterContainerWizardPage extends WizardPage
implements IBuildpathContainerPage, IBuildpathContainerPageExtension {
/**
* The buildpath entry to be created.
*/
private IBuildpathEntry fSelection;
/**
* InterpreterEnvironment control
*/
private AbstractInterpreterComboBlock fInterpreterBlock;
private IScriptProject scriptProject;
private IBuildpathEntry[] currentEntries;
/**
* Constructs a new page.
*/
public AbstractInterpreterContainerWizardPage() {
super(InterpretersMessages.InterpreterContainerWizardPage_Interpreter_System_Library_1);
}
@Override
public boolean finish() {
IStatus status = fInterpreterBlock.getStatus();
if (!status.isOK()) {
return false;
}
fSelection = fInterpreterBlock.getEntry();
return true;
}
@Override
public IBuildpathEntry getSelection() {
return fSelection;
}
@Override
public void setSelection(IBuildpathEntry containerEntry) {
fSelection = containerEntry;
initializeFromSelection();
}
/**
* Initlaizes the InterpreterEnvironment selection
*/
protected void initializeFromSelection() {
if (getControl() != null) {
if (fSelection == null) {
fInterpreterBlock.setUseDefaultInterpreter();
} else {
fInterpreterBlock.setPath(fSelection.getPath());
}
IStatus status = fInterpreterBlock.getStatus();
if (!status.isOK()) {
setErrorMessage(status.getMessage());
try {
IStatusHandler handler = DebugPlugin.getDefault()
.getStatusHandler(status);
if (handler != null) {
Boolean b = (Boolean) handler.handleStatus(status,
this);
if (b.booleanValue()) {
fInterpreterBlock.refreshInterpreters();
}
}
} catch (CoreException e) {
}
}
}
}
/**
* @since 2.0
*/
protected AbstractInterpreterComboBlock createInterpreterBlock(
IInterpreterComboBlockContext context) {
return new AbstractInterpreterComboBlock(context);
}
@Override
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
composite.setLayout(layout);
GridData gd = new GridData(GridData.FILL_BOTH);
composite.setLayoutData(gd);
composite.setFont(parent.getFont());
final IInterpreterComboBlockContext context = createInterpreterBlockHost();
fInterpreterBlock = createInterpreterBlock(context);
fInterpreterBlock.setDefaultInterpreterDescriptor(
new BuildInterpreterDescriptor(context));
fInterpreterBlock.setTitle(
InterpretersMessages.InterpreterContainerWizardPage_3);
fInterpreterBlock.createControl(composite);
// gd = new GridData(GridData.FILL_HORIZONTAL);
// fInterpreterEnvironmentBlock.getControl().setLayoutData(gd);
setControl(composite);
fInterpreterBlock.addPropertyChangeListener(event -> {
IStatus status = fInterpreterBlock.getStatus();
if (status.isOK()) {
setErrorMessage(null);
} else {
setErrorMessage(status.getMessage());
}
});
setTitle(
InterpretersMessages.InterpreterContainerWizardPage_Interpreter_System_Library_1);
setMessage(
InterpretersMessages.InterpreterContainerWizardPage_Select_the_Interpreter_used_to_build_this_project__4);
initializeFromSelection();
}
/**
* @return
*/
private IInterpreterComboBlockContext createInterpreterBlockHost() {
return new IInterpreterComboBlockContext() {
@Override
public int getMode() {
return M_BUILDPATH;
}
@Override
public IEnvironment getEnvironment() {
return EnvironmentManager.getEnvironment(getScriptProject());
}
@Override
public String getNatureId() {
return AbstractInterpreterContainerWizardPage.this
.getScriptNature();
}
};
}
@Override
public Image getImage() {
return ScriptDebugImages.get(ScriptDebugImages.IMG_WIZBAN_LIBRARY);
}
@Override
public void initialize(IScriptProject project,
IBuildpathEntry[] currentEntries) {
this.scriptProject = project;
this.currentEntries = currentEntries;
}
public IScriptProject getScriptProject() {
return this.scriptProject;
}
public IBuildpathEntry[] getCurrentEntries() {
return this.currentEntries;
}
/**
* @since 2.0
*/
public abstract String getScriptNature();
}