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