// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.tagtransform.impl;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
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 NoTagMatcher implements Matcher {
private Pattern keyPattern;
private Pattern valuePattern;
private long matchHits;
public NoTagMatcher(String keyPattern, String valuePattern) {
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) {
// 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()) {
return null;
}
}
matchHits += 1;
return Collections.singleton(NULL_MATCH);
}
@Override
public void outputStats(StringBuilder output, String indent) {
output.append(indent);
output.append("NoTag[");
output.append(keyPattern.pattern());
output.append(",");
output.append(valuePattern.pattern());
output.append("]: ");
output.append(matchHits);
output.append('\n');
}
private static final Match NULL_MATCH = new Match() {
@Override
public int getValueGroupCount() {
return 0;
}
@Override
public String getValue(int group) {
return null;
}
@Override
public String getMatchID() {
return null;
}
@Override
public int getKeyGroupCount() {
return 0;
}
@Override
public String getKey(int group) {
return null;
}
};
}