package me.osm.gazetter.striper;
import static me.osm.gazetter.utils.FileUtils.getFileIS;
import java.io.File;
import java.util.HashSet;
import me.osm.gazetter.striper.builders.Builder;
import me.osm.gazetter.striper.readers.PointsReader;
import me.osm.gazetter.striper.readers.RelationsReader;
import me.osm.gazetter.striper.readers.WaysReader;
import me.osm.gazetter.utils.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Runs reading of nodes, ways and relation files
* */
public class Engine {
private static final Logger log = LoggerFactory.getLogger(Engine.class);
public void filter(HashSet<String> drop, String datatDir, Builder... builders) {
File nodes = FileUtils.withGz(new File(datatDir + "/" + "nodes.osm"));
File ways = FileUtils.withGz(new File(datatDir + "/" + "ways.osm"));
File rels = FileUtils.withGz(new File(datatDir + "/" + "rels.osm"));
try {
new RelationsReader(drop).read(getFileIS(rels), builders);
log.info("First run: done relations.");
for(Builder builder : builders) {
builder.firstRunDoneRelations();
}
new WaysReader(drop).read(getFileIS(ways), builders);
log.info("First run: done ways.");
for(Builder builder : builders) {
builder.firstRunDoneWays();
}
PointsReader pr = new PointsReader(drop);
pr.read(getFileIS(nodes), builders);
log.info("First run: done nodes.");
for(Builder builder : builders) {
builder.firstRunDoneNodes();
}
log.info("Yongest known timestamp of a node: " + pr.getLastNodeTimestamp());
new WaysReader(drop).read(getFileIS(ways), builders);
log.info("Second run: done ways.");
for(Builder builder : builders) {
builder.secondRunDoneWays();
}
new RelationsReader(drop).read(getFileIS(rels), builders);
log.info("Second run: done relations.");
for(Builder builder : builders) {
builder.secondRunDoneRelations();
}
} catch (Exception e) {
throw new RuntimeException("Parsing failed. Data dir: " + datatDir, e);
}
}
}