blob: ff9ae05b72862f83accaaa946734955292829720 [file] [log] [blame]
Nils Diewaldf399a672013-11-18 17:55:22 +00001package de.ids_mannheim.korap.query.wrap;
2
3import org.apache.lucene.search.spans.SpanQuery;
4
5import de.ids_mannheim.korap.query.SpanClassQuery;
Nils Diewaldbe5943e2014-10-21 19:35:34 +00006import de.ids_mannheim.korap.util.QueryException;
Nils Diewaldf399a672013-11-18 17:55:22 +00007
Nils Diewaldf399a672013-11-18 17:55:22 +00008
Nils Diewald0cc4f2e2015-01-30 20:13:08 +00009// TODO: If this.subquery.isNegative(), it may be an Expansion!
10// SpanExpansionQuery(x, y.negative, min, max. direction???, classNumber, true)
11
Nils Diewald92729ce2014-10-06 16:00:17 +000012public class SpanClassQueryWrapper extends SpanQueryWrapper {
13 private SpanQueryWrapper subquery;
Nils Diewaldf399a672013-11-18 17:55:22 +000014
Nils Diewaldbb33da22015-03-04 16:24:25 +000015
Nils Diewald92729ce2014-10-06 16:00:17 +000016 public SpanClassQueryWrapper (SpanQueryWrapper subquery, byte number) {
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000017 this.subquery = subquery;
Nils Diewaldbb33da22015-03-04 16:24:25 +000018 this.number = number;
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000019 if (number != (byte) 0)
20 this.hasClass = true;
Akrona26184e2018-12-05 15:37:34 +010021 this.maybeUnsorted = subquery.maybeUnsorted();
Nils Diewaldf399a672013-11-18 17:55:22 +000022 };
23
Nils Diewaldbb33da22015-03-04 16:24:25 +000024
Nils Diewald92729ce2014-10-06 16:00:17 +000025 public SpanClassQueryWrapper (SpanQueryWrapper subquery, short number) {
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000026 this(subquery, (byte) number);
Nils Diewaldf399a672013-11-18 17:55:22 +000027 };
28
Nils Diewaldbb33da22015-03-04 16:24:25 +000029
Nils Diewald92729ce2014-10-06 16:00:17 +000030 public SpanClassQueryWrapper (SpanQueryWrapper subquery, int number) {
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000031 this(subquery, (byte) number);
Nils Diewaldf399a672013-11-18 17:55:22 +000032 };
33
Nils Diewaldbb33da22015-03-04 16:24:25 +000034
Nils Diewald92729ce2014-10-06 16:00:17 +000035 public SpanClassQueryWrapper (SpanQueryWrapper subquery) {
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000036 this(subquery, (byte) 0);
37 };
38
Nils Diewald0981c212015-02-13 20:47:10 +000039
40 @Override
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000041 public boolean isEmpty () {
42 return this.subquery.isEmpty();
43 };
44
Nils Diewald0981c212015-02-13 20:47:10 +000045
46 @Override
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000047 public boolean isOptional () {
48 return this.subquery.isOptional();
49 };
50
Nils Diewald0981c212015-02-13 20:47:10 +000051
52 @Override
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000053 public boolean isNull () {
54 return this.subquery.isNull();
55 };
56
Nils Diewald0981c212015-02-13 20:47:10 +000057
58 @Override
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000059 public boolean isNegative () {
60 return this.subquery.isNegative();
Nils Diewaldf399a672013-11-18 17:55:22 +000061 };
62
Akrona7b936d2016-03-04 13:40:54 +010063 public SpanQuery toFragmentQuery () throws QueryException {
Nils Diewaldbb33da22015-03-04 16:24:25 +000064 if (this.subquery.isNull())
Nils Diewald6409a922015-01-29 20:50:42 +000065 return (SpanQuery) null;
Nils Diewald92729ce2014-10-06 16:00:17 +000066
Eliza Margaretha6f989202016-10-14 21:48:29 +020067 SpanQuery sq = (SpanQuery) this.subquery.retrieveNode(this.retrieveNode)
68 .toFragmentQuery();
Nils Diewald6409a922015-01-29 20:50:42 +000069
Nils Diewaldbb33da22015-03-04 16:24:25 +000070 if (sq == null)
71 return (SpanQuery) null;
72
Nils Diewald6409a922015-01-29 20:50:42 +000073 if (this.number == (byte) 0) {
74 return new SpanClassQuery(sq);
75 };
76 return new SpanClassQuery(sq, (byte) this.number);
Nils Diewaldf399a672013-11-18 17:55:22 +000077 };
Nils Diewaldf399a672013-11-18 17:55:22 +000078};