package com.constellio.model.services.search.query; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.Schemas; public class ReturnedMetadatasFilter { private boolean includeParsedContent; private boolean includeLargeText; private Set<String> acceptedFields; public ReturnedMetadatasFilter(boolean includeParsedContent, boolean includeLargeText) { this.includeParsedContent = includeParsedContent; this.includeLargeText = includeLargeText; } public ReturnedMetadatasFilter(Set<String> acceptedFields) { this.acceptedFields = acceptedFields; } public static ReturnedMetadatasFilter idVersionSchema() { return ReturnedMetadatasFilter.onlyMetadatas(new ArrayList<Metadata>()); } public static ReturnedMetadatasFilter idVersionSchemaTitle() { return ReturnedMetadatasFilter.onlyMetadatas(asList(Schemas.TITLE)); } public static ReturnedMetadatasFilter idVersionSchemaTitlePath() { return ReturnedMetadatasFilter.onlyMetadatas(asList(Schemas.TITLE, Schemas.PATH)); } public static ReturnedMetadatasFilter onlyMetadatas(Metadata... metadatas) { return ReturnedMetadatasFilter.onlyMetadatas(asList(metadatas)); } public static ReturnedMetadatasFilter onlyFields(Set<String> fields) { return new ReturnedMetadatasFilter(fields); } public static ReturnedMetadatasFilter onlyMetadatas(List<Metadata> metadatas) { Set<String> datastorecodes = new HashSet<>(); for (Metadata metadata : metadatas) { datastorecodes.add(metadata.getDataStoreCode()); } return new ReturnedMetadatasFilter(datastorecodes); } public static ReturnedMetadatasFilter allExceptContentAndLargeText() { return new ReturnedMetadatasFilter(false, false); } public static ReturnedMetadatasFilter allExceptLarge() { return new ReturnedMetadatasFilter(false, true); } public static ReturnedMetadatasFilter all() { return new ReturnedMetadatasFilter(true, true); } public boolean isIncludeParsedContent() { return includeParsedContent; } public Set<String> getAcceptedFields() { return acceptedFields; } public ReturnedMetadatasFilter withIncludedMetadata(Metadata metadata) { return withIncludedFields(asList(metadata.getDataStoreCode())); } public ReturnedMetadatasFilter withIncludedMetadatas(Metadata... metadatas) { List<String> fields = new ArrayList<>(); for (Metadata metadata : metadatas) { fields.add(metadata.getDataStoreCode()); } return withIncludedFields(fields); } public ReturnedMetadatasFilter withIncludedFields(List<String> fields) { if (this.acceptedFields == null) { return this; } else { Set<String> acceptedFields = new HashSet<>(this.acceptedFields); acceptedFields.addAll(fields); return new ReturnedMetadatasFilter(acceptedFields); } } public boolean isFullyLoaded() { return acceptedFields == null && includeLargeText; } }