package org.vertexium.examples.dataset;
import org.vertexium.Authorizations;
import org.vertexium.Graph;
import org.vertexium.Visibility;
import org.vertexium.type.GeoPoint;
import org.vertexium.util.VertexiumLogger;
import org.vertexium.util.VertexiumLoggerFactory;
import java.io.*;
import java.util.zip.GZIPInputStream;
public class GeoNamesDataset extends Dataset {
private static final VertexiumLogger LOGGER = VertexiumLoggerFactory.getLogger(GeoNamesDataset.class);
public void load(Graph graph, int numberOfVerticesToCreate, String[] visibilities, Authorizations authorizations) throws IOException {
LOGGER.debug("populating data count: %d", numberOfVerticesToCreate);
File file = new File("../geonames-cities15000.txt.gz");
BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file))));
try {
int i = 0;
String line;
while (i < numberOfVerticesToCreate && (line = br.readLine()) != null) {
if (i % 1000 == 0) {
LOGGER.debug("populating data %d/%d", i, numberOfVerticesToCreate);
}
String[] lineParts = line.split("\t");
if (lineParts.length < 15) {
continue;
}
int geoNamesId = Integer.parseInt(lineParts[0]);
String name = lineParts[1];
String asciiName = lineParts[2];
String alternateNames = lineParts[3];
Double latitude = Double.parseDouble(lineParts[4]);
Double longitude = Double.parseDouble(lineParts[5]);
Long population = Long.parseLong(lineParts[14]);
Visibility visibility = new Visibility(visibilities[i % visibilities.length]);
graph.prepareVertex("" + geoNamesId, visibility)
.setProperty("name", name, visibility)
.setProperty("asciiName", asciiName, visibility)
.setProperty("alternateNames", alternateNames, visibility)
.setProperty("population", population, visibility)
.setProperty("geoLocation", new GeoPoint(latitude, longitude), visibility)
.save(authorizations);
i++;
}
} finally {
br.close();
}
graph.flush();
LOGGER.debug("populated data");
}
}