Author: bpoussin Date: 2012-09-13 18:54:57 +0200 (Thu, 13 Sep 2012) New Revision: 1513 Url: http://nuiton.org/repositories/revision/wikitty/1513 Log: Wikitty.format permet maintenant de mettre un autre champs comme valeur par defaut (utiliser pour les toString) Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-09-10 06:41:03 UTC (rev 1512) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-09-13 16:54:57 UTC (rev 1513) @@ -454,42 +454,12 @@ for (Pair<String, String> pair : fields) { String fieldAsked = pair.getKey(); String defaultValue = pair.getValue(); - Wikitty wtmp = w; - // recherche de l'objet reel sur lequel prendre la valeur du champs - if (StringUtils.contains(fieldAsked, ",")) { - String path = StringUtils.substringBeforeLast(fieldAsked, ","); - fieldAsked = StringUtils.substringAfterLast(fieldAsked, ","); - for (String field : StringUtils.split(path, ",")) { - if (wtmp.hasField(field)) { - String extName = WikittyExtension.extractExtensionName(field); - String fieldName = WikittyExtension.extractFieldName(field); - wtmp = wtmp.getFieldAsWikitty(extName, fieldName, false); - } else { - wtmp = null; - } - if (wtmp == null) { - break; - } - } - } - Object value = null; - if(wtmp != null) { - // recuperation de la valeur du champs - if (wtmp.hasField(fieldAsked)) { - String extName = WikittyExtension.extractExtensionName(fieldAsked); - String fieldName = WikittyExtension.extractFieldName(fieldAsked); - // on essai toujours de recuperer l'objet plutot que l'id si - // possible en 1er - value = wtmp.getFieldAsWikitty(extName, fieldName, false); - if (value == null) { - // pas un wikitty ou pas pre-charge, on demande simplement le champs - value = wtmp.getFqField(fieldAsked); - } - } - } + Object value = getValue(w, fieldAsked); + Object defaultValueObject = getValue(w, defaultValue); + // on ajoute dans la liste la valeur du champs - values.add(ObjectUtils.defaultIfNull(value, defaultValue)); + values.add(ObjectUtils.defaultIfNull(value, defaultValueObject)); } if (log.isDebugEnabled()) { @@ -502,6 +472,56 @@ } /** + * Recupere la valeur du champs pointer par fieldAsked. Si fieldAsked contient + * des ',' alors on parcours les differents objets pour arrive a satisfaire la demande + * Si fieldAsked ne represente pas un champs alors on retourne fieldAsked + * @param w + * @param fieldAsked + * @return + */ + static private Object getValue(Wikitty w, String fieldAsked) { + String initialFieldAsked = fieldAsked; + Wikitty wtmp = w; + // recherche de l'objet reel sur lequel prendre la valeur du champs + if (StringUtils.contains(fieldAsked, ",")) { + String path = StringUtils.substringBeforeLast(fieldAsked, ","); + fieldAsked = StringUtils.substringAfterLast(fieldAsked, ","); + for (String field : StringUtils.split(path, ",")) { + if (wtmp.hasField(field)) { + String extName = WikittyExtension.extractExtensionName(field); + String fieldName = WikittyExtension.extractFieldName(field); + wtmp = wtmp.getFieldAsWikitty(extName, fieldName, false); + } else { + wtmp = null; + } + if (wtmp == null) { + break; + } + } + } + + Object value = null; + if(wtmp != null) { + // recuperation de la valeur du champs + if (wtmp.hasField(fieldAsked)) { + String extName = WikittyExtension.extractExtensionName(fieldAsked); + String fieldName = WikittyExtension.extractFieldName(fieldAsked); + // on essai toujours de recuperer l'objet plutot que l'id si + // possible en 1er + value = wtmp.getFieldAsWikitty(extName, fieldName, false); + if (value == null) { + // pas un wikitty ou pas pre-charge, on demande simplement le champs + value = wtmp.getFqField(fieldAsked); + } + } else { + // on a pas trouver le champs, on retourne la chaine car ce n'etait pas un champs + value = initialFieldAsked; + } + } + return value; + } + + /** * Get value as Binary. * * @param value null and empty return empty byte[]