Skip to content
This repository has been archived by the owner on Apr 3, 2018. It is now read-only.

Commit

Permalink
Intermediate refactoring, remove ValidationSourceX
Browse files Browse the repository at this point in the history
  • Loading branch information
bruno-medeiros committed Sep 16, 2016
1 parent c2edcc2 commit bb66cc5
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 45 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -143,15 +143,14 @@ public void setVisible(boolean visible) {


public static class NameGroup extends CompositeWidget { public static class NameGroup extends CompositeWidget {


protected TextFieldWidget textField = new TextFieldWidget(WizardMessages.LangNewProject_NameGroup_label); protected final TextFieldWidget textField = new TextFieldWidget(WizardMessages.LangNewProject_NameGroup_label);


public NameGroup() { public NameGroup() {
super(true); super(true);
addChildWidget(textField); addChildWidget(textField);
this.layoutColumns = 2; this.layoutColumns = 2;


ValidationSourceX validationSource = this::validateProjectName; validation.addFieldValidationX(true, textField, this::validateProjectName);
validation.addFieldValidation(true, textField, validationSource);
} }


public String getName() { public String getName() {
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@
import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Control;


import melnorme.util.swt.SWTUtil; import melnorme.util.swt.SWTUtil;
import melnorme.utilbox.core.fntypes.RunnableX;
import melnorme.utilbox.fields.Field; import melnorme.utilbox.fields.Field;
import melnorme.utilbox.fields.FieldValueListener; import melnorme.utilbox.fields.FieldValueListener;
import melnorme.utilbox.fields.FieldValueListener.FieldChangeListener; import melnorme.utilbox.fields.FieldValueListener.FieldChangeListener;
import melnorme.utilbox.fields.validation.IValidatableField; import melnorme.utilbox.fields.validation.IValidatableField;
import melnorme.utilbox.fields.validation.ValidationField; import melnorme.utilbox.fields.validation.ValidationField;
import melnorme.utilbox.fields.validation.ValidationSource; import melnorme.utilbox.fields.validation.ValidationSource;
import melnorme.utilbox.fields.validation.Validator; import melnorme.utilbox.fields.validation.Validator;
import melnorme.utilbox.status.StatusException;
import melnorme.utilbox.fields.IField; import melnorme.utilbox.fields.IField;


/** /**
Expand Down Expand Up @@ -136,8 +138,8 @@ public void addFieldValidation(boolean init, ValidationSource validationSource)
getValidation().addFieldValidation(init, this, validationSource); getValidation().addFieldValidation(init, this, validationSource);
} }


public void addFieldValidationX(boolean init, ValidationSourceX validationSource) { public void addFieldValidationX(boolean init, RunnableX<StatusException> validationSource) {
getValidation().addFieldValidation(init, this, validationSource); getValidation().addFieldValidationX(init, this, validationSource);
} }


} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@
package melnorme.utilbox.fields.validation; package melnorme.utilbox.fields.validation;


import melnorme.utilbox.collections.ArrayList2; import melnorme.utilbox.collections.ArrayList2;
import melnorme.utilbox.core.fntypes.RunnableX;
import melnorme.utilbox.fields.Field; import melnorme.utilbox.fields.Field;
import melnorme.utilbox.fields.IFieldView; import melnorme.utilbox.fields.IFieldView;
import melnorme.utilbox.status.IStatusMessage; import melnorme.utilbox.status.IStatusMessage;
import melnorme.utilbox.status.StatusException;


public class ValidationField extends Field<IStatusMessage> implements ValidationSource { public class ValidationField extends Field<IStatusMessage> implements ValidationSource {


Expand All @@ -31,8 +33,9 @@ public <SOURCE> void addFieldValidator(boolean init, IFieldView<SOURCE> field, V
addFieldValidation(init, field, new ValidatableField<>(field, validator)); addFieldValidation(init, field, new ValidatableField<>(field, validator));
} }


public final void addFieldValidationX(boolean init, IFieldView<?> field, ValidationSourceX validationSource) { public final void addFieldValidationX(boolean init, IFieldView<?> field,
addFieldValidation(init, field, validationSource); RunnableX<StatusException> validationRunnable) {
addFieldValidation(init, field, ValidationSource.fromRunnable(validationRunnable));
} }


public void addFieldValidation(boolean init, IFieldView<?> field, ValidationSource validationSource) { public void addFieldValidation(boolean init, IFieldView<?> field, ValidationSource validationSource) {
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -14,60 +14,42 @@


import java.util.function.Supplier; import java.util.function.Supplier;


import melnorme.utilbox.core.fntypes.RunnableX;
import melnorme.utilbox.status.IStatusMessage; import melnorme.utilbox.status.IStatusMessage;
import melnorme.utilbox.status.StatusException; import melnorme.utilbox.status.StatusException;
import melnorme.utilbox.status.StatusLevel;


public interface ValidationSource { public interface ValidationSource {


/**
* Provide a validation status.
* @return the validation {@link IStatusMessage}, or null if none.
*/
public IStatusMessage getValidationStatus(); public IStatusMessage getValidationStatus();


default StatusLevel getValidationStatusLevel() {
IStatusMessage se = getValidationStatus();
return se == null ? StatusLevel.OK : se.getSeverity().toStatusLevel();
}


/*FIXME: review this */
default void validate() throws StatusException { default void validate() throws StatusException {
IStatusMessage validationStatus = getValidationStatus(); throwValidation(getValidationStatus());
}

/* ----------------- ----------------- */

public static void throwValidation(IStatusMessage validationStatus) throws StatusException {
if(validationStatus != null) { if(validationStatus != null) {
throw validationStatus.toStatusException(); throw validationStatus.toStatusException();
} }
} }


/** public static ValidationSource fromRunnable(RunnableX<StatusException> validationRunnable) {
* Essentially the same as {@link ValidationSource}, but for implementers return () -> validateFromRunnable(validationRunnable);
* wishing to implement the {@link #validate()} method instead of {@link #getValidationStatus()}.
*/
public static interface ValidationSourceX extends ValidationSource {

@Override
default IStatusMessage getValidationStatus() {
try {
validate();
return null;
} catch(StatusException e) {
return e;
}
}

@Override
abstract void validate() throws StatusException;

} }


public static class ValidatableField<SOURCE> implements ValidationSourceX { public static StatusException validateFromRunnable(RunnableX<StatusException> runnable) {

try {
public final Supplier<SOURCE> property; runnable.run();
public final Validator<SOURCE, ?> validator; return null;

} catch(StatusException e) {
public ValidatableField(Supplier<SOURCE> field, Validator<SOURCE, ?> validator) { return e;
this.property = assertNotNull(field);
this.validator = assertNotNull(validator);
}

@Override
public void validate() throws StatusException {
validator.validateField(property.get());
} }
} }


Expand All @@ -88,4 +70,23 @@ static IStatusMessage getHighestStatus(Iterable<? extends ValidationSource> vali
return highestSE; return highestSE;
} }


/* ----------------- ----------------- */

public static class ValidatableField<SOURCE> implements ValidationSource {

public final Supplier<SOURCE> property;
public final Validator<SOURCE, ?> validator;

public ValidatableField(Supplier<SOURCE> field, Validator<SOURCE, ?> validator) {
this.property = assertNotNull(field);
this.validator = assertNotNull(validator);
}

@Override
public IStatusMessage getValidationStatus() {
return validateFromRunnable(() -> validator.validateField(property.get()));
}

}

} }

0 comments on commit bb66cc5

Please sign in to comment.