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. |