Fixed init() to respect already initialized file writer
Change-Id: I387e0e11a05c0a14319dbf3f663f8f86ee0b4a4e
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
index 2346d43..ca924e1 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
@@ -40,8 +40,6 @@
private ObjectMapper mapper = new ObjectMapper();
- private LinkedList<JsonNode> matches;
-
private Writer writer;
private File file;
@@ -268,10 +266,6 @@
*/
public boolean init (String resp) throws IOException, JsonParseException {
- this.file = null;
-
- matches = new LinkedList();
-
if (resp == null)
return false;
@@ -295,7 +289,12 @@
};
};
- writer = new StringWriter();
+ // In case the writer is already set (e.g. forceFile() was issued),
+ // write in the header
+ if (writer == null) {
+ this.file = null;
+ writer = new StringWriter();
+ };
this.writeHeader(writer);
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
index df3e53c..59f6807 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
@@ -383,9 +383,11 @@
if (eventOutput.isClosed())
return;
+
eventBuilder.name("Relocate");
- eventBuilder.data(exp.getExportID());
+ eventBuilder.data(exp.getExportID() + ";" + exp.getFileName());
eventOutput.write(eventBuilder.build());
+
} catch (Exception e) {
try {
if (eventOutput.isClosed())
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
index 6bbcc00..594df85 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
@@ -892,14 +892,15 @@
assertEquals(events.get(1), "Progress:0");
assertEquals(events.get(2), "Progress:56");
assertTrue(events.get(3).startsWith("Relocate:"));
+ assertTrue(events.get(3).contains(";"));
assertEquals(events.getLast(), "Process:done");
assertEquals(events.size(), 5);
eventSource.close();
// Now fetch the file!
- String fileLoc = events.get(3).substring(9);
-
- String filename = "ExampleHui";
+ String[] splits = events.get(3).substring(9).split(";");
+ String fileLoc = splits[0];
+ String filename = splits[1];
Response response = target("/export/" + fileLoc).queryParam("fname", filename).request().get();
String str = response.readEntity(String.class);
@@ -928,6 +929,60 @@
@Test
+ public void testExportWsProgressSinglePage () throws InterruptedException {
+ mockClient.reset().when(
+ request()
+ .withMethod("GET")
+ .withPath("/api/v1.0/search")
+ )
+ .respond(
+ response()
+ .withHeader("Content-Type: application/json; charset=utf-8")
+ .withBody(getFixture("response_water.json"))
+ .withStatusCode(200)
+ );
+
+ final LinkedList<String> events = new LinkedList<>();
+
+ // Create SSE client
+ Client client = ClientBuilder
+ .newBuilder()
+ .register(SseFeature.class)
+ .build();
+
+ EventSource eventSource = EventSource
+ .target(target("/export")
+ .queryParam("q", "Wasser")
+ .queryParam("ql","poliqarp")
+ .queryParam("hitc","1")
+ .queryParam("format","json"))
+ .reconnectingEvery(300, TimeUnit.SECONDS)
+ .build();
+
+ EventListener listener = inboundEvent -> {
+ events.add(inboundEvent.getName() + ":" + inboundEvent.readData(String.class));
+ };
+
+ eventSource.register(listener);
+ eventSource.open();
+
+ Thread.sleep(3000);
+
+ // Check error
+ assertEquals(events.getFirst(), "Process:init");
+ assertEquals(events.get(1), "Progress:0");
+ assertTrue(events.get(2).startsWith("Relocate:"));
+ assertEquals(events.getLast(), "Process:done");
+ assertEquals(events.size(), 4);
+ eventSource.close();
+
+ String fileLoc = events.get(2).substring(9);
+ assertTrue(fileLoc.length() > 5);
+ assertTrue(fileLoc.contains(";"));
+ };
+
+
+ @Test
public void testFileServingError () {
String fileLoc = "hjGHJghjgHJGhjghj";
Response response = target("/export/" + fileLoc).request().get();