/*******************************************************************************
* Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.ui.jface.interfaces;
import org.eclipse.jface.dialogs.IMessageProvider;
/**
* Interface to be implemented by container managing the validation
* of contained validatable sub elements.
*/
public interface IValidatingContainer {
public static class ValidationResult implements IMessageProvider {
private String message = null;
private int type = -1;
private boolean valid = true;
/**
* Set the result from the given message provider.
* If the provider is a ValidationResult, the valid state is used too.
* If the provider is <code>null</code>, the message is set to <code>null</code> and the type to IMessageProvider.NONE.
* The new result is set or not in the same way as setResult(type,message) or setResult(valid,type,message) works.
* @param provider The message provider or <code>null</code>.
*/
public void setResult(IMessageProvider provider) {
if (provider instanceof ValidationResult) {
setResult(provider.getMessage(), provider.getMessageType(), ((ValidationResult)provider).isValid());
}
else if (provider != null) {
setResult(provider.getMessage(), provider.getMessageType());
}
else {
setResult(null, NONE);
}
}
/**
* Set the message type and text,
* if type > actual type.
* @param message The message text.
* @param type The message type.
*/
public void setResult(String message, int type) {
if (this.type < type) {
this.message = message;
this.type = type;
}
}
/**
* Set the validation result, message type and text,
* if type > actual type or !valid.
* @param message The message text.
* @param type The message type.
* @param valid The validation result.
*/
public void setResult(String message, int type, boolean valid) {
if (this.type < type || (!valid && this.valid)) {
this.message = message;
this.type = type;
if (this.valid) {
this.valid = valid;
}
}
}
/**
* Set the message text.
* @param message The message text.
*/
public void setMessage(String message) {
this.message = message;
}
/**
* Set the message type.
* @param type The message type.
*/
public void setMessageType(int type) {
this.type = type;
}
/**
* Set the validation result.
* A validation can be valid even when message and message type are set.
* @param valid The validation result.
*/
public void setValid(boolean valid) {
this.valid = valid;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
*/
@Override
public String getMessage() {
return message;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
*/
@Override
public int getMessageType() {
return type;
}
/**
* Return <code>true</code> if the result can be seen as valid.
*/
public boolean isValid() {
return valid;
}
}
/**
* Validates the container status.
* <p>
* If necessary, set the corresponding messages and message types to signal when some sub
* elements of the container needs user attention.
*/
public void validate();
public void setMessage(String message, int messageType);
}