package net.osmand.search.core; import net.osmand.binary.BinaryMapIndexReader; import net.osmand.data.LatLon; import java.util.ArrayList; import java.util.Collections; import java.util.List; // immutable object public class SearchSettings { private LatLon originalLocation; private List<BinaryMapIndexReader> offlineIndexes = new ArrayList<>(); private int radiusLevel = 1; private int totalLimit = -1; private String lang; private boolean transliterateIfMissing; private ObjectType[] searchTypes; private boolean emptyQueryAllowed; private boolean sortByName; private boolean addressSearch; public SearchSettings(SearchSettings s) { if(s != null) { this.radiusLevel = s.radiusLevel; this.lang = s.lang; this.totalLimit = s.totalLimit; this.offlineIndexes = s.offlineIndexes; this.originalLocation = s.originalLocation; this.searchTypes = s.searchTypes; this.emptyQueryAllowed = s.emptyQueryAllowed; this.sortByName = s.sortByName; this.addressSearch = s.addressSearch; } } public SearchSettings(List<BinaryMapIndexReader> offlineIndexes) { this.offlineIndexes = Collections.unmodifiableList(offlineIndexes); } public List<BinaryMapIndexReader> getOfflineIndexes() { return offlineIndexes; } public void setOfflineIndexes(List<BinaryMapIndexReader> offlineIndexes) { this.offlineIndexes = Collections.unmodifiableList(offlineIndexes); } public int getRadiusLevel() { return radiusLevel; } public String getLang() { return lang; } public SearchSettings setLang(String lang, boolean transliterateIfMissing) { SearchSettings s = new SearchSettings(this); s.lang = lang; s.transliterateIfMissing = transliterateIfMissing; return s; } public SearchSettings setRadiusLevel(int radiusLevel) { SearchSettings s = new SearchSettings(this); s.radiusLevel = radiusLevel; return s; } public int getTotalLimit() { return totalLimit; } public SearchSettings setTotalLimit(int totalLimit) { SearchSettings s = new SearchSettings(this); s.totalLimit = totalLimit; return s; } public LatLon getOriginalLocation() { return originalLocation; } public SearchSettings setOriginalLocation(LatLon l) { SearchSettings s = new SearchSettings(this); s.originalLocation = l; return s; } public boolean isTransliterate() { return transliterateIfMissing; } public ObjectType[] getSearchTypes() { return searchTypes; } public boolean isCustomSearch() { return searchTypes != null; } public SearchSettings setSearchTypes(ObjectType... searchTypes) { SearchSettings s = new SearchSettings(this); s.searchTypes = searchTypes; return s; } public SearchSettings resetSearchTypes() { SearchSettings s = new SearchSettings(this); s.searchTypes = null; return s; } public boolean isEmptyQueryAllowed() { return emptyQueryAllowed; } public SearchSettings setEmptyQueryAllowed(boolean emptyQueryAllowed) { SearchSettings s = new SearchSettings(this); s.emptyQueryAllowed = emptyQueryAllowed; return s; } public boolean isSortByName() { return sortByName; } public SearchSettings setSortByName(boolean sortByName) { SearchSettings s = new SearchSettings(this); s.sortByName = sortByName; return s; } public boolean isInAddressSearch() { return addressSearch; } public SearchSettings setAddressSearch(boolean addressSearch) { SearchSettings s = new SearchSettings(this); s.addressSearch = addressSearch; return s; } }