001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.tools; 003 004 import java.util.Collection; 005 import java.util.Collections; 006 import java.util.LinkedList; 007 import java.util.List; 008 009 import org.openstreetmap.josm.data.osm.OsmPrimitive; 010 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference; 011 import org.openstreetmap.josm.gui.tagging.TaggingPreset; 012 import org.openstreetmap.josm.gui.tagging.TaggingPreset.PresetType; 013 014 /** 015 * List of tagging presets with name templates, allows to find appropriate template based on existing primitive 016 */ 017 public class TaggingPresetNameTemplateList { 018 019 private static TaggingPresetNameTemplateList instance; 020 021 public static TaggingPresetNameTemplateList getInstance() { 022 if (instance == null) { 023 instance = new TaggingPresetNameTemplateList(); 024 } 025 return instance; 026 } 027 private final List<TaggingPreset> presetsWithPattern = new LinkedList<TaggingPreset>(); 028 029 private TaggingPresetNameTemplateList() { 030 if (TaggingPresetPreference.taggingPresets != null) { 031 for (TaggingPreset tp : TaggingPresetPreference.taggingPresets) { 032 if (tp.nameTemplate != null) { 033 presetsWithPattern.add(tp); 034 } 035 } 036 } 037 } 038 039 public TaggingPreset findPresetTemplate(OsmPrimitive primitive) { 040 041 for (TaggingPreset t : presetsWithPattern) { 042 Collection<PresetType> type = Collections.singleton(PresetType.forPrimitive(primitive)); 043 if (t.typeMatches(type)) { 044 if (t.nameTemplateFilter != null) { 045 if (t.nameTemplateFilter.match(primitive)) 046 return t; 047 else { 048 continue; 049 } 050 } else if (t.matches(type, primitive.getKeys(), false)) { 051 return t; 052 } 053 } 054 } 055 return null; 056 } 057 }