Add config option to set source verbatim, e.g. when behind a proxy

Change-Id: Ibeae6f417c13c778d9f7bb29cd9d915dff312f43
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java b/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
index 62cf5c3..c779cc1 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
@@ -31,6 +31,7 @@
     public void setCorpusQueryString (String s);
     public String getSource ();
     public void setSource (String h, String p);
+    public void setSource (String v);
     public int getTotalResults ();
     public boolean hasTimeExceeded ();
     public void setMaxResults (int m);
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java b/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
index f2898a9..1f324f3 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
@@ -169,6 +169,14 @@
         this.src = s.toString();
     };
 
+
+    /**
+     * Set the source information verbose.
+     */
+    public void setSource (String src) {
+        this.src = src;
+    };
+    
     
     /**
      * Get the source information.
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/Service.java b/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
index 0f5d4f1..9b509fc 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
@@ -60,7 +60,6 @@
  * TODO for release:
  * - Rename to "Kalamar-Plugin-Export".
  * - Improve Readme.
- * - Add opaque source, in case source is an internal IP.
  * - Add screenshot.
  *
  * TODO:
@@ -178,6 +177,7 @@
         String port    = prop.getProperty("api.port", "8089");
         String host    = prop.getProperty("api.host", "localhost");
         String path    = prop.getProperty("api.path", "");
+        String source  = prop.getProperty("api.source");
         int pageSize   = Integer.parseInt(prop.getProperty("conf.page_size", "5"));
         int maxResults = Integer.parseInt(prop.getProperty("conf.max_exp_limit", "10000"));
 
@@ -244,7 +244,10 @@
         exp.setMaxResults(maxResults);
         exp.setQueryString(q);
         exp.setCorpusQueryString(cq);
-        exp.setSource(host, path);
+        if (source != null)
+            exp.setSource(source);
+        else
+            exp.setSource(host, path);
        
         // Set filename
         if (fname != null)
diff --git a/src/main/resources/exportPlugin.conf b/src/main/resources/exportPlugin.conf
index a76c44d..fc64329 100644
--- a/src/main/resources/exportPlugin.conf
+++ b/src/main/resources/exportPlugin.conf
@@ -12,6 +12,10 @@
 api.host=korap.ids-mannheim.de
 api.scheme=https
 
+# Overwrite to set source to a string,
+# especially useful when run behind a proxy.
+# api.source = korap.ids-mannheim.de
+
 # Asset Configuration
 asset.host=korap.ids-mannheim.de
 asset.scheme=https
diff --git a/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java b/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
index 00742a3..1dcceee 100644
--- a/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
@@ -12,6 +12,7 @@
 import org.mockserver.junit.MockServerRule;
 import static org.mockserver.model.HttpRequest.*;
 import static org.mockserver.model.HttpResponse.*;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.AfterClass;
 import org.slf4j.Logger;
@@ -87,11 +88,15 @@
         // Unfortunately this means the tests can't run in parallel
         mockServer = ClientAndServer.startClientAndServer(34765);
         mockClient = new MockServerClient("localhost", mockServer.getPort());
+    }
 
+    @Before
+    public void resetProps () {
         Properties properties = ExWSConf.properties(null);
         properties.setProperty("api.host", "localhost");
         properties.setProperty("api.port", String.valueOf(mockServer.getPort()));
         properties.setProperty("api.scheme", "http");
+        properties.remove("api.source");
     }
    
     @AfterClass
@@ -277,6 +282,10 @@
 
     @Test
     public void testExportWsRTFcorpusQuery () {
+
+        Properties properties = ExWSConf.properties(null);
+        properties.setProperty("api.source", "my-server");
+
         mockClient.reset().when(
             request()
             .withMethod("GET")
@@ -305,10 +314,11 @@
         assertEquals("Request RTF: Http Response should be 200: ",
                 Status.OK.getStatusCode(), responsertf.getStatus());
         String str = responsertf.readEntity(String.class);
-
         assertTrue("Corpus info", str.contains("Corpus:"));
         assertTrue("Corpus def", str.contains("corpusSigle = \"WPD17\""));
         assertFalse("Errors", str.contains("dynCall("));
+        assertTrue("Source info", str.contains("Source:" + CELLSPLIT + "my-server"));
+        
     }
 
     @Test