r2055 - trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field
Author: tchemit Date: 2011-01-25 15:52:19 +0100 (Tue, 25 Jan 2011) New Revision: 2055 Url: http://nuiton.org/repositories/revision/nuiton-utils/2055 Log: use last version of CollectionUnique validator with nullValueSkipped feature Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/CollectionUniqueKeyValidator.java Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/CollectionUniqueKeyValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/CollectionUniqueKeyValidator.java 2011-01-25 14:38:26 UTC (rev 2054) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/CollectionUniqueKeyValidator.java 2011-01-25 14:52:19 UTC (rev 2055) @@ -84,6 +84,14 @@ */ protected String againstIndexExpression; + /** + * Pour ne pas traiter les valeurs nulles (si positionné à {@code true} les + * valeurs nulles ne sont pas considérée comme unique). + * + * @since 2.2.6 + */ + protected boolean nullValueSkipped; + public String getCollectionFieldName() { return collectionFieldName; } @@ -128,6 +136,14 @@ this.againstMe = againstMe; } + public boolean isNullValueSkipped() { + return nullValueSkipped; + } + + public void setNullValueSkipped(boolean nullValueSkipped) { + this.nullValueSkipped = nullValueSkipped; + } + @Override public void validate(Object object) throws ValidationException { @@ -175,16 +191,31 @@ if (log.isDebugEnabled()) { log.debug("hash for new key " + againstHashCode); } + + if (againstHashCode == null && nullValueSkipped) { + + // clef nulle, donc pas d'erreur vu que le flag a ete positionne + return; + } List<Integer> hashCodes = new ArrayList<Integer>(); int index = 0; for (Object o : col) { Integer hash = getUniqueKeyHashCode(o); + if (log.isDebugEnabled()) { log.debug("hash for object " + o + " = " + hash); } + + if (hash == null && nullValueSkipped) { + + // clef nulle, donc pas d'erreur vu que le flag a ete positionne + continue; + } + if (againstBean == null) { if (hashCodes.contains(hash)) { + // on a deja rencontre cette clef unique, // donc la validation a echouee answer = false; @@ -238,6 +269,12 @@ HashCodeBuilder builder = new HashCodeBuilder(); for (String key : keys) { Object property = getFieldValue(key, o); + if (property == null && nullValueSkipped) { + // une valeur nulle a ete trouvee et le flag de skip est positionne + // on retourne alors null comme cas limite + return null; + } + builder.append(property); } return builder.toHashCode();
participants (1)
-
tchemit@users.nuiton.org