// 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.Output;
import org.openstreetmap.osmosis.tagtransform.TTEntityType;
import org.openstreetmap.osmosis.tagtransform.Translation;
public class TranslationImpl implements Translation {
private String name;
private String description;
private Matcher matcher;
private List<Output> output;
private Matcher finder;
public TranslationImpl(String name, String description, Matcher matcher, Matcher finder, List<Output> output) {
this.name = name;
this.description = description;
this.matcher = matcher;
this.finder = finder;
this.output = output;
}
@Override
public Collection<Output> getOutputs() {
return output;
}
@Override
public boolean isDropOnMatch() {
return output.isEmpty();
}
@Override
public Collection<Match> match(Map<String, String> tags, TTEntityType type, String uname, int uid) {
Collection<Match> matches = matcher.match(tags, type, uname, uid);
if (matches != null && !matches.isEmpty()) {
Collection<Match> finds;
if (finder == null) {
finds = null;
} else {
finds = finder.match(tags, type, uname, uid);
}
if (finds != null && !finds.isEmpty()) {
if (matches instanceof ArrayList) {
matches.addAll(finds);
} else {
List<Match> allMatches = new ArrayList<Match>();
allMatches.addAll(matches);
allMatches.addAll(finds);
return allMatches;
}
}
return matches;
}
return null;
}
@Override
public void outputStats(StringBuilder statsOutput, String indent) {
statsOutput.append(indent);
statsOutput.append(name);
statsOutput.append(":");
statsOutput.append('\n');
if (description != null && !description.isEmpty()) {
statsOutput.append(description);
statsOutput.append('\n');
}
matcher.outputStats(statsOutput, indent + " ");
if (finder != null) {
finder.outputStats(statsOutput, " + ");
}
statsOutput.append('\n');
}
}