package com.constellio.model.entities.records.wrappers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.constellio.app.ui.pages.search.criteria.Criterion;
import com.constellio.app.ui.pages.search.criteria.FacetSelections;
import com.constellio.model.entities.EnumWithSmallCode;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
public class SavedSearch extends RecordWrapper {
public static final String SCHEMA_TYPE = "savedSearch";
public static final String DEFAULT_SCHEMA = SCHEMA_TYPE + "_default";
public static final String USER = "user";
public static final String PUBLIC = "public";
public static final String SORT_FIELD = "sortField";
public static final String FACET_SELECTIONS = "facetSelections";
public static final String FREE_TEXT_SEARCH = "freeTextSearch";
public static final String ADVANCED_SEARCH = "advancedSearch";
public static final String SCHEMA_FILTER = "schemaFilter";
public static final String SEARCH_TYPE = "searchType";
public static final String SORT_ORDER = "sortOrder";
public static final String TEMPORARY = "temporary";
public static final String PAGE_NUMBER = "pageNumber";
public static final String RESULTS_VIEW_MODE = "resultsViewMode";
public static final String PAGE_LENGTH = "pageLength";
//testing only
public static final String CRITERION = "criterions";
public SavedSearch(Record record,
MetadataSchemaTypes types) {
super(record, types, SCHEMA_TYPE);
}
public SavedSearch setTitle(String title) {
super.setTitle(title);
return this;
}
public String getUser() {
return get(USER);
}
public SavedSearch setUser(String user) {
set(USER, user);
return this;
}
public String getResultsViewMode() {
return get(RESULTS_VIEW_MODE);
}
public SavedSearch setResultsViewMode(String resultsViewMode) {
set(RESULTS_VIEW_MODE, resultsViewMode);
return this;
}
public int getPageLength() {
Integer pageLengthInteger = getInteger(PAGE_LENGTH);
return pageLengthInteger != null ? pageLengthInteger : 0;
}
public SavedSearch setPageLength(int pageLength) {
set(PAGE_LENGTH, pageLength);
return this;
}
public boolean isPublic() {
return get(PUBLIC);
}
public SavedSearch setPublic(boolean publicSearch) {
set(PUBLIC, publicSearch);
return this;
}
public String getSortField() {
return get(SORT_FIELD);
}
public SavedSearch setSortField(String sortField) {
set(SORT_FIELD, sortField);
return this;
}
public Map<String, Set<String>> getSelectedFacets() {
List<FacetSelections> selections = getList(FACET_SELECTIONS);
Map<String, Set<String>> result = new HashMap<>();
for (FacetSelections each : selections) {
result.put(each.getFacetField(), each.getSelectedValues());
}
return result;
}
public SavedSearch setSelectedFacets(Map<String, Set<String>> facetSelections) {
List<FacetSelections> selections = new ArrayList<>();
for (Map.Entry<String, Set<String>> each : facetSelections.entrySet()) {
selections.add(new FacetSelections(each.getKey(), each.getValue()));
}
set(FACET_SELECTIONS, selections);
return this;
}
public String getFreeTextSearch() {
return get(FREE_TEXT_SEARCH);
}
public SavedSearch setFreeTextSearch(String freeTextSearch) {
set(FREE_TEXT_SEARCH, freeTextSearch);
return this;
}
public List<Criterion> getAdvancedSearch() {
return getList(ADVANCED_SEARCH);
}
public SavedSearch setAdvancedSearch(List<Criterion> advancedSearch) {
set(ADVANCED_SEARCH, advancedSearch);
return this;
}
public SortOrder getSortOrder() {
return get(SORT_ORDER);
}
public SavedSearch setSortOrder(SortOrder sortOrder) {
set(SORT_ORDER, sortOrder);
return this;
}
public String getSchemaFilter() {
return get(SCHEMA_FILTER);
}
public SavedSearch setSchemaFilter(String schemaFilter) {
set(SCHEMA_FILTER, schemaFilter);
return this;
}
public String getSearchType() {
return get(SEARCH_TYPE);
}
public SavedSearch setSearchType(String searchType) {
set(SEARCH_TYPE, searchType);
return this;
}
public Boolean isTemporary() {
return get(TEMPORARY);
}
public SavedSearch setTemporary(Boolean temporary) {
set(TEMPORARY, temporary);
return this;
}
public SavedSearch setPageNumber(int pageNumber) {
set(PAGE_NUMBER, pageNumber);
return this;
}
public int getPageNumber() {
return getInteger(PAGE_NUMBER);
}
public enum SortOrder implements EnumWithSmallCode {
ASCENDING("a"), DESCENDING("d");
private String code;
SortOrder(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
}