package bndtools.preferences.ui; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ProjectScope; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.dialogs.PropertyPage; import org.eclipse.ui.preferences.ScopedPreferenceStore; import bndtools.Plugin; import bndtools.preferences.CompileErrorAction; public class BndProjectPropertyPage extends PropertyPage { private CompileErrorAction action; public BndProjectPropertyPage() { setTitle("Bndtools"); } /** * Create contents of the property page. * * @param parent */ @Override public Control createContents(Composite parent) { // CREATE CONTROLS Composite container = new Composite(parent, SWT.NULL); container.setLayout(new GridLayout(1, false)); Group grpJavaCompilationErrors = new Group(container, SWT.NONE); grpJavaCompilationErrors.setLayout(new GridLayout(1, false)); grpJavaCompilationErrors.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); grpJavaCompilationErrors.setText("Java Compilation Errors"); Label lblHowShouldBndtools = new Label(grpJavaCompilationErrors, SWT.WRAP); lblHowShouldBndtools.setBounds(0, 0, 59, 14); lblHowShouldBndtools.setText("How should Bndtools proceed when Java compilation errors exist?"); final Button btnDelete = new Button(grpJavaCompilationErrors, SWT.RADIO); btnDelete.setText("Delete the output bundle"); final Button btnSkip = new Button(grpJavaCompilationErrors, SWT.RADIO); btnSkip.setText("Skip building the output bundle (default)"); final Button btnContinue = new Button(grpJavaCompilationErrors, SWT.RADIO); btnContinue.setText("Continue building the bundle"); // LOAD DATA IPreferenceStore store = getPreferenceStore(); action = CompileErrorAction.parse(store.getString(CompileErrorAction.PREFERENCE_KEY)); switch (action) { case delete : btnDelete.setSelection(true); btnSkip.setSelection(false); btnContinue.setSelection(false); break; case skip : default : btnDelete.setSelection(false); btnSkip.setSelection(true); btnContinue.setSelection(false); break; case build : btnDelete.setSelection(false); btnSkip.setSelection(false); btnContinue.setSelection(true); break; } // LISTENERS SelectionAdapter errorActionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (btnDelete.getSelection()) action = CompileErrorAction.delete; else if (btnSkip.getSelection()) action = CompileErrorAction.skip; else if (btnContinue.getSelection()) action = CompileErrorAction.build; } }; btnDelete.addSelectionListener(errorActionListener); btnSkip.addSelectionListener(errorActionListener); btnContinue.addSelectionListener(errorActionListener); return container; } IProject getProject() { IAdaptable elem = getElement(); if (elem instanceof IProject) return (IProject) elem; IProject project = (IProject) elem.getAdapter(IProject.class); if (project != null) return project; throw new IllegalArgumentException("Target element does not adapt to IProject"); } @Override public boolean performOk() { IPreferenceStore store = getPreferenceStore(); store.setValue(CompileErrorAction.PREFERENCE_KEY, action.name()); return true; } @Override protected IPreferenceStore doGetPreferenceStore() { return new ScopedPreferenceStore(new ProjectScope(getProject()), Plugin.PLUGIN_ID); } }