From 53dfb04a9bd8ee3dd071f3aff7cfe0317e527da1 Mon Sep 17 00:00:00 2001
From: Thorsten Vitt <thorsten.vitt@uni-wuerzburg.de>
Date: Sun, 22 Mar 2015 09:28:03 +0100
Subject: [PATCH] ZIP: Added 'filter' argument to search export

---
 .classpath                                             |  1 -
 pom.xml                                                |  2 +-
 .../textgrid/services/aggregator/AbstractExporter.java |  5 +++--
 .../java/info/textgrid/services/aggregator/REST.java   |  3 ++-
 .../textgrid/services/aggregator/SearchResultList.java | 10 ++++++----
 .../services/aggregator/SearchResultListTest.java      |  2 +-
 6 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/.classpath b/.classpath
index f52d95d..979bd7e 100644
--- a/.classpath
+++ b/.classpath
@@ -30,7 +30,6 @@
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/webapp/WEB-INF">
diff --git a/pom.xml b/pom.xml
index 9e24844..77ddfed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
                 <saxon-version>9.5.1-5</saxon-version> <!-- XXX mind dependency from epubcheck -->
                 <cxf-version>2.7.11</cxf-version>
                 <confclient-version>1.4.0</confclient-version>
-                <tgsearch-version>3.0.2-SNAPSHOT</tgsearch-version>
+                <tgsearch-version>3.4.0-SNAPSHOT</tgsearch-version>
                 <tgcrud-version>2.6.0</tgcrud-version>
                 <guava-version>15.0</guava-version>
                 <junit-version>4.11</junit-version>
diff --git a/src/main/java/info/textgrid/services/aggregator/AbstractExporter.java b/src/main/java/info/textgrid/services/aggregator/AbstractExporter.java
index cc33289..a88f937 100644
--- a/src/main/java/info/textgrid/services/aggregator/AbstractExporter.java
+++ b/src/main/java/info/textgrid/services/aggregator/AbstractExporter.java
@@ -16,6 +16,7 @@
 import java.text.MessageFormat;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Locale;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -170,8 +171,8 @@ private static URI[] extractURIs(final String uriList) {
 		return uris;
 	}
 	
-	protected void initFromSearch(final String query, final String target, int start, int stop) {
-		rootObjects = SearchResultList.create(repository.getPublicSearchClient(), query, target).start(start).stop(stop);
+	protected void initFromSearch(final String query, final String target, int start, int stop, List<String> filter) {
+		rootObjects = SearchResultList.create(repository.getPublicSearchClient(), query, target, filter).start(start).stop(stop);
 	}
 
 	/**
diff --git a/src/main/java/info/textgrid/services/aggregator/REST.java b/src/main/java/info/textgrid/services/aggregator/REST.java
index 24f5d54..fa504a1 100644
--- a/src/main/java/info/textgrid/services/aggregator/REST.java
+++ b/src/main/java/info/textgrid/services/aggregator/REST.java
@@ -174,6 +174,7 @@ public Response getZIP(
 
 			@QueryParam("transform") @Description("(EXPERIMENTAL) Transform each XML document before zipping. Values currently available are text, html, or the textgrid: URI of an XSLT stylesheet.") final String transform,
 			@QueryParam("query") @Description("(EXPERIMENTAL) perform the given TGsearch query and use its result as root objects instead of the objects.") final String query,
+			@QueryParam("filter") @Description("for query: additional filters") final List<String> filter,
 			@QueryParam("target") @Description("if query is used, the query target (metadata, fulltext or both)") @DefaultValue("both") final String target,
 			@QueryParam("start") @Description("for query: start at result no.") @DefaultValue("0") int start,
 			@QueryParam("stop") @Description("for query: max. number of results") @DefaultValue("65535") int stop,
@@ -190,7 +191,7 @@ public Response getZIP(
 		if (sid != null)
 			zipResult.sid(sid);
 		if (query != null)
-			zipResult.initFromSearch(query, target, start, stop);
+			zipResult.initFromSearch(query, target, start, stop, filter);
 		if (stream)
 			zipResult.streaming(stream);
 		return zipResult.createResponse().build();
diff --git a/src/main/java/info/textgrid/services/aggregator/SearchResultList.java b/src/main/java/info/textgrid/services/aggregator/SearchResultList.java
index eb7f4b9..f442c9d 100644
--- a/src/main/java/info/textgrid/services/aggregator/SearchResultList.java
+++ b/src/main/java/info/textgrid/services/aggregator/SearchResultList.java
@@ -60,14 +60,14 @@ public boolean hasNext() {
 	private int stop = Integer.MAX_VALUE;
 	private SearchClient searchClient;
 	
-	protected SearchResultList(final SearchClient client, final String query, final String target) {
+	protected SearchResultList(final SearchClient client, final String query, final String target, List<String> filter) {
 		this.searchClient = client;
 		this.query = query;
 		client.setTarget(target);
 	}
 	
-	public static SearchResultList create(final SearchClient client, final String query, final String target) {
-		return new SearchResultList(client, query, target);
+	public static SearchResultList create(final SearchClient client, final String query, final String target, List<String> filter) {
+		return new SearchResultList(client, query, target, filter);
 	}
 	
 	private void ensureNotStarted() {
@@ -104,6 +104,8 @@ public int size() {
 
 	private String query;
 
+	private List<String> filter;
+
 
 	@Override
 	public Iterator<ObjectType> iterator() {
@@ -138,7 +140,7 @@ protected void fetchNextChunk() {
 			return;
 
 		Response response = searchClient.query(query, null, "", nextStart,
-				Math.min(stop - nextStart, chunkSize));
+				Math.min(stop - nextStart, chunkSize), filter);
 		hits = Integer.parseInt(response.getHits());
 		if (!started) {
 			availableResults = Lists.newArrayListWithExpectedSize(hits);
diff --git a/src/test/java/info/textgrid/services/aggregator/SearchResultListTest.java b/src/test/java/info/textgrid/services/aggregator/SearchResultListTest.java
index e54f196..03cb77e 100644
--- a/src/test/java/info/textgrid/services/aggregator/SearchResultListTest.java
+++ b/src/test/java/info/textgrid/services/aggregator/SearchResultListTest.java
@@ -15,7 +15,7 @@ public class SearchResultListTest {
 	@Test
 	public void test() {
 		SearchResultList results = SearchResultList
-			.create(repository.getPublicSearchClient(), "genre:\"verse\" AND edition.agent.value:\"anakreon\"", "both")
+			.create(repository.getPublicSearchClient(), "genre:\"verse\" AND edition.agent.value:\"anakreon\"", "both", null)
 			.chunkSize(10);
 		int i = 0;
 		for (ObjectType object : results) {
-- 
GitLab