| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query.wrap; |
| 2 | |
| 3 | import org.apache.lucene.search.spans.SpanQuery; |
| 4 | |
| 5 | import de.ids_mannheim.korap.query.SpanClassQuery; |
| Nils Diewald | be5943e | 2014-10-21 19:35:34 +0000 | [diff] [blame] | 6 | import de.ids_mannheim.korap.util.QueryException; |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 7 | |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 8 | |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 9 | // TODO: If this.subquery.isNegative(), it may be an Expansion! |
| 10 | // SpanExpansionQuery(x, y.negative, min, max. direction???, classNumber, true) |
| 11 | |
| Nils Diewald | 92729ce | 2014-10-06 16:00:17 +0000 | [diff] [blame] | 12 | public class SpanClassQueryWrapper extends SpanQueryWrapper { |
| 13 | private SpanQueryWrapper subquery; |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 14 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 15 | |
| Nils Diewald | 92729ce | 2014-10-06 16:00:17 +0000 | [diff] [blame] | 16 | public SpanClassQueryWrapper (SpanQueryWrapper subquery, byte number) { |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 17 | this.subquery = subquery; |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 18 | this.number = number; |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 19 | if (number != (byte) 0) |
| 20 | this.hasClass = true; |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 21 | }; |
| 22 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 23 | |
| Nils Diewald | 92729ce | 2014-10-06 16:00:17 +0000 | [diff] [blame] | 24 | public SpanClassQueryWrapper (SpanQueryWrapper subquery, short number) { |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 25 | this(subquery, (byte) number); |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 26 | }; |
| 27 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 28 | |
| Nils Diewald | 92729ce | 2014-10-06 16:00:17 +0000 | [diff] [blame] | 29 | public SpanClassQueryWrapper (SpanQueryWrapper subquery, int number) { |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 30 | this(subquery, (byte) number); |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 31 | }; |
| 32 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 33 | |
| Nils Diewald | 92729ce | 2014-10-06 16:00:17 +0000 | [diff] [blame] | 34 | public SpanClassQueryWrapper (SpanQueryWrapper subquery) { |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 35 | this(subquery, (byte) 0); |
| 36 | }; |
| 37 | |
| Nils Diewald | 0981c21 | 2015-02-13 20:47:10 +0000 | [diff] [blame] | 38 | |
| 39 | @Override |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 40 | public boolean isEmpty () { |
| 41 | return this.subquery.isEmpty(); |
| 42 | }; |
| 43 | |
| Nils Diewald | 0981c21 | 2015-02-13 20:47:10 +0000 | [diff] [blame] | 44 | |
| 45 | @Override |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 46 | public boolean isOptional () { |
| 47 | return this.subquery.isOptional(); |
| 48 | }; |
| 49 | |
| Nils Diewald | 0981c21 | 2015-02-13 20:47:10 +0000 | [diff] [blame] | 50 | |
| 51 | @Override |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 52 | public boolean isNull () { |
| 53 | return this.subquery.isNull(); |
| 54 | }; |
| 55 | |
| Nils Diewald | 0981c21 | 2015-02-13 20:47:10 +0000 | [diff] [blame] | 56 | |
| 57 | @Override |
| Nils Diewald | 0cc4f2e | 2015-01-30 20:13:08 +0000 | [diff] [blame] | 58 | public boolean isNegative () { |
| 59 | return this.subquery.isNegative(); |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 60 | }; |
| 61 | |
| Nils Diewald | 0981c21 | 2015-02-13 20:47:10 +0000 | [diff] [blame] | 62 | |
| 63 | @Override |
| 64 | public boolean maybeUnsorted () { |
| 65 | return this.subquery.maybeUnsorted(); |
| 66 | }; |
| 67 | |
| 68 | |
| Akron | a7b936d | 2016-03-04 13:40:54 +0100 | [diff] [blame] | 69 | public SpanQuery toFragmentQuery () throws QueryException { |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 70 | if (this.subquery.isNull()) |
| Nils Diewald | 6409a92 | 2015-01-29 20:50:42 +0000 | [diff] [blame] | 71 | return (SpanQuery) null; |
| Nils Diewald | 92729ce | 2014-10-06 16:00:17 +0000 | [diff] [blame] | 72 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 73 | SpanQuery sq = (SpanQuery) this.subquery |
| Akron | a7b936d | 2016-03-04 13:40:54 +0100 | [diff] [blame] | 74 | .retrieveNode(this.retrieveNode).toFragmentQuery(); |
| Nils Diewald | 6409a92 | 2015-01-29 20:50:42 +0000 | [diff] [blame] | 75 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 76 | if (sq == null) |
| 77 | return (SpanQuery) null; |
| 78 | |
| Nils Diewald | 6409a92 | 2015-01-29 20:50:42 +0000 | [diff] [blame] | 79 | if (this.number == (byte) 0) { |
| 80 | return new SpanClassQuery(sq); |
| 81 | }; |
| 82 | return new SpanClassQuery(sq, (byte) this.number); |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 83 | }; |
| Nils Diewald | f399a67 | 2013-11-18 17:55:22 +0000 | [diff] [blame] | 84 | }; |