Java tutorial
/** * Copyright (c) 2015-2017 Angelo ZERR. * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation * */ package org.eclipse.tm4e.ui.internal.wizards; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; /** * Abstract class for wizard page. * */ public abstract class AbstractWizardPage extends WizardPage implements Listener { protected AbstractWizardPage(String pageName) { super(pageName); } protected AbstractWizardPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } @Override public final void createControl(Composite parent) { initializeDialogUnits(parent); // top level group Composite topLevel = new Composite(parent, SWT.NONE); topLevel.setLayout(new GridLayout()); topLevel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); topLevel.setFont(parent.getFont()); // Create Body UI createBody(topLevel); // initialize page with default values initializeDefaultValues(); // Validate page fields. // validateAndUpdateStatus(null); setControl(topLevel); } @Override public void handleEvent(Event event) { validateAndUpdateStatus(event); } private void validateAndUpdateStatus(Event event) { IStatus status = validatePage(event); statusChanged(status == null ? Status.OK_STATUS : status); } public void statusChanged(IStatus status) { setPageComplete(!status.matches(IStatus.ERROR)); applyToStatusLine(this, status); } /** * Applies the status to the status line of a dialog page. */ private static void applyToStatusLine(DialogPage page, IStatus status) { String message = Status.OK_STATUS.equals(status) ? null : status.getMessage(); switch (status.getSeverity()) { case IStatus.OK: page.setMessage(message, IMessageProvider.NONE); page.setErrorMessage(null); break; case IStatus.WARNING: page.setMessage(message, IMessageProvider.WARNING); page.setErrorMessage(null); break; case IStatus.INFO: page.setMessage(message, IMessageProvider.INFORMATION); page.setErrorMessage(null); break; default: if (message != null && message.length() == 0) { message = null; } page.setMessage(null); page.setErrorMessage(message); break; } } protected abstract void createBody(Composite parent); protected abstract void initializeDefaultValues(); protected abstract IStatus validatePage(Event event); }