diff --git a/.classpath b/.classpath index f52d95d08d1172c6301bfd86284026bd9cfb1815..979bd7ed3aa79d1aacb84164fbbc2f92628412a2 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 9e24844c8a8173ee3d2b05b06c334f2636866a39..77ddfedb9b952a23e3189f494908ce56412aba21 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 cc33289f54ef8709d2e36c2b51328349d9a4e910..a88f9370b6108544fa7d7d00fadc321870f0d614 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 24f5d548cc9d37e567513d08a7b99402a29dbf0a..fa504a17d56b3f504a35eb933c1416e9855c2f88 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 eb7f4b9e973a4da4d074fc701a0aa5b040146f9f..f442c9d809baa26de13d2bb2c1fdc554c280f4a3 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 e54f196477ca18890da99adc981adcfaf0d3b31b..03cb77e5e65873eaf548dc475ca49c8a8e80d550 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) {