blob: 1ff3f874cdfa401050b1da5487ec927164c16d5e [file] [log] [blame]
/*******************************************************************************
* 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());
}
}