package edu.ualberta.med.biobank.mvp.view.form; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import com.pietschy.gwt.pectin.client.value.ValueHolder; import com.pietschy.gwt.pectin.client.value.ValueTarget; import edu.ualberta.med.biobank.mvp.user.ui.HasButton; import edu.ualberta.med.biobank.mvp.view.AbstractView; import edu.ualberta.med.biobank.mvp.view.IFormView; import edu.ualberta.med.biobank.mvp.view.form.ToolBarButtonManager.ButtonType; import edu.ualberta.med.biobank.mvp.view.widget.DelegatingButton; public abstract class AbstractFormView extends AbstractView implements IFormView, IHasEditor { protected final DelegatingButton reload = new DelegatingButton(); protected final DelegatingButton close = new DelegatingButton(); protected FormViewEditorPart editor; private final ValueTarget<Object> identifier = new ValueHolder<Object>(); private BaseForm form; @Override public void setEditor(FormViewEditorPart editor) { this.editor = editor; } @Override public void close() { if (editor != null) { IWorkbenchPage page = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); page.closeEditor(editor, true); editor = null; } } @Override public HasButton getClose() { return close; } @Override public HasButton getReload() { return reload; } @Override public ValueTarget<Object> getIdentifier() { return identifier; } public BaseForm getForm() { return form; } @Override protected final void onCreate(Composite parent) { form = new BaseForm(parent); initActions(); onCreate(form); form.adapt(); form.reflow(true); } protected abstract void onCreate(BaseForm baseForm); private void initActions() { HasButton closeButton = form.getToolbar().get(ButtonType.CLOSE); HasButton reloadButton = form.getToolbar().get(ButtonType.RELOAD); close.setDelegate(closeButton); reload.setDelegate(reloadButton); } }