package edu.ualberta.med.biobank.gui.common.dialogs; import org.eclipse.core.databinding.observable.ChangeEvent; import org.eclipse.core.databinding.observable.IChangeListener; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.widgets.Composite; import edu.ualberta.med.biobank.gui.common.widgets.utils.BgcWidgetCreator; public abstract class BgcWizardPage extends WizardPage { private BgcWidgetCreator widgetCreator; protected BgcWizardPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); widgetCreator = new BgcWidgetCreator(null); widgetCreator.initDataBinding(); } @Override public void createControl(Composite parent) { try { createDialogAreaInternal(parent); } catch (Exception e) { throw new RuntimeException(e); } bindChangeListener(); } protected abstract void createDialogAreaInternal(Composite parent) throws Exception; private void bindChangeListener() { final IObservableValue statusObservable = new WritableValue(); statusObservable.addChangeListener(new IChangeListener() { @Override public void handleChange(ChangeEvent event) { IObservableValue validationStatus = (IObservableValue) event .getSource(); handleStatusChanged((IStatus) validationStatus.getValue()); } }); widgetCreator.addGlobalBindValue(statusObservable); } private void handleStatusChanged(IStatus status) { if (status.getSeverity() == IStatus.OK) { setErrorMessage(null); setPageComplete(true); } else { setErrorMessage(status.getMessage()); setPageComplete(false); } } protected BgcWidgetCreator getWidgetCreator() { return widgetCreator; } }