package bndtools.wizards.workspace; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.File; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; 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.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.plugin.AbstractUIPlugin; import aQute.bnd.build.Project; import bndtools.Plugin; public class WorkspaceSetupWizardPage extends WizardPage { public static final String PROP_LOCATION = "location"; public static final String PROP_CLEAN_BUILD = "cleanBuild"; private final PropertyChangeSupport propSupport = new PropertyChangeSupport(this); private final WorkspaceLocationPart locationPart = new WorkspaceLocationPart(); private LocationSelection location = LocationSelection.WORKSPACE; private boolean cleanBuild = true; private Image bannerImg; public WorkspaceSetupWizardPage() { super("Workspace Setup"); } @Override public void createControl(Composite parent) { setTitle("Setup Bnd Workspace"); setDescription("Create a workspace folder with initial configuration"); setImageDescriptor(Plugin.imageDescriptorFromPlugin("icons/bndtools-wizban.png")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); layout.verticalSpacing = 20; composite.setLayout(layout); setControl(composite); bannerImg = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, "banner.png").createImage(parent.getDisplay()); Label lblBanner = new Label(composite, SWT.NONE); lblBanner.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); lblBanner.setImage(bannerImg); Control locationControl = locationPart.createControl(composite); locationControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); locationPart.addPropertyChangeListener(WorkspaceLocationPart.PROP_LOCATION, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { LocationSelection oldLocation = location; location = locationPart.getLocation(); propSupport.firePropertyChange(PROP_LOCATION, oldLocation, location); updateUI(); } }); Group buildGroup = new Group(composite, SWT.NONE); buildGroup.setText("Build"); buildGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); buildGroup.setLayout(new GridLayout(1, false)); final Button btnCleanBuild = new Button(buildGroup, SWT.CHECK); btnCleanBuild.setText("Clean workspace after import (Recommended)"); btnCleanBuild.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false)); btnCleanBuild.setSelection(cleanBuild); btnCleanBuild.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { cleanBuild = btnCleanBuild.getSelection(); updateUI(); } }); updateUI(); } private void updateUI() { String warning = cleanBuild ? null : "Existing Bnd projects may not build until the workspace is cleaned."; // Check for existing workspace/cnf IProject cnfProject = ResourcesPlugin.getWorkspace().getRoot().getProject(Project.BNDCNF); if (cnfProject != null && cnfProject.exists()) { File cnfDir = cnfProject.getLocation().toFile(); warning = String.format("This Eclipse workspace is already configured as a Bnd workspace. You will not be able to create or import a Bnd workspace from elsewhere.", cnfDir); } setMessage(warning, WARNING); String locationError = location.validate(); setErrorMessage(locationError); setPageComplete(locationError == null); } @Override public void dispose() { super.dispose(); bannerImg.dispose(); } public void setLocation(LocationSelection location) { this.location = location; locationPart.setLocation(location); } public LocationSelection getLocation() { return location; } public void setCleanBuild(boolean cleanBuild) { this.cleanBuild = cleanBuild; } public boolean isCleanBuild() { return cleanBuild; } public void addPropertyChangeListener(PropertyChangeListener listener) { propSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propSupport.removePropertyChangeListener(listener); } public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { propSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { propSupport.removePropertyChangeListener(propertyName, listener); } }