// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.tagtransform.impl; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.regex.MatchResult; import java.util.regex.Pattern; import org.openstreetmap.osmosis.tagtransform.Match; import org.openstreetmap.osmosis.tagtransform.Matcher; import org.openstreetmap.osmosis.tagtransform.TTEntityType; public class TagMatcher implements Matcher { private String matchID; private Pattern keyPattern; private Pattern valuePattern; private long matchHits = 0; public TagMatcher(String matchID, String keyPattern, String valuePattern) { this.matchID = matchID; this.keyPattern = Pattern.compile(keyPattern); this.valuePattern = Pattern.compile(valuePattern); } @Override public Collection<Match> match(Map<String, String> tags, TTEntityType type, String uname, int uid) { List<Match> matches = new ArrayList<Match>(); // loop through the tags to find matches for (Entry<String, String> tag : tags.entrySet()) { java.util.regex.Matcher keyMatch = keyPattern.matcher(tag.getKey()); java.util.regex.Matcher valueMatch = valuePattern.matcher(tag.getValue()); if (keyMatch.matches() && valueMatch.matches()) { MatchResult keyRes = keyMatch.toMatchResult(); MatchResult valueRes = valueMatch.toMatchResult(); matches.add(new MatchResultMatch(matchID, keyRes, valueRes)); } } matchHits += matches.size(); return matches; } @Override public void outputStats(StringBuilder output, String indent) { output.append(indent); output.append("Tag["); if (matchID != null) { output.append(matchID); output.append(","); } output.append(keyPattern.pattern()); output.append(","); output.append(valuePattern.pattern()); output.append("]: "); output.append(matchHits); output.append('\n'); } }