Make MimeType and format suffix part of the exporter objects

Change-Id: I1a2d1c3ffe027034973f8085e7ef990d952ac4f0
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
index 97bcad5..64cc843 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
@@ -24,4 +24,6 @@
     public void writeHeader (Writer w) throws IOException;
     public void addMatch (JsonNode n, Writer w) throws IOException;
     public void writeFooter (Writer w) throws IOException;
+    public String getMimeType ();
+    public String getSuffix ();
 };
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
index 6517c01..004de3f 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
@@ -88,6 +88,7 @@
     @Context
     private HttpServletRequest req; 
     
+
     /**
      * WebService calls Kustvakt Search Webservices and returns
      * response as json (all of the response) and
@@ -155,6 +156,7 @@
         String path   = properties.getProperty("api.path", "");
         int pageSize  = Integer.parseInt(properties.getProperty("conf.page_size", "5"));
 
+        // Create initial search uri
         UriBuilder uri = UriBuilder.fromPath("/api/v1.0/search")
             .host(host)
             .port(Integer.parseInt(port))
@@ -202,33 +204,25 @@
         // set filename based on query (if not already set)
         if (fname == null) {
             fname = q;
-        }
+        };
 
         Exporter exp;
 
+        // Choose the correct exporter
         if (format.equals("json")) {
             exp = new JsonExporter();
         }
         else {
             exp = new RtfExporter();
         };
-        
+
+        // Initialize exporter (with meta data and first matches)
         exp.init(resp);
         
         // If only one page should be exported there is no need
         // for a temporary export file
         if (cutoff) {
-
             builder = exp.serve();
-
-            if (format.equals("json")) {
-                builder.type(MediaType.APPLICATION_JSON);
-            }
-
-            else {
-                builder.type("application/rtf");
-                format = "rtf";
-            };
         }
 
         // Page through results
@@ -265,16 +259,8 @@
                 resp = authBuilder(reqBuilder, xff, auth).get(String.class);
                 exp.appendMatches(resp);
             }
-            // builder = Response.ok(expTmp);
-            builder = exp.serve();
 
-            if (format.equals("json")) {
-                builder.type(MediaType.APPLICATION_JSON);
-            }
-            else {
-                builder.type("application/rtf");
-                format = "rtf";
-            };
+            builder = exp.serve();
         };        
 
         builder.header(
@@ -282,7 +268,7 @@
             "attachment; filename=" +
             sanitizeFileName(fname) +
             '.' +
-            format
+            exp.getSuffix()
             );
         return builder.build();
     };
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/JsonExporter.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/JsonExporter.java
index dfd9694..d538f2c 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/JsonExporter.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/JsonExporter.java
@@ -1,9 +1,11 @@
 package de.ids_mannheim.korap.plkexport;
 
+import javax.ws.rs.core.MediaType;
 import com.fasterxml.jackson.databind.JsonNode;
 import java.io.IOException;
 import java.io.Writer;
 
+
 /**
  * This is a streaming exporter class for Json, so it's based on
  * a string buffer.
@@ -16,6 +18,19 @@
         {
             firstMatch = true;
         }
+
+
+    @Override
+    public String getMimeType () {
+        return MediaType.APPLICATION_JSON;
+    };
+
+
+    @Override
+    public String getSuffix () {
+        return "json";
+    };
+
     
     @Override
     public void writeHeader (Writer w) throws IOException {
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 6a06890..944b729 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
@@ -39,6 +39,14 @@
     
     public JsonNode meta, query, collection;
 
+    public String getMimeType() {
+        return "text/plain";
+    };
+
+    public String getSuffix() {
+        return "txt";
+    };
+
     public void setMeta (JsonNode meta) {
         this.meta = meta;
     };
@@ -156,14 +164,20 @@
      */
     public ResponseBuilder serve () {
         try {
+            ResponseBuilder rb;
 
             this.writeFooter(this.writer);
             this.writer.close();
-            
+
+
             if (this.file == null) {
-                return Response.ok(writer.toString());
+                rb = Response.ok(writer.toString());
+            }
+            else {
+                rb = Response.ok(this.file);
             };
-            return Response.ok(this.file);            
+
+            return rb.type(this.getMimeType());
         }
 
         // Catch error
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
index c7a3594..852ad91 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
@@ -41,6 +41,18 @@
             firstMatch = true;
             sb = new StringBuilder(256);
         }
+
+    @Override
+    public String getMimeType () {
+        return "application/rtf";
+    };
+
+
+    @Override
+    public String getSuffix () {
+        return "rtf";
+    };
+    
     
     @Override
     public void writeHeader (Writer w) throws IOException {