blob: de4ac51447eb72317ab118ebb8d9d63aab1e5ec9 [file] [log] [blame]
Akron8154dbe2020-11-13 17:52:53 +01001package de.ids_mannheim.korap.plkexport;
2
Akrone57937b2020-11-17 08:49:31 +01003import javax.ws.rs.core.MediaType;
Akron8154dbe2020-11-13 17:52:53 +01004import com.fasterxml.jackson.databind.JsonNode;
5import java.io.IOException;
6import java.io.Writer;
7
Akrone57937b2020-11-17 08:49:31 +01008
Akron8154dbe2020-11-13 17:52:53 +01009/**
Akron69cd35d2020-11-20 13:17:31 +010010 * Streaming JSON exporter.
Akron8154dbe2020-11-13 17:52:53 +010011 */
Akron8154dbe2020-11-13 17:52:53 +010012public class JsonExporter extends MatchAggregator implements Exporter {
13
14 private boolean firstMatch;
15
16 {
17 firstMatch = true;
18 }
Akrone57937b2020-11-17 08:49:31 +010019
20
21 @Override
22 public String getMimeType () {
23 return MediaType.APPLICATION_JSON;
24 };
25
26
27 @Override
28 public String getSuffix () {
29 return "json";
30 };
31
Akron8154dbe2020-11-13 17:52:53 +010032
33 @Override
34 public void writeHeader (Writer w) throws IOException {
35 w.append("{");
36
37 boolean header = false;
38
Akronfddd0582020-11-17 09:49:54 +010039 if (this.getQuery() != null) {
Akron8154dbe2020-11-13 17:52:53 +010040 w.append("\"query\":")
Akronfddd0582020-11-17 09:49:54 +010041 .append(this.getQuery().toString());
Akron8154dbe2020-11-13 17:52:53 +010042 header = true;
43 };
44
Akronfddd0582020-11-17 09:49:54 +010045 if (this.getMeta() != null) {
Akron8154dbe2020-11-13 17:52:53 +010046 if (header) {
47 w.append(',');
48 } else {
49 header = true;
50 };
51 w.append("\"meta\":")
Akronfddd0582020-11-17 09:49:54 +010052 .append(this.getMeta().toString());
Akron8154dbe2020-11-13 17:52:53 +010053 };
54
Akronfddd0582020-11-17 09:49:54 +010055 if (this.getCollection() != null) {
Akron8154dbe2020-11-13 17:52:53 +010056 if (header) {
57 w.append(',');
58 } else {
59 header = true;
60 };
61 w.append("\"collection\":")
Akronfddd0582020-11-17 09:49:54 +010062 .append(this.getCollection().toString());
Akron8154dbe2020-11-13 17:52:53 +010063 };
64
65 if (header)
66 w.append(',');
67
68 w.append("\"matches\":[");
69 }
70
71 @Override
72 public void writeFooter (Writer w) throws IOException {
73 w.append("]}");
74 };
75
76 @Override
77 public void addMatch (JsonNode n, Writer w) throws IOException {
78 if (firstMatch) {
79 firstMatch = false;
80 }
81 else {
82 w.append(',');
83 };
84 w.append(n.toString());
85 return;
86 };
87};