// 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 org.openstreetmap.osmosis.tagtransform.Match;
import org.openstreetmap.osmosis.tagtransform.Matcher;
import org.openstreetmap.osmosis.tagtransform.TTEntityType;
public class OrMatcher implements Matcher {
private Collection<Matcher> matchers;
private long matchHits = 0;
private TTEntityType type;
private String uname;
private int uid;
public OrMatcher(Collection<Matcher> matchers, TTEntityType type, String uname, int uid) {
this.matchers = matchers;
this.type = type;
this.uname = uname;
this.uid = uid;
}
@Override
public Collection<Match> match(Map<String, String> tags, TTEntityType entityType, String entityUname,
int entityUid) {
if (this.type != null && this.type != entityType) {
return null;
}
if (this.uname != null && !this.uname.equals(entityUname)) {
return null;
}
if (this.uid != 0 && this.uid != entityUid) {
return null;
}
List<Match> allMatches = new ArrayList<Match>();
for (Matcher matcher : matchers) {
Collection<Match> matches = matcher.match(tags, entityType, entityUname, entityUid);
if (matches != null) {
allMatches.addAll(matches);
}
}
if (!allMatches.isEmpty()) {
matchHits++;
}
return allMatches;
}
@Override
public void outputStats(StringBuilder output, String indent) {
output.append(indent);
output.append("Or: ");
output.append(matchHits);
output.append('\n');
for (Matcher matcher : matchers) {
matcher.outputStats(output, indent + " ");
}
}
}