package net.osmand.osm; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; public abstract class AbstractPoiType { protected final String keyName; protected final MapPoiTypes registry; private List<PoiType> poiAdditionals = null; private List<PoiType> poiAdditionalsCategorized = null; private boolean topVisible; private String lang; private AbstractPoiType baseLangType; private boolean notEditableOsm; private String poiAdditionalCategory; private List<String> excludedPoiAdditionalCategoies; public AbstractPoiType(String keyName, MapPoiTypes registry) { this.keyName = keyName; this.registry = registry; } public void setBaseLangType(AbstractPoiType baseLangType) { this.baseLangType = baseLangType; } public AbstractPoiType getBaseLangType() { return baseLangType; } public void setLang(String lang) { this.lang = lang; } public String getLang() { return lang; } public String getKeyName() { return keyName; } public String getIconKeyName() { String kn = getKeyName(); if (kn.startsWith("osmand_")) { kn = kn.substring("osmand_".length()); } return kn.replace(':', '_'); } public void setTopVisible(boolean topVisible) { this.topVisible = topVisible; } public boolean isTopVisible() { return topVisible; } public boolean isAdditional() { return this instanceof PoiType && this.isAdditional(); } public String getTranslation() { return registry.getTranslation(this); } public String getPoiAdditionalCategoryTranslation() { if (poiAdditionalCategory != null) { return registry.getPoiTranslation(poiAdditionalCategory); } else { return null; } } public void addPoiAdditional(PoiType tp) { if (poiAdditionals == null) { poiAdditionals = new ArrayList<>(); } poiAdditionals.add(tp); if (tp.getPoiAdditionalCategory() != null) { if (poiAdditionalsCategorized == null) { poiAdditionalsCategorized = new ArrayList<>(); } poiAdditionalsCategorized.add(tp); } } public void addPoiAdditionalsCategorized(List<PoiType> tps) { if (poiAdditionals == null) { poiAdditionals = new ArrayList<>(); } poiAdditionals.addAll(tps); if (poiAdditionalsCategorized == null) { poiAdditionalsCategorized = new ArrayList<>(); } poiAdditionalsCategorized.addAll(tps); } public List<PoiType> getPoiAdditionals() { if (poiAdditionals == null) { return Collections.emptyList(); } return poiAdditionals; } public List<PoiType> getPoiAdditionalsCategorized() { if (poiAdditionalsCategorized == null) { return Collections.emptyList(); } return poiAdditionalsCategorized; } public boolean isNotEditableOsm() { return notEditableOsm; } public void setNotEditableOsm(boolean notEditableOsm) { this.notEditableOsm = notEditableOsm; } public String getPoiAdditionalCategory() { return poiAdditionalCategory; } public void setPoiAdditionalCategory(String poiAdditionalCategory) { this.poiAdditionalCategory = poiAdditionalCategory; } public List<String> getExcludedPoiAdditionalCategories() { return excludedPoiAdditionalCategoies; } public void addExcludedPoiAdditionalCategories(String[] excludedPoiAdditionalCategories) { if (excludedPoiAdditionalCategoies == null) { excludedPoiAdditionalCategoies = new ArrayList<>(); } Collections.addAll(excludedPoiAdditionalCategoies, excludedPoiAdditionalCategories); } public abstract Map<PoiCategory, LinkedHashSet<String>> putTypes(Map<PoiCategory, LinkedHashSet<String>> acceptedTypes); @Override public String toString() { return keyName; } }