blob: 809165fc8e6ad463b1ff674df079899c0f126cdf [file] [log] [blame]
Nils Diewaldea969502015-02-16 21:10:54 +00001package de.ids_mannheim.korap.collection;
Nils Diewaldf399a672013-11-18 17:55:22 +00002
Nils Diewald01ff7af2015-02-04 22:54:26 +00003import de.ids_mannheim.korap.collection.BooleanFilter;
4import de.ids_mannheim.korap.collection.RegexFilter;
Nils Diewaldfb4d7b02014-04-09 17:56:17 +00005import de.ids_mannheim.korap.util.QueryException;
Nils Diewaldc383ed02015-02-26 21:35:22 +00006import de.ids_mannheim.korap.util.KrillDate;
Nils Diewaldfb4d7b02014-04-09 17:56:17 +00007
8import org.apache.lucene.search.Query;
9
10import com.fasterxml.jackson.databind.ObjectMapper;
11import com.fasterxml.jackson.databind.JsonNode;
Nils Diewaldf399a672013-11-18 17:55:22 +000012
13import org.slf4j.Logger;
14import org.slf4j.LoggerFactory;
Nils Diewaldf399a672013-11-18 17:55:22 +000015
Nils Diewaldf399a672013-11-18 17:55:22 +000016/**
Nils Diewaldea969502015-02-16 21:10:54 +000017 * CollectionBuilder implements a simple API for creating queries
Nils Diewaldf399a672013-11-18 17:55:22 +000018 * constituing Virtual Collections.
Nils Diewaldbb33da22015-03-04 16:24:25 +000019 *
Nils Diewald0ad01472015-02-18 17:22:06 +000020 * <strong>Warning</strong>: The API is likely to change.
Nils Diewaldbb33da22015-03-04 16:24:25 +000021 *
Nils Diewaldea969502015-02-16 21:10:54 +000022 * @author diewald
Nils Diewaldf399a672013-11-18 17:55:22 +000023 */
Nils Diewaldea969502015-02-16 21:10:54 +000024/*
25 * Todo: WildCardFilter!
26 * Todo: Support delete boolean etc.
27 * Todo: Supports foundries
28 */
29public class CollectionBuilder {
Nils Diewaldbaf68c52013-11-20 13:22:19 +000030 private BooleanFilter filter;
Nils Diewald65894bd2015-02-16 21:36:53 +000031 private String field = "tokens";
Nils Diewaldf399a672013-11-18 17:55:22 +000032
33 // Logger
Nils Diewaldbb33da22015-03-04 16:24:25 +000034 private final static Logger log = LoggerFactory
35 .getLogger(CollectionBuilder.class);
Nils Diewaldf399a672013-11-18 17:55:22 +000036
Nils Diewaldfb4d7b02014-04-09 17:56:17 +000037 // This advices the java compiler to ignore all loggings
38 public static final boolean DEBUG = false;
Nils Diewaldbb33da22015-03-04 16:24:25 +000039
Nils Diewald0ad01472015-02-18 17:22:06 +000040
41 /**
42 * Construct a new CollectionBuilder object.
43 */
Nils Diewaldea969502015-02-16 21:10:54 +000044 public CollectionBuilder () {
Nils Diewald44d5fa12015-01-15 21:31:52 +000045 filter = new BooleanFilter();
Nils Diewaldfb4d7b02014-04-09 17:56:17 +000046 };
Nils Diewaldbb33da22015-03-04 16:24:25 +000047
48
Nils Diewaldbaf68c52013-11-20 13:22:19 +000049 public BooleanFilter and (String type, String ... terms) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000050 BooleanFilter bf = new BooleanFilter();
51 bf.and(type, terms);
52 return bf;
Nils Diewaldf399a672013-11-18 17:55:22 +000053 };
54
Nils Diewaldbb33da22015-03-04 16:24:25 +000055
Nils Diewaldbaf68c52013-11-20 13:22:19 +000056 public BooleanFilter or (String type, String ... terms) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000057 BooleanFilter bf = new BooleanFilter();
58 bf.or(type, terms);
59 return bf;
Nils Diewaldf399a672013-11-18 17:55:22 +000060 };
61
Nils Diewaldbb33da22015-03-04 16:24:25 +000062
Nils Diewaldbaf68c52013-11-20 13:22:19 +000063 public BooleanFilter and (String type, RegexFilter re) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000064 BooleanFilter bf = new BooleanFilter();
65 bf.and(type, re);
66 return bf;
Nils Diewaldf399a672013-11-18 17:55:22 +000067 };
68
Nils Diewaldbb33da22015-03-04 16:24:25 +000069
Nils Diewaldbaf68c52013-11-20 13:22:19 +000070 public BooleanFilter or (String type, RegexFilter re) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000071 BooleanFilter bf = new BooleanFilter();
72 bf.or(type, re);
73 return bf;
Nils Diewaldf399a672013-11-18 17:55:22 +000074 };
75
Nils Diewaldbb33da22015-03-04 16:24:25 +000076
Nils Diewaldbaf68c52013-11-20 13:22:19 +000077 public BooleanFilter since (String date) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000078 BooleanFilter bf = new BooleanFilter();
79 bf.since(date);
80 return bf;
Nils Diewaldf399a672013-11-18 17:55:22 +000081 };
82
Nils Diewaldbb33da22015-03-04 16:24:25 +000083
Nils Diewaldbaf68c52013-11-20 13:22:19 +000084 public BooleanFilter till (String date) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000085 BooleanFilter bf = new BooleanFilter();
86 bf.till(date);
87 return bf;
Nils Diewaldf399a672013-11-18 17:55:22 +000088 };
89
Nils Diewaldbb33da22015-03-04 16:24:25 +000090
Nils Diewaldbaf68c52013-11-20 13:22:19 +000091 public BooleanFilter date (String date) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000092 BooleanFilter bf = new BooleanFilter();
93 bf.date(date);
94 return bf;
Nils Diewaldbaf68c52013-11-20 13:22:19 +000095 };
Nils Diewaldf399a672013-11-18 17:55:22 +000096
Nils Diewaldbb33da22015-03-04 16:24:25 +000097
Nils Diewaldbaf68c52013-11-20 13:22:19 +000098 public BooleanFilter between (String date1, String date2) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000099 BooleanFilter bf = new BooleanFilter();
100 bf.between(date1, date2);
101 return bf;
Nils Diewaldbaf68c52013-11-20 13:22:19 +0000102 };
Nils Diewaldf399a672013-11-18 17:55:22 +0000103
Nils Diewaldbb33da22015-03-04 16:24:25 +0000104
Nils Diewaldbaf68c52013-11-20 13:22:19 +0000105 public RegexFilter re (String regex) {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000106 return new RegexFilter(regex);
Nils Diewaldbaf68c52013-11-20 13:22:19 +0000107 };
Nils Diewaldfb4d7b02014-04-09 17:56:17 +0000108
Nils Diewaldbb33da22015-03-04 16:24:25 +0000109
110 public BooleanFilter getBooleanFilter () {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000111 return this.filter;
Nils Diewaldfb4d7b02014-04-09 17:56:17 +0000112 };
113
Nils Diewaldbb33da22015-03-04 16:24:25 +0000114
Nils Diewald8db8f922014-10-24 17:43:13 +0000115 public void setBooleanFilter (BooleanFilter bf) {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000116 this.filter = bf;
Nils Diewald8db8f922014-10-24 17:43:13 +0000117 };
118
Nils Diewaldbb33da22015-03-04 16:24:25 +0000119
Nils Diewaldfb4d7b02014-04-09 17:56:17 +0000120 public Query toQuery () {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000121 return this.filter.toQuery();
Nils Diewaldfb4d7b02014-04-09 17:56:17 +0000122 };
123
Nils Diewaldbb33da22015-03-04 16:24:25 +0000124
Nils Diewaldfb4d7b02014-04-09 17:56:17 +0000125 public String toString () {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000126 return this.filter.toQuery().toString();
Nils Diewaldfb4d7b02014-04-09 17:56:17 +0000127 };
Nils Diewaldf399a672013-11-18 17:55:22 +0000128};