diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedDataFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedDataFragment.java index 57fd5fe975..595cb3b562 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedDataFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedDataFragment.java @@ -23,6 +23,11 @@ import android.widget.LinearLayout; import android.widget.TextView; import net.osmand.PlatformUtil; +import net.osmand.StringMatcher; +import net.osmand.osm.AbstractPoiType; +import net.osmand.osm.MapPoiTypes; +import net.osmand.osm.PoiCategory; +import net.osmand.osm.PoiFilter; import net.osmand.osm.PoiType; import net.osmand.osm.edit.OSMSettings; import net.osmand.plus.OsmandApplication; @@ -32,9 +37,9 @@ import net.osmand.plus.osmedit.data.Tag; import org.apache.commons.logging.Log; +import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.TreeSet; public class AdvancedDataFragment extends Fragment { private static final String TAG = "AdvancedDataFragment"; @@ -72,7 +77,7 @@ public class AdvancedDataFragment extends Fragment { (LinearLayout) view.findViewById(R.id.editTagsList); mAdapter = new TagAdapterLinearLayoutHack(editTagsLineaLayout, getData(), nameTextView, amenityTagTextView, amenityTextView, - ((OsmandApplication) getActivity().getApplication()).getPoiTypes().getAllTranslatedNames()); + ((OsmandApplication) getActivity().getApplication()).getPoiTypes()); // setListViewHeightBasedOnChildren(editTagsLineaLayout); Button addTagButton = (Button) view.findViewById(R.id.addTagButton); addTagButton.setOnClickListener(new View.OnClickListener() { @@ -127,19 +132,28 @@ public class AdvancedDataFragment extends Fragment { private final TextView amenityTagTextView; private final TextView amenityTextView; private final Map allTranslatedSubTypes; + private final Map allTypes; + private final MapPoiTypes mapPoiTypes; public TagAdapterLinearLayoutHack(LinearLayout linearLayout, EditPoiData editPoiData, TextView nameTextView, TextView amenityTagTextView, TextView amenityTextView, - Map allTranslatedSubTypes) { + MapPoiTypes mapPoiTypes) { this.linearLayout = linearLayout; this.editPoiData = editPoiData; this.nameTextView = nameTextView; this.amenityTagTextView = amenityTagTextView; this.amenityTextView = amenityTextView; - this.allTranslatedSubTypes = allTranslatedSubTypes; + this.allTranslatedSubTypes = mapPoiTypes.getAllTranslatedNames(); + this.allTypes = mapPoiTypes.getAllTypesTranslatedNames(new StringMatcher() { + @Override + public boolean matches(String name) { + return true; + } + }); + this.mapPoiTypes = mapPoiTypes; } public void addTag(Tag tag) { @@ -185,14 +199,10 @@ public class AdvancedDataFragment extends Fragment { deleteItemImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LOG.debug("onClick(" + "v=" + v + ") tag=" + tag - + "; editPoiData.tags" + editPoiData.tags); linearLayout.removeView((View) v.getParent()); editPoiData.tags.remove(tag); - LOG.debug("editPoiData.tags" + editPoiData.tags + " mIsUserInput=" + mIsUserInput); if (mIsUserInput) editPoiData.notifyDatasetChanged(null); - LOG.debug("editPoiData.tags" + editPoiData.tags); } }); tagEditText.addTextChangedListener(new TextWatcher() { @@ -213,12 +223,14 @@ public class AdvancedDataFragment extends Fragment { editPoiData.notifyDatasetChanged(mTagsChangedListener); } }); - final Set tagKeys = new TreeSet<>(); - for (OSMSettings.OSMTagKey t : OSMSettings.OSMTagKey.values()) { - if (t != OSMSettings.OSMTagKey.NAME) { - tagKeys.add(t.getValue()); - } + final Set tagKeys = new HashSet<>(); + for (String s : allTypes.keySet()) { + AbstractPoiType abstractPoiType = allTypes.get(s); + addPoiToStringSet(abstractPoiType, tagKeys); } +// addPoiToStringSet(mapPoiTypes.getOtherPoiCategory(), tagKeys); + addPoiToStringSet(mapPoiTypes.getOtherMapCategory(), tagKeys); + TagTester.areAllTagsPresent(tagKeys); ArrayAdapter adapter = new ArrayAdapter<>(linearLayout.getContext(), R.layout.list_textview, tagKeys.toArray()); @@ -262,4 +274,36 @@ public class AdvancedDataFragment extends Fragment { return convertView; } } + + private static void addPoiToStringSet(AbstractPoiType abstractPoiType, Set stringSet) { + if (abstractPoiType instanceof PoiType) { + PoiType poiType = (PoiType) abstractPoiType; + if (poiType.getOsmTag() != null && + !poiType.getOsmTag().equals(OSMSettings.OSMTagKey.NAME.getValue())) { + stringSet.add(poiType.getOsmTag()); + if (poiType.getOsmTag2() != null) { + stringSet.add(poiType.getOsmTag2()); + } + } + } else if (abstractPoiType instanceof PoiCategory) { + PoiCategory poiCategory = (PoiCategory) abstractPoiType; + for (PoiFilter filter : poiCategory.getPoiFilters()) { + addPoiToStringSet(filter, stringSet); + } + for (PoiType poiType : poiCategory.getPoiTypes()) { + addPoiToStringSet(poiType, stringSet); + } + for (PoiType poiType : poiCategory.getPoiAdditionals()) { + addPoiToStringSet(poiType, stringSet); + } + } else if (abstractPoiType instanceof PoiFilter) { + PoiFilter poiFilter = (PoiFilter) abstractPoiType; + for (PoiType poiType : poiFilter.getPoiTypes()) { + addPoiToStringSet(poiType, stringSet); + } + } else { + throw new IllegalArgumentException("abstractPoiType can't be instance of class " + + abstractPoiType.getClass()); + } + } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/TagTester.java b/OsmAnd/src/net/osmand/plus/osmedit/TagTester.java new file mode 100644 index 0000000000..1318c720c6 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/osmedit/TagTester.java @@ -0,0 +1,26 @@ +package net.osmand.plus.osmedit; + +import net.osmand.PlatformUtil; + +import org.apache.commons.logging.Log; + +import java.util.Set; + +/** + * Created by GaidamakUA on 9/21/15. + */ +public class TagTester { + private static final Log LOG = PlatformUtil.getLog(TagTester.class); + public static final String[] TAGS = new String[] {"name", "opening_hours", "collection_times", "description", "phone", "website", "email", "fax", "facebook", "twitter", "skype", "youtube", "instagram", "vk", "google_plus", "mobile", "content", "service_times", "maxheight", "maxweight", "height", "ele", "min_height", "building_min_level", "building_levels_aboveground", "levels", "abandoned", "disused", "tourism_attraction", "operator", "brand", "fee_yes", "fee_no", "drinking_water_yes", "drinking_water_no", "supervised_yes", "supervised_no", "seasonal_yes", "seasonal_no", "seasonal_dry_season", "seasonal_wet_season", "seasonal_spring", "seasonal_summer", "seasonal_autumn", "seasonal_winter", "crossing_traffic_signals", "crossing_uncontrolled", "crossing_unmarked", "traffic_signals_sound_yes", "traffic_signals_sound_no", "traffic_signals_sound_walk", "route_hiking_ref_poi", "access_private", "access_no", "access_destination", "access_permissive", "access_customers", "access_delivery", "access_agricultural", "start_date", "wheelchair", "wholesale", "content_silage", "content_water", "content_slurry", "content_oil", "content_fuel", "content_manure", "content_wine", "content_sewage", "content_gas", "content_biomass", "content_wastewater", "content_crop", "content_fodder", "content_beer", "content_salt", "content_grain", "nudism_yes", "nudism_no", "nudism_obligatory", "nudism_customary", "nudism_permissive", "trade_building_supplies", "trade_plumbing", "trade_wood", "trade_agricultural_supplies", "trade_tile", "population", "leaf_type_broadleaved", "leaf_type_needleleaved", "leaf_type_mixed", "leaf_type_leafless", "species", "genus", "taxon", "trees_olive", "trees_apple", "trees_oil", "trees_orange", "trees_almond", "trees_banana", "trees_hazel", "trees_coconut", "trees_persimmon", "trees_cherry", "trees_walnut", "trees_plum", "trees_peach", "trees_tea", "trees_coca", "trees_kiwi", "trees_meadow_orchard", "trees_nectorine", "trees_mango", "trees_rubber", "trees_date", "trees_coffea", "trees_pomegranate", "intermittent", "int_name", "nat_name", "reg_name", "loc_name", "old_name", "alt_name", "water_characteristic_mineral", "water_characteristic_mud", "water_characteristic_sulfuric", "cuisine", "fireplace_yes", "fireplace_no", "covered_yes", "covered_no", "smoking_no", "smoking_outside", "smoking_yes", "smoking_separated", "smoking_isolated", "smoking_dedicated", "toll_yes", "toll_no", "toll_hgv_yes", "tactile_paving_yes", "tactile_paving_no", "windfall", "dead_wood", "level", "shop", "shop_food", "alcohol", "bakery", "beverages", "butcher", "cheese", "chocolate", "coffee", "confectionery", "convenience", "dairy", "deli", "farm", "greengrocer", "ice_cream", "mall", "pasta", "pastry", "seafood", "supermarket", "tea", "vending_machine", "wine", "anime", "antiques", "art", "baby_goods", "bag", "bathroom_furnishing", "bed", "bicycle", "books", "boutique", "camera", "candles", "carpet", "charity", "chemist", "clothes", "child_clothes", "atv", "bedding", "car_parts", "car", "computer", "cosmetics", "curtain", "department_store", "dive", "doityourself", "doors", "electronics", "energy", "erotic", "fabric", "fashion", "fishing", "florist", "frame", "free_flying", "furnace", "furniture", "games", "garden_centre", "garden_furniture", "gas", "general", "gift", "glaziery", "hardware", "hearing_aids", "herbalist", "hifi", "houseware", "hunting", "interior_decoration", "jewelry", "kiosk", "kitchen", "leather", "mall", "marketplace", "medical_supply", "mobile_phone", "model", "motorcycle", "musical_instrument", "music", "newsagent", "optician", "organic", "outdoor", "paint", "pawnbroker", "perfumery", "pet", "photo", "pyrotechnics", "radiotechnics", "scuba_diving_shop", "second_hand", "sewing", "ship_chandler", "shoes", "sports", "stationery", "supermarket", "swimming_pool_shop", "tableware", "ticket", "tobacco", "toys", "trade", "trophy", "tyres", "vacuum_cleaner", "variety_store", "video_games", "video", "watches", "weapons", "window_blind", "emergency", "police", "fire_station", "emergency_phone", "fire_hydrant", "fire_extinguisher", "fire_flapper", "fire_hose", "fire_water_pond", "grit_bin", "ambulance_station", "ses_station", "emergency_access_point", "rescue_station", "transportation", "road_obstacle", "ford", "ford_stepping_stones", "mountain_pass", "toll_booth", "border_control", "traffic_signals", "filling_station", "fuel", "fuel:diesel", "fuel:lpg", "fuel:octane_80", "fuel:octane_92", "fuel:octane_95", "fuel:octane_98", "fuel:cng", "fuel:electricity", "fuel:gtl_diesel", "fuel:hgv_diesel", "fuel:biodiesel", "fuel:octane_91", "fuel:octane_100", "fuel:1_25", "fuel:1_50", "fuel:ethanol", "fuel:methanol", "fuel:svo", "fuel:e10", "fuel:e20", "fuel:e85", "fuel:biogas", "fuel_lh2", "charging_station", "parking", "parking", "parking_entrance", "motorcycle_parking", "bicycle_parking", "personal_transport", "car_repair", "service_tyres", "vehicle_inspection", "car_wash", "car_wash_self_service", "vehicle_ramp", "compressed_air", "parking", "parking_underground", "parking_multi_storey", "motorcycle_parking", "parking_entrance", "car_rental", "car_sharing", "public_transport", "public_transport_platform", "public_transport_platform_bus", "public_transport_platform_trolleybus", "public_transport_stop_position", "bus_stop", "public_transport_platform_tram", "tram_stop", "public_transport_station", "bus_station", "railway_station", "subway_station", "halt", "railway_subway_entrance", "taxi", "funicular", "air_transport", "aerodrome", "helipad", "runway", "aeroway_terminal", "aeroway_gate", "water_transport", "slipway", "ferry_terminal", "lighthouse", "boat_sharing", "bicycle_transport", "bicycle_rental", "bicycle_parking", "bicycle_parking_anchors", "bicycle_parking_stands", "bicycle_parking_wall_loops", "bicycle_parking_rack", "bicycle_parking_building", "bicycle_parking_shed", "bicycle_parking_bollard", "bicycle_parking_informal", "aerialway_transport", "aerialway_station", "aerialway_cable_car", "aerialway_gondola", "aerialway_chair_lift", "aerialway_t_bar", "aerialway_j_bar", "aerialway_platter", "aerialway_mixed_lift", "aerialway_drag_lift", "aerialway_rope_tow", "aerialway_goods", "aerialway_magic_carpet", "aerialway_pylon", "node_networks", "icn_ref", "ncn_ref", "rcn_ref", "lcn_ref", "iwn_ref", "nwn_ref", "rwn_ref", "lwn_ref", "hiking_routes", "route_hiking_iwn_poi", "route_hiking_nwn_poi", "route_hiking_rwn_poi", "route_hiking_lwn_poi", "traffic_enforcement", "enforcement_traffic_signals", "enforcement_maxspeed", "enforcement_maxheight", "enforcement_mindistance", "enforcement_check", "enforcement_access", "enforcement_toll", "speed_camera", "turning_circle", "motorway_junction", "junction", "passing_place", "rest_area", "man_made", "transport_construction", "tunnel", "bridge", "landuse_railway", "water_supply", "water_well", "pump_manual", "pump_powered", "pump_no", "standpipe", "water_works", "boatyard", "wastewater_plant", "water_tower", "lock_gate", "waterway_turning_point", "weir", "dam", "watermill", "salt_pond", "reservoir", "canal", "breakwater", "groyne", "water_point", "power", "power_substation", "power_transformer", "power_cable_distribution_cabinet", "power_plant", "power_generator", "generator_source_coal", "generator_source_gas", "generator_source_nuclear", "generator_source_solar", "generator_source_hydro", "generator_source_wind", "generator_source_geothermal", "generator_source_oil", "generator_source_diesel", "communication", "post_office", "post_box", "telephone", "emergency_phone", "telephone_exchange", "trash_disposal", "recycling", "landfill", "landfill_waste_nuclear", "waste_disposal", "waste_basket", "pier", "surveillance", "observatory", "astronomical_observatory", "lighthouse", "tower", "communication_tower", "observation_tower", "bell_tower", "cooling_tower", "lighting_tower", "landuse", "industrial", "quarry", "vineyard", "orchard", "allotments", "forest", "farmyard", "meadow", "cemetery", "garages", "landuse_railway", "construction", "conservation", "brownfield", "greenfield", "basin", "commercial", "retail", "religious", "grass", "farmland", "logging", "military_landuse", "residential", "salt_pond", "reservoir", "mast", "monitoring_station", "radar", "crane", "works", "mineshaft", "adit", "petroleum_well", "survey_point", "windmill", "cricket_nets", "gasometer", "silo", "bunker_silo", "storage_tank", "dock", "cutline", "abandoned_poi", "education", "college", "driving_school", "kindergarten", "library", "school", "training", "university", "educational_institution", "administrative", "social_facility", "police", "courthouse", "prison", "register_office", "embassy", "government", "bailiff", "prosecutor", "pension_fund", "migration", "tax_inspection", "office_administrative", "townhall", "customs", "country", "city", "capital", "town", "village", "hamlet", "island", "islet", "isolated_dwelling", "suburb", "quarter", "neighbourhood", "locality", "place_allotments", "place_farm", "residential", "urban", "rural", "healthcare", "pharmacy", "hospital", "doctors", "clinic", "first_aid", "dentist", "nursing_home", "baby_hatch", "veterinary", "ambulance_station", "sanatorium", "healthcare_alternative", "audiologist", "blood_bank", "healthcare_centre", "midwife", "occupational_therapist", "optometrist", "physiotherapist", "podiatrist", "psychotherapist", "healthcare_rehabilitation", "speech_therapist", "paediatrics", "healthcare_yes", "office", "office_administrative", "government", "company", "insurance", "estate_agent", "lawyer", "office_telecommunication", "travel_agent", "ngo", "townhall", "accountant", "employment_agency", "research", "it", "newspaper", "architect", "advertising_agency", "educational_institution", "studio", "bookmaker", "office_religion", "association", "financial", "political_party", "notary", "foundation", "tax_advisor", "sport", "stadium", "sports_centre", "golf_course", "ice_rink", "pitch", "horse_riding", "club_sport", "miniature_golf", "leisure_track", "running_track", "bicycle_track", "horse_track", "raceway", "9pin", "10pin", "archery", "athletics", "american_football", "australian_football", "base", "baseball", "basketball", "beachvolleyball", "bmx", "boules", "bowls", "canadian_football", "canoe", "chess", "climbing", "cricket", "croquet", "cycling", "diving", "scuba_diving", "dog_racing", "equestrian", "field_hockey", "golf", "gymnastics", "handball", "hockey", "horse_racing", "ice_skating", "ice_stock", "korfbal", "sport_motor", "sport_multi", "orienteering", "paddle_tennis", "paragliding", "pelota", "racquet", "roller_skating", "rowing", "rugby_league", "rugby_union", "sailing", "shooting", "skating", "skateboard", "skiing", "soccer", "surfing", "swimming", "table_tennis", "tennis", "toboggan", "volleyball", "tourism", "sightseeing", "museum", "memorial", "artwork", "archaeological_site", "palaeontological_site", "battlefield", "boundary_stone", "historic_cannon", "castle", "city_gate", "fort", "fountain", "historic_ruins", "rune_stone", "wreck", "historic_ship", "historic_mine", "monument", "viewpoint", "zoo", "aquarium", "theme_park", "lighthouse", "attraction", "attraction", "attraction_amusement_ride", "attraction_animal", "attraction_big_wheel", "attraction_carousel", "attraction_maze", "attraction_roller_coaster", "attraction_slide", "attraction_summer_toboggan", "attraction_swing_carousel", "attraction_train", "attraction_water_slide", "accomodation", "hotel", "guest_house", "hostel", "motel", "alpine_hut", "chalet", "apartment", "wilderness_hut", "cabin", "lean_to", "hunting_lodge", "place_of_worship", "religion_christian", "religion_jewish", "religion_muslim", "religion_sikh", "religion_buddhist", "religion_hindu", "religion_shinto", "religion_taoist", "religion_voodoo", "religion_unitarian_universalist", "religion_multifaith", "religion_jain", "religion_spiritualist", "religion_bahai", "religion_scientologist", "religion_pagan", "religion_tenrikyo", "religion_zoroastrian", "denomination_catholic", "denomination_baptist", "denomination_roman_catholic", "denomination_orthodox", "denomination_lutheran", "denomination_sunni", "denomination_protestant", "denomination_methodist", "denomination_anglican", "denomination_presbyterian", "denomination_evangelical", "denomination_russian_orthodox", "denomination_pentecostal", "denomination_mormon", "denomination_jehovahs_witness", "denomination_greek_orthodox", "denomination_reformed", "denomination_seventh_day_adventist", "denomination_new_apostolic", "denomination_church_of_england", "denomination_episcopal", "denomination_shia", "denomination_united", "denomination_greek_catholic", "denomination_tibetan", "denomination_united_reformed", "denomination_church_of_scotland", "denomination_salvation_army", "denomination_iglesia_ni_cristo", "denomination_uniting", "denomination_mennonite", "denomination_quaker", "denomination_bulgarian_orthodox", "denomination_assemblies_of_god", "denomination_nondenominational", "denomination_adventist", "denomination_nazarene", "denomination_united_methodist", "denomination_congregational", "denomination_old_believers", "denomination_serbian_orthodox", "denomination_spiritist", "denomination_armenian_apostolic", "denomination_dutch_reformed", "denomination_apostolic", "denomination_reform", "denomination_latter_day_saints", "denomination_church_of_christ", "denomination_united_church_of_christ", "denomination_georgian_orthodox", "denomination_scientist", "denomination_romanian_orthodox", "denomination_ethiopian_orthodox_tewahedo", "denomination_unitarian", "denomination_coptic_orthodox", "denomination_wesleyan", "denomination_shaktism", "denomination_shingon_shu", "denomination_maronite", "denomination_mahayana", "general_tourist_attraction_yes", "hanami", "wine_cellar", "winery", "monastery", "historic_monastery", "religious", "wayside_cross", "wayside_shrine", "information", "information_guidepost", "information_board", "information_map", "information_office", "information_trail_blaze", "information_terminal", "information_route_marker", "information_hikingmap", "information_nature", "information_wildlife", "information_history", "information_sign", "information_audioguide", "information_bicyclemap", "information_tactile_model", "information_tactile_map", "board_type_notice", "board_type_plants", "board_type_geology", "board_type_public_transport", "board_type_technology", "board_type_astronomy", "clock", "travel_agent", "camp_site", "caravan_site", "picnic_site", "picnic_table", "toilets", "park", "spring", "hot_spring", "cemetery", "grave_yard", "tomb", "club_tourism", "funicular", "resort", "beach_resort", "beach", "water_park", "ski_resort", "city_wall", "bird_hide", "entertainment", "club", "nightclub", "stripclub", "club_art", "club_astronomy", "club_computer", "club_board_games", "club_motorcycle", "club_game", "club_automobile", "club_chess", "club_cinema", "club_fan", "club_fishing", "club_veterans", "club_linux", "club_theatre", "club_history", "club_music", "club_ethnic", "club_nature", "club_photography", "club_hunting", "club_shooting", "club_sport", "club_tourism", "club_charity", "piste", "ski_resort", "piste_downhill", "piste_nordic", "piste_skitour", "piste_hike", "piste_sleigh", "piste_sled", "piste_snow_park", "piste_playground", "piste_ice_skate", "ski_rental", "library", "arts_centre", "cinema", "casino", "community_centre", "social_centre", "theatre", "circus", "museum", "gallery", "dance_floor", "zoo", "beach_resort", "dog_park", "leisure_fishing", "hunting_stand", "harbour", "marina", "slipway", "miniature_golf", "playground", "bench", "seats", "backrest_yes", "backrest_no", "swimming_pool", "theme_park", "beach", "water_park", "park", "recreation_ground", "village_green", "nature_reserve", "picnic_site", "picnic_table", "trail_riding_station", "sauna", "stadium", "sports_centre", "golf_course", "ice_rink", "pitch", "leisure_track", "studio", "brothel", "horse_riding", "leisure_common", "garden", "sustenance", "cafe_and_restaurant", "cafe", "restaurant", "food_court", "fast_food", "biergarten", "bar", "pub", "drinking_water", "barbecue", "water_well", "spring", "service", "craft", "craft_agricultural_engines", "craft_basket_maker", "craft_beekeeper", "craft_blacksmith", "craft_brewery", "craft_boatbuilder", "craft_bookbinder", "craft_carpenter", "craft_carpet_layer", "craft_caterer", "craft_clockmaker", "craft_computer", "craft_dressmaker", "craft_electrician", "craft_gardener", "craft_glaziery", "craft_handicraft", "craft_hvac", "craft_insulation", "craft_jeweller", "craft_locksmith", "craft_key_cutter", "craft_metal_construction", "craft_optician", "craft_painter", "craft_parquet_layer", "craft_photographer", "craft_photographic_laboratory", "craft_plasterer", "craft_plumber", "craft_pottery", "craft_rigger", "craft_roofer", "craft_saddler", "craft_sailmaker", "craft_sawmill", "craft_scaffolder", "craft_sculptor", "craft_shoemaker", "craft_stand_builder", "craft_stonemason", "craft_sun_protection", "craft_sweep", "craft_tailor", "craft_tiler", "craft_tinsmith", "craft_upholsterer", "craft_watchmaker", "craft_window_construction", "internet_access", "internet_access_wlan", "internet_access_terminal", "internet_access_wired", "internet_access_public", "internet_access_service", "funeral_directors", "bureau_de_change", "driving_school", "post_office", "post_box", "beauty", "beauty_salon_nails", "hairdresser", "massage", "tattoo", "dry_cleaning", "laundry", "services", "car_rental", "car_sharing", "boat_sharing", "bicycle_rental", "ski_rental", "charging_station", "toilets", "shower", "telephone", "telephone_exchange", "sauna", "smoking_area", "brothel", "recycling", "recycling_centre", "recycling_container", "recycling_glass", "recycling_paper", "recycling_clothes", "recycling_cans", "recycling_glass_bottles", "recycling_plastic", "recycling_scrap_metal", "recycling_batteries", "recycling_plastic_bottles", "recycling_green_waste", "recycling_waste", "recycling_plastic_packaging", "recycling_newspaper", "recycling_cartons", "recycling_cardboard", "recycling_magazines", "recycling_paper_packaging", "recycling_small_appliances", "recycling_wood", "recycling_books", "recycling_shoes", "recycling_aluminium", "recycling_organic", "recycling_beverage_cartons", "recycling_garden_waste", "recycling_low_energy_bulbs", "recycling_fluorescent_tubes", "recycling_metal", "recycling_electrical_items", "recycling_white_goods", "recycling_cooking_oil", "recycling_engine_oil", "recycling_plastic_bags", "recycling_hazardous_waste", "recycling_mobile_phones", "recycling_hydrargyrum", "recycling_computers", "recycling_tyres", "recycling_tv_monitor", "recycling_tetrapak", "recycling_rubble", "recycling_cds", "recycling_waste_oil", "recycling_bottles", "recycling_cork", "recycling_printer_cartridges", "recycling_sheet_metal", "recycling_foil", "recycling_paint", "recycling_styrofoam", "recycling_drugs", "recycling_compost", "recycling_hardcore", "recycling_christmas_trees", "recycling_light_bulbs", "recycling_chipboard", "recycling_polyester", "recycling_plasterboard", "recycling_animal_waste", "recycling_fridge_and_freezer", "recycling_furniture", "recycling_diapers", "recycling_car_batteries", "recycling_cars", "recycling_bicycles", "waste_disposal", "waste_basket", "mortuary", "crematorium", "internet_cafe", "shelter", "copyshop", "rest_area", "animal_shelter_dog", "animal_shelter_cat", "animal_shelter_dog_cat", "animal_shelter_bird", "finance", "bank", "atm", "payment_terminal", "money_lender", "bureau_de_change", "accountant", "tax_advisor", "bitcoin_yes", "financial", "natural", "cave_entrance", "peak", "saddle", "volcano", "glacier", "crater", "ridge", "sinkhole", "waterfall", "rapids", "spring", "hot_spring", "geyser", "river", "stream", "stone", "cape", "beach", "bay", "fjord", "reef", "valley", "water", "wetland", "wood", "tree", "nature_reserve", "strait", "heath", "grassland", "scrub", "sand", "island", "islet", "seamark:category", "seamark", "anchorage", "anchor_berth", "beacon", "beacon_cardinal", "beacon_lateral", "beacon_safe_water", "beacon_special_purpose", "berth", "seamark_building", "seamark_bridge", "buoy_cardinal", "buoy_installation", "buoy_isolated_danger", "buoy_lateral", "buoy_safe_water", "buoy_special_purpose", "daymark", "distance_mark", "dry_dock", "dyke", "floating_dock", "fog_signal", "harbour_basin", "harbour", "landmark", "seamark_light", "seamark_light_major", "seamark_light_minor", "seamark_light_float", "seamark_light_vessel", "mooring", "notice", "pile", "radar_transponder", "radio_station", "signal_station_traffic", "signal_station_warning", "small_craft_facility", "topmark", "seamark_rock", "seamark_wreck", "seamark_category", "seamark_character", "seamark_colour", "seamark_height", "seamark_clearance_height", "seamark_period", "seamark_range", "seamark_reference", "seamark_shape", "seamark_sequence", "seamark_system", "seamark_topmark", "military", "military_landuse", "military_airfield", "military_bunker", "military_barracks", "military_danger_area", "military_range", "military_office", "military_naval_base", "military_nuclear_explosion_site", "osmwiki", "wiki_place", "wiki_lang", "user_defined_other", "bollard", "cycle_barrier", "motorcycle_barrier", "block", "bus_trap", "cattle_grid", "full_height_turnstile", "gate", "bump_gate", "general_barrier", "lift_gate", "stile", "height_restrictor", "horse_stile", "kissing_gate", "sally_port", "swing_gate", "turnstile", "kent_carriage_gap", "barrier_entrance", "entrance_main", "entrance", "entrance_exit", "railway_buffer_stop", "power_tower", "power_pole", "mini_roundabout", "railway_crossing", "railway_level_crossing", "traffic_calming_bump", "traffic_calming_hump", "traffic_calming_cushion", "traffic_calming_chicane", "traffic_calming_rumble_strip", "traffic_calming_table", "traffic_calming_choker", "highway_crossing", "building", "deadlock", "osm_note_yes"}; + + public static void areAllTagsPresent(Set collectedTags) { + int missedTags = 0; + for (String tag : TAGS) { + if (!collectedTags.contains(tag)) { + LOG.debug("tags missing '" + tag + "' tag"); + missedTags++; + } + } + LOG.debug("missing " + missedTags + " tags"); + } +}