// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.JunctionChecker.filter;
import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.OSMGraph;
import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.OSMWay;
import org.openstreetmap.josm.plugins.JunctionChecker.reader.XMLFilterReader;
/**
* @author joerg
*/
public class ExecuteFilter {
private Filter[] filter;
private XMLFilterReader xmlfilterreader;
private OSMGraph incominggraph;
private OSMGraph outgoinggraph;
public ExecuteFilter(Filter[] filter, OSMGraph incoming) {
this.filter = filter;
this.incominggraph = incoming;
outgoinggraph = new OSMGraph();
outgoinggraph.setBbbottom(incoming.getBbbottom());
outgoinggraph.setBbleft(incoming.getBbleft());
outgoinggraph.setBbright(incoming.getBbright());
outgoinggraph.setBbtop(incoming.getBbtop());
outgoinggraph.setRelations(incoming.getRelationsAshashmap());
}
public ExecuteFilter() {
}
public void filter() {
OSMWay[] tempWays = incominggraph.getWays();
String key;
//alle Einträge im Filter durchgehen
for (int i = 0; i < filter.length; i++) {
//alle Ways durchgehen
for (int j = 0; j < tempWays.length; j++) {
key = filter[i].getKeyValue();
//prüfen, ob Way Key-Wert des Filters enthält
if (tempWays[j].hasKey(key)) {
//prüfen, ob Way auch einen Value-Wert des Filtereintrags enthält
if (filter[i].hasTagValue(tempWays[j].getValue(key))) {
//Way outgoinggraph hinzufügen
outgoinggraph.addWay(tempWays[j]);
for (int j2 = 0; j2 < tempWays[j].getNodes().length; j2++) {
//zum way gehörende Nodes einfügen, aber nur, wenn diese
//vorher noch nicht im outgoinggraph vorhanden sind
if (!outgoinggraph.hasNode(tempWays[j].getNodes()[j2].getId())) {
outgoinggraph.addNode(tempWays[j].getNodes()[j2]);
}
}
}
}
}
}
}
public Filter[] getFilter() {
return filter;
}
public void setFilter(Filter[] filter) {
this.filter = filter;
}
public XMLFilterReader getXmlfilterreader() {
return xmlfilterreader;
}
public void setXmlfilterreader(XMLFilterReader xmlfilterreader) {
this.xmlfilterreader = xmlfilterreader;
}
public OSMGraph getIncominggraph() {
return incominggraph;
}
public void setIncominggraph(OSMGraph incominggraph) {
this.incominggraph = incominggraph;
}
public OSMGraph getOutgoinggraph() {
return outgoinggraph;
}
public void setOutgoinggraph(OSMGraph outgoinggraph) {
this.outgoinggraph = outgoinggraph;
}
}