/**
* Copyright (c) 2012 by JP Moresmau
* This code is made available under the terms of the Eclipse Public License,
* version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html
*/
package net.sf.eclipsefp.haskell.ui.dialog;
import java.util.Observable;
import java.util.Observer;
import org.eclipse.jface.dialogs.IMessageProvider;
/**
* validation status
* @author JP Moresmau
*
*/
public abstract class Validator implements Observer {
private ValidatorManager fManager;
private String fMessage;
private int status=IMessageProvider.NONE;
private boolean fPageComplete=false;
public Validator() {
fManager = null;
}
public Validator( final ValidatorManager manager ) {
setManager( manager );
}
public void setManager( final ValidatorManager manager ) {
if( fManager == null ) {
fManager = manager;
manager.addValidator( this );
}
}
public String getMessage() {
return fMessage;
}
public void setMessage( final String message ) {
fMessage = message;
status=IMessageProvider.NONE;
}
public void setErrorMessage( final String message ) {
if (message!=null){
fMessage = message;
status=IMessageProvider.ERROR;
}
}
public void setWarningMessage( final String message ) {
if (message!=null){
fMessage = message;
status=IMessageProvider.WARNING;
}
}
public boolean isPageComplete() {
return fPageComplete;
}
public void setPageComplete( final boolean pageComplete ) {
fPageComplete = pageComplete;
}
public void setComplete() {
setMessage( null );
setStatus( IMessageProvider.NONE );
setPageComplete( true );
}
/**
* @return the status
*/
public int getStatus() {
return status;
}
/**
* @param status the status to set
*/
public void setStatus( final int status ) {
this.status = status;
}
public void setIncomplete( final String message){
setIncomplete( message, IMessageProvider.ERROR );
}
public void setIncomplete( final String message, final int status ) {
setMessage( message );
setStatus( status );
setPageComplete( false );
}
/**
* The only method that subclasses are required to implement.
* On entry, message and errorMessage are null, and pageComplete is true.
* Do validation and set state accordingly.
*/
protected abstract void doUpdate();
/**
* Do not override. Rather, override {@link #doUpdate}.
*/
public void update() {
setComplete();
doUpdate();
fManager.updatePage();
}
// //////////////////////////
// methods from Observable
@Override
public void update( final Observable o, final Object arg ) {
update();
}
}