package com.constellio.app.modules.rm.model.calculators.document; import static com.constellio.model.services.schemas.calculators.AutocompleteFieldCalculator.splitInLowerCasedTermsRemovingAccents; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.model.entities.calculators.CalculatorParameters; import com.constellio.model.entities.calculators.MetadataValueCalculator; import com.constellio.model.entities.calculators.dependencies.Dependency; import com.constellio.model.entities.calculators.dependencies.DynamicLocalDependency; import com.constellio.model.entities.calculators.dependencies.ReferenceDependency; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.schemas.calculators.AutocompleteFieldCalculator.LocalAutocompleteMetadatasDependency; public class DocumentAutocompleteFieldCalculator implements MetadataValueCalculator<List<String>> { DynamicLocalDependency autocompleteMetadatasDependency = new LocalAutocompleteMetadatasDependency(); ReferenceDependency<List<String>> folderAutocompleteTermsDependency = ReferenceDependency .toAString(Document.FOLDER, Schemas.SCHEMA_AUTOCOMPLETE_FIELD.getLocalCode()).whichIsMultivalue(); @Override public List<String> calculate(CalculatorParameters parameters) { Set<String> words = new HashSet<>(); splitInLowerCasedTermsRemovingAccents(words, parameters.get(autocompleteMetadatasDependency)); splitInLowerCasedTermsRemovingAccents(words, parameters.get(folderAutocompleteTermsDependency)); List<String> returnedWords = new ArrayList<>(words); Collections.sort(returnedWords); return returnedWords; } @Override public List<String> getDefaultValue() { return new ArrayList<>(); } @Override public MetadataValueType getReturnType() { return MetadataValueType.STRING; } @Override public boolean isMultiValue() { return true; } @Override public List<? extends Dependency> getDependencies() { return asList(autocompleteMetadatasDependency, folderAutocompleteTermsDependency); } }