-
Bug
-
Resolution: Fixed
-
Major
-
2.5.0
-
None
-
None
Dans le service de recherche, les champs disponibles pour la recherche sont les métadonnées contenant un énumérateur (AbstractSearchFieldEnumerator).
Ces données sont récupérées via la méthode ODFContentType.getEnumeratedMetadatas() qui elle même appelle fillEnumeratedMetas(Map<String, MetadataDefinition>).
Dans cette méthode ainsi que dans sa méthode soeur fillEnumeratedMetas(MetadataDefinition, Map<String, MetadataDefinition>, String), on est censé faire un appel récursif vers les sous-métadonnées de chaque métadonnée.
Sauf que ce n'est pas ce qui est réellement fait (ligne 429 à 434 puis 452 à 457) :
if (!metadataName.endsWith(REMOTE_SUFFIX) && !_ENUMERATED_EXCLUDED_IDS.contains(metaDef.getId()) && metaDef.getEnumerator() != null) { enumeratedMetas.put(metadataPath, metaDef); fillEnumeratedMetas(metaDef, enumeratedMetas, metadataPath + "/"); }
Devrait plutôt être :
if (!metadataName.endsWith(REMOTE_SUFFIX) && !_ENUMERATED_EXCLUDED_IDS.contains(metaDef.getId())) { if (metaDef.getEnumerator() != null) { enumeratedMetas.put(metadataPath, metaDef); } else { fillEnumeratedMetas(metaDef, enumeratedMetas, metadataPath + "/"); } }
Ca n'a d'ailleurs pas de sens d'appeler les sous-métadonnées d'une donnée ayant un énumérateur, elle ne devrait pas en avoir.
Cette méthode devrait fonctionne pour les composite et les repeater.
Il y a peut être des effets de bord.