diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractValidatingDialog.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractValidatingDialog.java | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractValidatingDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractValidatingDialog.java new file mode 100644 index 0000000000..1ff3f874cd --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractValidatingDialog.java @@ -0,0 +1,113 @@ +/******************************************************************************* + * Copyright (c) 2008 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.ui.internal.widgets; + +import org.eclipse.jpt.utility.internal.node.Node; +import org.eclipse.jpt.utility.internal.node.Problem; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.widgets.Shell; + +/** + * This dialog is similar to it superclass, <code>AbstractDialog</code>, with + * the added value of an error message label below the main panel. A subclass + * can set this error message as needed so that it can inform the user something + * incorrect has been entered. + * <p> + * If there is an error message, it will be shown. If there is a warning + * message, it will only be shown if there is no error message. Warning messages + * have a different icon than error messages. + * + * @version 2.0 + * @since 2.0 + */ +public abstract class AbstractValidatingDialog<T extends Node> extends AbstractDialog<T> { + + /** + * Creates a new <code>AbstractValidatingDialog</code>. + * + * @param parent The parent shell + */ + public AbstractValidatingDialog(Shell parent) { + super(parent); + } + + /** + * Creates a new <code>AbstractValidatingDialog</code>. + * + * @param parent The parent shell + * @param title The dialog's title + */ + public AbstractValidatingDialog(Shell parent, String title) { + super(parent, title); + } + + /* + * (non-Javadoc) + */ + @Override + Node.Validator buildValidator() { + return new Node.Validator() { + public void pause() { + } + + public void resume() { + } + + public void validate() { + AbstractValidatingDialog.this.validate(); + } + }; + } + + protected void clearErrorMessage() { + setErrorMessage(null); + } + + /* + * (non-Javadoc) + */ + @Override + boolean hasTitleArea() { + return true; + } + + /** + * convenience method for simple error message + */ + protected void setErrorMessageKey(String key, Object... argument) { + setErrorMessage(NLS.bind(key, argument)); + } + + /** + * Updates the error message, either shows the first error problem or hides + * the error pane. If the progress bar is shown, then the error message will + * not be shown. + */ + private void updateErrorMessage() { + if (subject().hasBranchProblems()) { + Problem problem = subject().branchProblems().next(); + setErrorMessageKey(problem.messageKey(), problem.messageArguments()); + } + // TODO: It would be nice to add warnings to the model +// else if (this.subject().hasBranchWarnings()) { +// Problem problem = this.subject().branchWarnings().next(); +// this.setWarningMessageKey(problem.getMessageKey(), problem.getMessageArguments()); +// } + else { + clearErrorMessage(); + } + } + + private void validate() { + subject().validateBranch(); + updateErrorMessage(); + getButton(OK).setEnabled(!subject().hasBranchProblems()); + } +} |