package com.constellio.model.services.records.populators; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.constellio.data.utils.AccentApostropheCleaner; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.records.FieldsPopulator; public class AutocompleteFieldPopulator implements FieldsPopulator { @Override public Map<String, Object> populateCopyfields(MetadataSchema schema, Record record) { List<String> values = new ArrayList<>(); for (Metadata metadata : schema.getMetadatas().onlySchemaAutocomplete()) { if (metadata.getType().isStringOrText() && metadata.isMultivalue()) { values.addAll((List) record.getList(metadata)); } else if (metadata.getType().isStringOrText() && !metadata.isMultivalue()) { String value = record.get(metadata); if (value != null) { values.add(value); } } } List<String> words = new ArrayList<>(); for (String value : values) { if (value != null) { String cleanedValue = AccentApostropheCleaner.removeAccents(value).toLowerCase(); for (String word : cleanedValue.split(" ")) { words.add(word); } } } Map<String, Object> fields = new HashMap<>(); fields.put(Schemas.SCHEMA_AUTOCOMPLETE_FIELD.getDataStoreCode(), words); return fields; } }