| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query.serialize; |
| 2 | |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 3 | import lombok.Data; |
| 4 | |
| Michael Hanl | 034be0d | 2014-02-14 10:17:34 +0000 | [diff] [blame] | 5 | import java.util.LinkedHashMap; |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 6 | import java.util.LinkedList; |
| 7 | import java.util.List; |
| 8 | import java.util.Map; |
| 9 | |
| 10 | /** |
| 11 | * @author hanl |
| 12 | * @date 07/02/2014 |
| 13 | */ |
| Michael Hanl | df206ab | 2014-05-13 10:22:27 +0000 | [diff] [blame] | 14 | public class MetaQueryBuilder { |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 15 | |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 16 | private Map meta; |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 17 | private SpanContext spanContext; |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 18 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 19 | public MetaQueryBuilder() { |
| Michael Hanl | 034be0d | 2014-02-14 10:17:34 +0000 | [diff] [blame] | 20 | this.meta = new LinkedHashMap(); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 21 | this.meta.put("fields", new LinkedList<>()); |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 22 | } |
| 23 | |
| Michael Hanl | b9f3fd1 | 2014-06-03 11:38:27 +0000 | [diff] [blame] | 24 | /** |
| 25 | * context segment if context is either of type char or token. |
| 26 | * size can differ for left and right span |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 27 | * |
| Michael Hanl | b9f3fd1 | 2014-06-03 11:38:27 +0000 | [diff] [blame] | 28 | * @param left |
| 29 | * @param leftType |
| 30 | * @param right |
| 31 | * @param rightType |
| 32 | * @return |
| 33 | */ |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 34 | public MetaQueryBuilder setSpanContext(Integer left, String leftType, |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 35 | Integer right, String rightType) { |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 36 | this.spanContext = new SpanContext(left, leftType, right, rightType); |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 37 | return this; |
| 38 | } |
| 39 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 40 | public SpanContext getSpanContext() { |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 41 | return this.spanContext; |
| 42 | } |
| 43 | |
| Michael Hanl | b9f3fd1 | 2014-06-03 11:38:27 +0000 | [diff] [blame] | 44 | /** |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 45 | * context if of type paragraph or sentence where left and right |
| 46 | * size delimiters are irrelevant; or 2-token, 2-char p/paragraph, |
| Michael Hanl | 93518e4 | 2015-06-26 16:18:06 +0200 | [diff] [blame^] | 47 | * s/sentence or token, char. |
| 48 | * Distinguish |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 49 | * |
| Michael Hanl | 1b7f54a | 2014-07-25 17:35:55 +0000 | [diff] [blame] | 50 | * @param context |
| Michael Hanl | b9f3fd1 | 2014-06-03 11:38:27 +0000 | [diff] [blame] | 51 | * @return |
| 52 | */ |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 53 | public MetaQueryBuilder setSpanContext(String context) { |
| Michael Hanl | 93518e4 | 2015-06-26 16:18:06 +0200 | [diff] [blame^] | 54 | if (context != null) { |
| 55 | if (!context.contains("-") || context.contains(":")) |
| 56 | this.spanContext = new SpanContext(context); |
| 57 | else { |
| 58 | String[] ct = context.replaceAll("\\s+", "").split(","); |
| 59 | String[] lc = ct[0].split("-"); |
| 60 | String[] rc = ct[1].split("-"); |
| 61 | this.spanContext = new SpanContext(Integer.valueOf(lc[0]), |
| 62 | lc[1], Integer.valueOf(rc[0]), rc[1]); |
| 63 | } |
| Michael Hanl | 1b7f54a | 2014-07-25 17:35:55 +0000 | [diff] [blame] | 64 | } |
| Michael Hanl | b9f3fd1 | 2014-06-03 11:38:27 +0000 | [diff] [blame] | 65 | return this; |
| 66 | } |
| 67 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 68 | public MetaQueryBuilder addEntry(String name, Object value) { |
| Michael Hanl | 93518e4 | 2015-06-26 16:18:06 +0200 | [diff] [blame^] | 69 | if (value != null) |
| 70 | meta.put(name, value); |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 71 | return this; |
| 72 | } |
| 73 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 74 | public Map raw() { |
| Michael Hanl | dd5c965 | 2014-09-02 18:51:08 +0000 | [diff] [blame] | 75 | if (this.spanContext != null) |
| 76 | meta.putAll(this.spanContext.raw()); |
| Michael Hanl | 034be0d | 2014-02-14 10:17:34 +0000 | [diff] [blame] | 77 | return meta; |
| 78 | } |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 79 | |
| Michael Hanl | 93518e4 | 2015-06-26 16:18:06 +0200 | [diff] [blame^] | 80 | |
| 81 | |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 82 | @Data |
| 83 | public class SpanContext { |
| 84 | private String left_type; |
| 85 | private String right_type; |
| 86 | private int left_size; |
| 87 | private int right_size; |
| 88 | private String context = null; |
| 89 | |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 90 | /** |
| 91 | * context segment if context is either of type char or token. |
| 92 | * size can differ for left and right span |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 93 | * |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 94 | * @param ls |
| 95 | * @param lt |
| 96 | * @param rs |
| 97 | * @param rt |
| 98 | * @return |
| 99 | */ |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 100 | public SpanContext(int ls, String lt, int rs, String rt) { |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 101 | this.left_type = lt; |
| 102 | this.left_size = ls; |
| 103 | this.right_type = rt; |
| 104 | this.right_size = rs; |
| 105 | } |
| 106 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 107 | public SpanContext(String context) { |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 108 | this.context = context; |
| 109 | } |
| 110 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 111 | public Map raw() { |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 112 | Map meta = new LinkedHashMap(); |
| 113 | if (this.context == null) { |
| 114 | Map map = new LinkedHashMap(); |
| 115 | List l = new LinkedList(); |
| 116 | List r = new LinkedList(); |
| 117 | l.add(this.left_type); |
| 118 | l.add(this.left_size); |
| 119 | map.put("left", l); |
| 120 | r.add(this.right_type); |
| 121 | r.add(this.right_size); |
| 122 | map.put("right", r); |
| 123 | meta.put("context", map); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 124 | }else |
| Michael Hanl | c1c3b5d | 2014-08-04 16:57:46 +0000 | [diff] [blame] | 125 | meta.put("context", this.context); |
| 126 | return meta; |
| 127 | } |
| 128 | } |
| Michael Hanl | ed5658f | 2014-02-07 22:24:46 +0000 | [diff] [blame] | 129 | } |