Author: bpoussin Date: 2013-02-15 15:38:58 +0100 (Fri, 15 Feb 2013) New Revision: 1527 Url: http://nuiton.org/projects/wikitty/repository/revisions/1527 Log: Evolution #2530: add default value tag for wikitty field definition Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java 2013-02-15 11:17:45 UTC (rev 1526) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java 2013-02-15 14:38:58 UTC (rev 1527) @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashSet; @@ -160,6 +161,10 @@ * @throws WikittyException if value can't be obtained */ public Object getValidValue(Object value) throws WikittyException { + if (value == null && hasDefault()) { + value = getDefault(); + } + if (value == null && isNotNull()) { throw new WikittyException("Value can't be null for this field"); } @@ -281,6 +286,27 @@ } /** + * @see #TAG_DEFAULT_VALUE + */ + public boolean hasDefault() { + return tagValues.containsKey(TAG_DEFAULT_VALUE); + } + + public Object getDefault() { + Object result = null; + + Object val = tagValues.get(TAG_DEFAULT_VALUE); + if (val != null) { + if (isCollection()) { + val = Collections.singleton(val); + } + result = getValidValue(val); + } + + return result; + } + + /** * @see #TAG_UNIQUE */ public boolean isUnique() { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java 2013-02-15 11:17:45 UTC (rev 1526) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java 2013-02-15 14:38:58 UTC (rev 1527) @@ -108,6 +108,23 @@ return result; } + /** + * Si le champs n'a pas de valeur (null) met en place la valeur par defaut + * + * @param w + * @param fqfield + * @param type + * @param value + */ + public Object checkDefault(Wikitty w, String fqfield, FieldType type, Object value) { + Object result = value; + if (value == null && type.hasDefault()) { + result = type.getDefault(); + w.setFqField(fqfield, result); + } + return result; + } + public Object getMin(FieldType field) { String min = null; if (field.hasMinQuery()) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2013-02-15 11:17:45 UTC (rev 1526) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2013-02-15 14:38:58 UTC (rev 1527) @@ -405,6 +405,14 @@ extensions.put(ext.name, ext); incrementVersion(ext.name); + + // mise en place des valeurs par defaut des champs de l'extension + for (String fieldName : ext.getFieldNames()) { + FieldType type = ext.getFieldType(fieldName); + if (type.hasDefault()) { + setField(ext.name, fieldName, type.getDefault()); + } + } } public void removeExtension(String ext) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2013-02-15 11:17:45 UTC (rev 1526) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2013-02-15 14:38:58 UTC (rev 1527) @@ -86,7 +86,7 @@ protected WikittyExtensionMigration defaultExtensionMigration = new WikittyExtensionMigrationRename(); - protected FieldTypeConstaintChecker contraintChecker = + protected FieldTypeConstaintChecker constraintChecker = new FieldTypeConstaintChecker(this); protected ApplicationConfig config; @@ -170,9 +170,10 @@ /** * Check les contraintes sur les champs: - * <li> notNull - * <li> pattern - * <li> extensionAllowed + * <li> notNull: exception + * <li> pattern: exception + * <li> extensionAllowed: exception + * <li> default: changement de la valeur null par default * * @param wikitties */ @@ -186,7 +187,9 @@ List<String> errors = new LinkedList<String>(); - if (!contraintChecker.isValid(fqfield, type, value, errors)) { + value = constraintChecker.checkDefault(w, fqfield, type, value); + + if (!constraintChecker.isValid(fqfield, type, value, errors)) { throw new WikittyException(String.format( "Field constraint error %s", StringUtils.join(errors, "\n"))); Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java 2013-02-15 11:17:45 UTC (rev 1526) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java 2013-02-15 14:38:58 UTC (rev 1527) @@ -107,6 +107,13 @@ public static final String TAG_NOT_NULL = "notNull"; /** + * default: indique la valeur par defaut si le champs est null. + * <li> target: field + * @since 2.9 + */ + public static final String TAG_DEFAULT_VALUE = "default"; + + /** * pattern: pour une String indique que le champs doit respecter un certain * pattern, sinon la sauvegarde echoue. Pour un numeric ou une date pattern * peut-etre utilise comme masque de saisie. Exemple: