|
From: <pat...@us...> - 2010-08-26 17:58:25
|
Revision: 1129
http://cishell.svn.sourceforge.net/cishell/?rev=1129&view=rev
Author: pataphil
Date: 2010-08-26 17:58:18 +0000 (Thu, 26 Aug 2010)
Log Message:
-----------
* Restructured how validation works.
* Not reviewed.
Modified Paths:
--------------
trunk/core/org.cishell.utility.datastructure/META-INF/MANIFEST.MF
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/DataModelField.java
trunk/core/org.cishell.utility.swt/META-INF/MANIFEST.MF
trunk/core/org.cishell.utility.swt/src/org/cishell/utility/swt/model/SWTModelField.java
Added Paths:
-----------
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/BasicFieldValidator.java
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/EmptyTextFieldValidationRule.java
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationAction.java
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationRule.java
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidator.java
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/UniqueValueValidationRule.java
trunk/core/org.cishell.utility.swt/src/org/cishell/utility/swt/model/field/
trunk/core/org.cishell.utility.swt/src/org/cishell/utility/swt/model/field/validation/
Removed Paths:
-------------
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationAction.java
trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationRule.java
trunk/core/org.cishell.utility.swt/src/org/cishell/utilities/swt/
Modified: trunk/core/org.cishell.utility.datastructure/META-INF/MANIFEST.MF
===================================================================
--- trunk/core/org.cishell.utility.datastructure/META-INF/MANIFEST.MF 2010-08-23 18:07:46 UTC (rev 1128)
+++ trunk/core/org.cishell.utility.datastructure/META-INF/MANIFEST.MF 2010-08-26 17:58:18 UTC (rev 1129)
@@ -9,5 +9,8 @@
org.cishell.utility.datastructure.datamodel.area,
org.cishell.utility.datastructure.datamodel.exception,
org.cishell.utility.datastructure.datamodel.field,
+ org.cishell.utility.datastructure.datamodel.field.validation,
org.cishell.utility.datastructure.datamodel.group,
org.cishell.utility.datastructure.datamodel.gui
+Import-Package: com.google.common.collect,
+ org.cishell.utilities
Modified: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/DataModelField.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/DataModelField.java 2010-08-23 18:07:46 UTC (rev 1128)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/DataModelField.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -2,7 +2,8 @@
import java.util.Collection;
-import org.cishell.utility.datastructure.datamodel.DataModel;
+import org.cishell.utility.datastructure.datamodel.field.validation.FieldValidationAction;
+import org.cishell.utility.datastructure.datamodel.field.validation.FieldValidator;
/**
* DataModelFields are the meat of DataModels.
@@ -20,10 +21,15 @@
public ValueType setValue(ValueType value);
public ValueType reset();
- public void addValidationRule(
- FieldValidationRule<ValueType> validator, boolean validateNow, DataModel model);
- public void addValidationAction(FieldValidationAction<ValueType> validationAction);
- public void validate(DataModel model);
+ /// Add a validator to that should validate this field.
+ public void addValidator(FieldValidator<ValueType> validator);
+ /// Add validators that should be considered when performing validation actions.
+ public void addOtherValidators(Collection<FieldValidator<ValueType>> otherValidators);
+ /// Add an action to perform, given if everything validated or not.
+ public void addValidationAction(FieldValidationAction action);
+ /// Notify everything that has added this field that this field has been disposed.
public void dispose();
+ /// Has this field been disposed?
+ public boolean isDisposed();
}
\ No newline at end of file
Deleted: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationAction.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationAction.java 2010-08-23 18:07:46 UTC (rev 1128)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationAction.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -1,12 +0,0 @@
-package org.cishell.utility.datastructure.datamodel.field;
-
-import java.util.Collection;
-
-import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
-
-public interface FieldValidationAction<ValueType> {
- public void fieldDoesValidate(DataModelField<ValueType> field);
- public void fieldDoesNotValidate(
- DataModelField<ValueType> field, Collection<ModelValidationException> reasons);
- public void fieldDisposed(DataModelField<ValueType> field);
-}
\ No newline at end of file
Deleted: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationRule.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationRule.java 2010-08-23 18:07:46 UTC (rev 1128)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationRule.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -1,10 +0,0 @@
-package org.cishell.utility.datastructure.datamodel.field;
-
-import org.cishell.utility.datastructure.datamodel.DataModel;
-import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
-
-public interface FieldValidationRule<ValueType> {
- public void validateField(DataModelField<ValueType> field, DataModel model)
- throws ModelValidationException;
- public void fieldDisposed(DataModelField<ValueType> field);
-}
\ No newline at end of file
Added: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/BasicFieldValidator.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/BasicFieldValidator.java (rev 0)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/BasicFieldValidator.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -0,0 +1,69 @@
+package org.cishell.utility.datastructure.datamodel.field.validation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.cishell.utility.datastructure.datamodel.DataModel;
+import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
+import org.cishell.utility.datastructure.datamodel.field.DataModelField;
+
+public class BasicFieldValidator<ValueType> implements FieldValidator<ValueType> {
+ private String baseFieldName;
+ private Collection<DataModelField<ValueType>> fieldsToValidate =
+ new HashSet<DataModelField<ValueType>>();
+ private Collection<FieldValidationRule<ValueType>> rules =
+ new HashSet<FieldValidationRule<ValueType>>();
+
+ public BasicFieldValidator(String baseFieldName) {
+ this.baseFieldName = baseFieldName;
+ }
+
+ public void addFieldToValidate(DataModelField<ValueType> field) {
+ this.fieldsToValidate.add(field);
+ }
+
+ public void addValidationRule(FieldValidationRule<ValueType> rule) {
+ this.rules.add(rule);
+ }
+
+ public Collection<String> runValidation(DataModel model) {
+ Collection<String> errorMessages = new ArrayList<String>();
+
+ for (DataModelField<ValueType> field : this.fieldsToValidate) {
+ String errorHeader = String.format(
+ "(%s%s, %s): ", this.baseFieldName, field.getName(), field.getValue().toString());
+
+ for (FieldValidationRule<ValueType> rule : this.rules) {
+ try {
+ rule.validateField(field, model);
+ } catch (ModelValidationException e) {
+ String errorMessage = errorHeader + e.getMessage();
+ errorMessages.add(errorMessage);
+ }
+ }
+ }
+
+ return errorMessages;
+ }
+
+ public void fieldUpdated(DataModelField<ValueType> field) {
+ for (FieldValidationRule<ValueType> rule : this.rules) {
+ rule.fieldUpdated(field);
+ }
+ }
+
+ public void fieldsUpdated(Collection<DataModelField<ValueType>> fields) {
+ for (FieldValidationRule<ValueType> rule : this.rules) {
+ rule.fieldsUpdated(fields);
+ }
+ }
+
+ public void fieldDisposed(DataModelField<ValueType> field) {
+ for (FieldValidationRule<ValueType> rule : this.rules) {
+ rule.fieldDisposed(field);
+ }
+
+ this.fieldsToValidate.remove(field);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/EmptyTextFieldValidationRule.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/EmptyTextFieldValidationRule.java (rev 0)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/EmptyTextFieldValidationRule.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -0,0 +1,27 @@
+package org.cishell.utility.datastructure.datamodel.field.validation;
+
+import java.util.Collection;
+
+import org.cishell.utilities.StringUtilities;
+import org.cishell.utility.datastructure.datamodel.DataModel;
+import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
+import org.cishell.utility.datastructure.datamodel.field.DataModelField;
+
+public class EmptyTextFieldValidationRule implements FieldValidationRule<String> {
+ public void validateField(DataModelField<String> field, DataModel model)
+ throws ModelValidationException {
+ if (StringUtilities.isNull_Empty_OrWhitespace(field.getValue())) {
+ String exceptionMessage = "Field may not be empty.";
+ throw new ModelValidationException(exceptionMessage);
+ }
+ }
+
+ public void fieldUpdated(DataModelField<String> field) {
+ }
+
+ public void fieldsUpdated(Collection<DataModelField<String>> fields) {
+ }
+
+ public void fieldDisposed(DataModelField<String> field) {
+ }
+}
\ No newline at end of file
Copied: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationAction.java (from rev 1128, trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationAction.java)
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationAction.java (rev 0)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationAction.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -0,0 +1,8 @@
+package org.cishell.utility.datastructure.datamodel.field.validation;
+
+import java.util.Collection;
+
+public interface FieldValidationAction {
+ public void doesValidate();
+ public void doesNotValidate(Collection<String> errorMessages);
+}
\ No newline at end of file
Property changes on: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationAction.java
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationRule.java (from rev 1128, trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/FieldValidationRule.java)
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationRule.java (rev 0)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationRule.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -0,0 +1,16 @@
+package org.cishell.utility.datastructure.datamodel.field.validation;
+
+import java.util.Collection;
+
+import org.cishell.utility.datastructure.datamodel.DataModel;
+import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
+import org.cishell.utility.datastructure.datamodel.field.DataModelField;
+
+public interface FieldValidationRule<ValueType> {
+ public void validateField(DataModelField<ValueType> field, DataModel model)
+ throws ModelValidationException;
+ /// Update any internal states as necessary.
+ public void fieldUpdated(DataModelField<ValueType> field);
+ public void fieldsUpdated(Collection<DataModelField<ValueType>> fields);
+ public void fieldDisposed(DataModelField<ValueType> field);
+}
\ No newline at end of file
Property changes on: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidationRule.java
___________________________________________________________________
Added: svn:mergeinfo
+
Added: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidator.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidator.java (rev 0)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/FieldValidator.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -0,0 +1,26 @@
+package org.cishell.utility.datastructure.datamodel.field.validation;
+
+import java.util.Collection;
+
+import org.cishell.utility.datastructure.datamodel.DataModel;
+import org.cishell.utility.datastructure.datamodel.field.DataModelField;
+
+/**
+ * FieldValidators potentially validate multiple fields all in one batch.
+ * Fields may need multiple FieldValidators if they belong to multiple groupings of
+ * validation rules ({@link FieldValidationRule}).
+ */
+public interface FieldValidator<ValueType> {
+ /// Add a field to perform validation on.
+ public void addFieldToValidate(DataModelField<ValueType> field);
+ /// Add a validation rule that this validator should use for validation.
+ public void addValidationRule(FieldValidationRule<ValueType> rule);
+ /// Update any internal states as necessary.
+ public void fieldUpdated(DataModelField<ValueType> field);
+ /// Update any internal states as necessary.
+ public void fieldsUpdated(Collection<DataModelField<ValueType>> fields);
+ /// Perform validation on all fields added for validation.
+ public Collection<String> runValidation(DataModel model);
+ /// Called by the field when the field has been disposed.
+ public void fieldDisposed(DataModelField<ValueType> field);
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/UniqueValueValidationRule.java
===================================================================
--- trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/UniqueValueValidationRule.java (rev 0)
+++ trunk/core/org.cishell.utility.datastructure/src/org/cishell/utility/datastructure/datamodel/field/validation/UniqueValueValidationRule.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -0,0 +1,57 @@
+package org.cishell.utility.datastructure.datamodel.field.validation;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.cishell.utilities.MapUtilities;
+import org.cishell.utilities.StringUtilities;
+import org.cishell.utility.datastructure.datamodel.DataModel;
+import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
+import org.cishell.utility.datastructure.datamodel.field.DataModelField;
+
+public class UniqueValueValidationRule<ValueType> implements FieldValidationRule<ValueType> {
+ private String baseFieldName;
+ private Map<String, ValueType> fieldValuesByNames = new HashMap<String, ValueType>();
+// private Multimap<ValueType, String> fieldNamesByValues = HashMultimap.create();
+
+ public UniqueValueValidationRule(String baseFieldName) {
+ this.baseFieldName = baseFieldName;
+ }
+
+ public void validateField(DataModelField<ValueType> field, DataModel model)
+ throws ModelValidationException {
+ String fieldName = field.getName();
+ ValueType fieldValue = field.getValue();
+ Collection<String> fieldNameForFiltering = Arrays.asList(fieldName);
+ @SuppressWarnings("unchecked")
+ Collection<ValueType> fieldValueForFiltering = Arrays.asList(fieldValue);
+
+ this.fieldValuesByNames.put(fieldName, fieldValue);
+ Collection<String> namesOfFieldsWithValue = MapUtilities.getValidKeysOfTypesInMap(
+ this.fieldValuesByNames, fieldValueForFiltering, fieldNameForFiltering);
+
+ if (namesOfFieldsWithValue.size() > 0) {
+ String exceptionMessage = String.format(
+ "Field's value must be identical. Matches %sfields: [%s]",
+ this.baseFieldName,
+ StringUtilities.implodeItems(namesOfFieldsWithValue, ", "));
+ throw new ModelValidationException(exceptionMessage);
+ }
+ }
+
+ public void fieldUpdated(DataModelField<ValueType> field) {
+ this.fieldValuesByNames.put(field.getName(), field.getValue());
+ }
+
+ public void fieldsUpdated(Collection<DataModelField<ValueType>> fields) {
+ for (DataModelField<ValueType> field : fields) {
+ fieldUpdated(field);
+ }
+ }
+
+ public void fieldDisposed(DataModelField<ValueType> field) {
+ this.fieldValuesByNames.remove(field.getName());
+ }
+}
\ No newline at end of file
Modified: trunk/core/org.cishell.utility.swt/META-INF/MANIFEST.MF
===================================================================
--- trunk/core/org.cishell.utility.swt/META-INF/MANIFEST.MF 2010-08-23 18:07:46 UTC (rev 1128)
+++ trunk/core/org.cishell.utility.swt/META-INF/MANIFEST.MF 2010-08-26 17:58:18 UTC (rev 1129)
@@ -13,6 +13,7 @@
org.cishell.utility.datastructure.datamodel.area,
org.cishell.utility.datastructure.datamodel.exception,
org.cishell.utility.datastructure.datamodel.field,
+ org.cishell.utility.datastructure.datamodel.field.validation,
org.cishell.utility.datastructure.datamodel.group,
org.cishell.utility.datastructure.datamodel.gui
Export-Package: org.cishell.utility.swt,
Modified: trunk/core/org.cishell.utility.swt/src/org/cishell/utility/swt/model/SWTModelField.java
===================================================================
--- trunk/core/org.cishell.utility.swt/src/org/cishell/utility/swt/model/SWTModelField.java 2010-08-23 18:07:46 UTC (rev 1128)
+++ trunk/core/org.cishell.utility.swt/src/org/cishell/utility/swt/model/SWTModelField.java 2010-08-26 17:58:18 UTC (rev 1129)
@@ -7,11 +7,10 @@
import org.cishell.utility.datastructure.datamodel.DataModel;
import org.cishell.utility.datastructure.datamodel.ModelDataSynchronizer;
-import org.cishell.utility.datastructure.datamodel.exception.ModelValidationException;
import org.cishell.utility.datastructure.datamodel.field.DataModelField;
import org.cishell.utility.datastructure.datamodel.field.DataModelFieldContainer;
-import org.cishell.utility.datastructure.datamodel.field.FieldValidationAction;
-import org.cishell.utility.datastructure.datamodel.field.FieldValidationRule;
+import org.cishell.utility.datastructure.datamodel.field.validation.FieldValidationAction;
+import org.cishell.utility.datastructure.datamodel.field.validation.FieldValidator;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
@@ -23,6 +22,7 @@
DataSynchronizerType extends ModelDataSynchronizer<ValueType>>
implements DataModelField<ValueType> {
private Set<DataModelFieldContainer> containers = new HashSet<DataModelFieldContainer>();
+ private DataModel model;
private String name;
private Composite parentComponent;
private ValueType defaultValue;
@@ -30,18 +30,22 @@
private ValueType value;
private BaseGUIComponentType widget;
private DataSynchronizerType dataSynchronizer;
- private Collection<FieldValidationRule<ValueType>> validators =
- new ArrayList<FieldValidationRule<ValueType>>();
- private Collection<FieldValidationAction<ValueType>> validationActions =
- new ArrayList<FieldValidationAction<ValueType>>();
+ private Collection<FieldValidator<ValueType>> validators =
+ new ArrayList<FieldValidator<ValueType>>();
+ private Collection<FieldValidator<ValueType>> otherValidators =
+ new ArrayList<FieldValidator<ValueType>>();
+ private Collection<FieldValidationAction> validationActions =
+ new HashSet<FieldValidationAction>();
+ private boolean isDisposed = false;
public SWTModelField(
- final DataModel model,
+ DataModel model,
String name,
Composite parentComponent,
ValueType defaultValue,
BaseGUIComponentType widget,
DataSynchronizerType dataSynchronizer) {
+ this.model = model;
this.name = name;
this.parentComponent = parentComponent;
this.defaultValue = defaultValue;
@@ -55,7 +59,7 @@
SWTModelField.this.previousValue = SWTModelField.this.value;
SWTModelField.this.value =
SWTModelField.this.dataSynchronizer.synchronizeFromGUI();
- validate(model);
+ validate();
}
}
});
@@ -111,63 +115,74 @@
return this.value;
}
- public void addValidationRule(
- FieldValidationRule<ValueType> validator, boolean validateNow, DataModel model) {
+ public void addValidator(FieldValidator<ValueType> validator) {
+ validator.addFieldToValidate(this);
this.validators.add(validator);
-
- if (validateNow) {
- validate(model);
- }
}
- public void addValidationAction(FieldValidationAction<ValueType> validationAction) {
- this.validationActions.add(validationAction);
+ public void addOtherValidators(Collection<FieldValidator<ValueType>> validators) {
+ this.otherValidators.addAll(validators);
}
- public void validate(DataModel model) {
- Collection<ModelValidationException> reasonsInvalid = attemptValidation(model);
- performValidationActions(model, reasonsInvalid);
+ public void addValidationAction(FieldValidationAction action) {
+ this.validationActions.add(action);
}
public void dispose() {
+ this.isDisposed = true;
+
for (DataModelFieldContainer container : this.containers) {
container.fieldDisposed(this);
}
- for (FieldValidationRule<ValueType> validator : this.validators) {
+ for (FieldValidator<ValueType> validator : this.validators) {
validator.fieldDisposed(this);
}
- for (FieldValidationAction<ValueType> validationAction : this.validationActions) {
- validationAction.fieldDisposed(this);
- }
+ validate();
}
- private Collection<ModelValidationException> attemptValidation(DataModel model) {
- Collection<ModelValidationException> reasonsInvalid =
- new ArrayList<ModelValidationException>();
+ public boolean isDisposed() {
+ return this.isDisposed;
+ }
- for (FieldValidationRule<ValueType> validator : this.validators) {
- try {
- validator.validateField(this, model);
- } catch (ModelValidationException e) {
- reasonsInvalid.add(e);
- }
- }
+ public void validate() {
+ Collection<String> errorMessages = attemptValidation(model);
+ performValidationActions(this.model, errorMessages);
+ }
- return reasonsInvalid;
+ private Collection<String> attemptValidation(DataModel model) {
+ Collection<String> errorMessages = attemptValidationOnValidators(this.validators, true);
+ errorMessages.addAll(attemptValidationOnValidators(this.otherValidators, false));
+
+ return errorMessages;
}
- private void performValidationActions(
- DataModel model, Collection<ModelValidationException> reasonsInvalid) {
- if (reasonsInvalid.size() == 0) {
- for (FieldValidationAction<ValueType> validationAction : this.validationActions) {
- validationAction.fieldDoesValidate(this);
+ private void performValidationActions(DataModel model, Collection<String> errorMessages) {
+ if (errorMessages.size() == 0) {
+ for (FieldValidationAction validationAction : this.validationActions) {
+ validationAction.doesValidate();
}
} else {
- for (FieldValidationAction<ValueType> validationAction : this.validationActions) {
- validationAction.fieldDoesNotValidate(this, reasonsInvalid);
+ for (FieldValidationAction validationAction : this.validationActions) {
+ validationAction.doesNotValidate(errorMessages);
}
}
}
+
+ private Collection<String> attemptValidationOnValidators(
+ Collection<FieldValidator<ValueType>> validators, boolean update) {
+ Collection<String> errorMessages = new ArrayList<String>();
+
+ for (FieldValidator<ValueType> validator : validators) {
+ if (update && !this.isDisposed) {
+ validator.fieldUpdated(this);
+ }
+
+ Collection<String> temporaryErrorMessage = validator.runValidation(model);
+ errorMessages.addAll(temporaryErrorMessage);
+ }
+
+ return errorMessages;
+ }
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|