Skip to content

Commit 43ecb5f

Browse files
authored
Merge pull request #871 from lonvia/json-export-opensearch
Implement missing JSON export for OpenSearch version
2 parents 1a7fd07 + 2055852 commit 43ecb5f

File tree

5 files changed

+63
-23
lines changed

5 files changed

+63
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,59 @@
11
package de.komoot.photon;
22

3-
import org.apache.commons.lang3.NotImplementedException;
3+
import com.fasterxml.jackson.core.JsonEncoding;
4+
import com.fasterxml.jackson.core.JsonGenerator;
5+
import com.fasterxml.jackson.core.Version;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.databind.module.SimpleModule;
8+
import de.komoot.photon.opensearch.PhotonDocSerializer;
9+
import org.slf4j.Logger;
410

5-
import java.io.FileNotFoundException;
11+
import java.io.File;
12+
import java.io.IOException;
613

714
public class JsonDumper implements Importer {
15+
private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(JsonDumper.class);
816

9-
public JsonDumper(String filename, String[] languages, String[] extraTags) throws FileNotFoundException {
10-
throw new NotImplementedException();
17+
final JsonGenerator generator;
18+
19+
public JsonDumper(String filename, String[] languages, String[] extraTags) throws IOException {
20+
final var module = new SimpleModule("PhotonDocSerializer",
21+
new Version(1, 0, 0, null, null, null));
22+
module.addSerializer(PhotonDoc.class, new PhotonDocSerializer(languages, extraTags));
23+
24+
final ObjectMapper mapper = new ObjectMapper();
25+
mapper.registerModule(module);
26+
27+
if ("-".equals(filename)) {
28+
generator = mapper.getFactory().createGenerator(System.out, JsonEncoding.UTF8);
29+
} else {
30+
generator = mapper.getFactory().createGenerator(new File(filename), JsonEncoding.UTF8);
31+
}
32+
generator.writeStartObject();
33+
generator.writeObjectField("id", "Photon Dump Header");
34+
generator.writeObjectField("version", PhotonDocSerializer.FORMAT_VERSION);
35+
generator.writeEndObject();
1136
}
1237

1338
@Override
1439
public void add(PhotonDoc doc, int objectId) {
15-
throw new NotImplementedException();
40+
try {
41+
generator.writeStartObject();
42+
generator.writeObjectField("id", doc.getUid(objectId));
43+
generator.writeObjectField("document", doc);
44+
generator.writeEndObject();
45+
} catch (IOException e) {
46+
LOGGER.error("Error writing json file", e);
47+
}
48+
1649
}
1750

1851
@Override
1952
public void finish() {
20-
throw new NotImplementedException();
53+
try {
54+
generator.close();
55+
} catch (IOException e) {
56+
LOGGER.warn("Error while closing output file", e);
57+
}
2158
}
2259
}

app/opensearch/src/main/java/de/komoot/photon/opensearch/PhotonDocSerializer.java

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
import java.util.Set;
1616

1717
public class PhotonDocSerializer extends StdSerializer<PhotonDoc> {
18+
// Versioning of the json output format produced. This version appears
19+
// in JSON dumps and allows to track changes.
20+
public static final String FORMAT_VERSION = "1.0.0";
21+
1822
private final String[] languages;
1923
private final String[] extraTags;
2024

src/main/java/de/komoot/photon/App.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import spark.Request;
1414
import spark.Response;
1515

16-
import java.io.FileNotFoundException;
1716
import java.io.IOException;
1817
import java.util.*;
1918
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -112,7 +111,7 @@ private static void startJsonDump(CommandLineArgs args) {
112111

113112
importFromDatabase(args, jsonDumper);
114113
LOGGER.info("Json dump was created: {}", filename);
115-
} catch (FileNotFoundException e) {
114+
} catch (IOException e) {
116115
throw new UsageException("Cannot create dump: " + e.getMessage());
117116
}
118117
}

src/main/java/de/komoot/photon/CommandLineArgs.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public class CommandLineArgs {
5353
@Parameter(names = "-query-timeout", description = "Time after which to cancel queries to the ES database (in seconds).")
5454
private int queryTimeout = 7;
5555

56-
@Parameter(names = "-json", description = "Read from nominatim database and dump it to the given file in a json-like format (useful for developing).")
56+
@Parameter(names = "-json", description = "Read from nominatim database and dump it to the given file in a json-like format (use '-' for dumping to stdout).")
5757
private String jsonDump = null;
5858

5959
@Parameter(names = "-host", description = "Hostname of the PostgreSQL database.")

src/main/resources/log4j2.xml

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Configuration status="error">
3-
<Appenders>
4-
<Console name="stdout" target="SYSTEM_OUT">
5-
<PatternLayout pattern="%d [%t] %-5p %c - %m%n" />
6-
</Console>
7-
<Async name="ASYNC" bufferSize="500">
8-
<AppenderRef ref="stdout"/>
9-
</Async>
10-
</Appenders>
11-
<Loggers>
12-
<Logger name="de.komoot.photon" level="info"/>
13-
<Root level="warn">
14-
<AppenderRef ref="ASYNC" />
15-
</Root>
16-
</Loggers>
3+
<Appenders>
4+
<Console name="stderr" target="SYSTEM_ERR">
5+
<PatternLayout pattern="%d [%t] %-5p %c - %m%n" />
6+
</Console>
7+
<Async name="ASYNC" bufferSize="500">
8+
<AppenderRef ref="stderr"/>
9+
</Async>
10+
</Appenders>
11+
<Loggers>
12+
<Logger name="de.komoot.photon" level="info"/>
13+
<Root level="warn">
14+
<AppenderRef ref="ASYNC" />
15+
</Root>
16+
</Loggers>
1717
</Configuration>

0 commit comments

Comments
 (0)