blob: 85b7a0eeffacaac06f503908aadfe9c66f918998 [file] [log] [blame]
Michael Hanled5658f2014-02-07 22:24:46 +00001package de.ids_mannheim.korap.query.serialize;
2
Michael Hanlc1c3b5d2014-08-04 16:57:46 +00003import lombok.Data;
4
Michael Hanl034be0d2014-02-14 10:17:34 +00005import java.util.LinkedHashMap;
Michael Hanled5658f2014-02-07 22:24:46 +00006import java.util.LinkedList;
7import java.util.List;
8import java.util.Map;
9
10/**
11 * @author hanl
12 * @date 07/02/2014
13 */
Michael Hanldf206ab2014-05-13 10:22:27 +000014public class MetaQueryBuilder {
Michael Hanled5658f2014-02-07 22:24:46 +000015
Michael Hanled5658f2014-02-07 22:24:46 +000016 private Map meta;
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000017 private SpanContext spanContext;
Michael Hanled5658f2014-02-07 22:24:46 +000018
Joachim Bingel20e06ac2015-01-15 10:31:33 +000019 public MetaQueryBuilder () {
Michael Hanl034be0d2014-02-14 10:17:34 +000020 this.meta = new LinkedHashMap();
Michael Hanled5658f2014-02-07 22:24:46 +000021 }
22
Michael Hanlb9f3fd12014-06-03 11:38:27 +000023 /**
24 * context segment if context is either of type char or token.
25 * size can differ for left and right span
Michael Hanl1b7f54a2014-07-25 17:35:55 +000026 *
Michael Hanlb9f3fd12014-06-03 11:38:27 +000027 * @param left
28 * @param leftType
29 * @param right
30 * @param rightType
31 * @return
32 */
Michael Hanldd5c9652014-09-02 18:51:08 +000033 public MetaQueryBuilder setSpanContext(Integer left, String leftType,
Joachim Bingel20e06ac2015-01-15 10:31:33 +000034 Integer right, String rightType) {
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000035 this.spanContext = new SpanContext(left, leftType, right, rightType);
Michael Hanled5658f2014-02-07 22:24:46 +000036 return this;
37 }
38
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000039 public SpanContext getSpanContext() {
40 return this.spanContext;
41 }
42
Michael Hanlb9f3fd12014-06-03 11:38:27 +000043 /**
Joachim Bingel20e06ac2015-01-15 10:31:33 +000044 * context if of type paragraph or sentence where left and right
45 * size delimiters are irrelevant; or 2-token, 2-char p/paragraph,
46 * s/sentence or token, char
Michael Hanl1b7f54a2014-07-25 17:35:55 +000047 *
48 * @param context
Michael Hanlb9f3fd12014-06-03 11:38:27 +000049 * @return
50 */
Michael Hanldd5c9652014-09-02 18:51:08 +000051 public MetaQueryBuilder setSpanContext(String context) {
Michael Hanl1b7f54a2014-07-25 17:35:55 +000052 if (context.startsWith("s") | context.startsWith("p"))
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000053 this.spanContext = new SpanContext(context);
Michael Hanl1b7f54a2014-07-25 17:35:55 +000054 else {
Joachim Bingel20e06ac2015-01-15 10:31:33 +000055 String[] ct = context.replaceAll("\\s+", "").split(",");
Michael Hanl1b7f54a2014-07-25 17:35:55 +000056 String[] lc = ct[0].split("-");
57 String[] rc = ct[1].split("-");
Joachim Bingel20e06ac2015-01-15 10:31:33 +000058 this.spanContext = new SpanContext(Integer.valueOf(lc[0]), lc[1],
59 Integer.valueOf(rc[0]), rc[1]);
Michael Hanl1b7f54a2014-07-25 17:35:55 +000060 }
Michael Hanlb9f3fd12014-06-03 11:38:27 +000061 return this;
62 }
63
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000064 public MetaQueryBuilder fillMeta(Integer pageIndex, Integer pageInteger,
Joachim Bingel20e06ac2015-01-15 10:31:33 +000065 Integer pageLength, String ctx, Boolean cutoff) {
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000066 if (pageIndex != null)
Michael Hanlecb9c1b2014-08-05 14:01:36 +000067 this.addEntry("startIndex", pageIndex);
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000068 if (pageIndex == null && pageInteger != null)
Michael Hanlecb9c1b2014-08-05 14:01:36 +000069 this.addEntry("startPage", pageInteger);
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000070 if (pageLength != null)
Michael Hanlecb9c1b2014-08-05 14:01:36 +000071 this.addEntry("count", pageLength);
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000072 if (ctx != null)
Michael Hanldd5c9652014-09-02 18:51:08 +000073 this.setSpanContext(ctx);
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000074 if (cutoff != null)
Michael Hanlecb9c1b2014-08-05 14:01:36 +000075 this.addEntry("cutOff", cutoff);
76 return this;
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000077 }
78
Michael Hanldf206ab2014-05-13 10:22:27 +000079 public MetaQueryBuilder addEntry(String name, Object value) {
Michael Hanled5658f2014-02-07 22:24:46 +000080 meta.put(name, value);
81 return this;
82 }
83
Michael Hanl034be0d2014-02-14 10:17:34 +000084 public Map raw() {
Michael Hanldd5c9652014-09-02 18:51:08 +000085 if (this.spanContext != null)
86 meta.putAll(this.spanContext.raw());
Michael Hanl034be0d2014-02-14 10:17:34 +000087 return meta;
88 }
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000089
90 @Data
91 public class SpanContext {
92 private String left_type;
93 private String right_type;
94 private int left_size;
95 private int right_size;
96 private String context = null;
97
Michael Hanlc1c3b5d2014-08-04 16:57:46 +000098 /**
99 * context segment if context is either of type char or token.
100 * size can differ for left and right span
101 *
102 * @param ls
103 * @param lt
104 * @param rs
105 * @param rt
106 * @return
107 */
Joachim Bingel20e06ac2015-01-15 10:31:33 +0000108 public SpanContext (int ls, String lt, int rs, String rt) {
Michael Hanlc1c3b5d2014-08-04 16:57:46 +0000109 this.left_type = lt;
110 this.left_size = ls;
111 this.right_type = rt;
112 this.right_size = rs;
113 }
114
Joachim Bingel20e06ac2015-01-15 10:31:33 +0000115 public SpanContext (String context) {
Michael Hanlc1c3b5d2014-08-04 16:57:46 +0000116 this.context = context;
117 }
118
119 public Map raw() {
120 Map meta = new LinkedHashMap();
121 if (this.context == null) {
122 Map map = new LinkedHashMap();
123 List l = new LinkedList();
124 List r = new LinkedList();
125 l.add(this.left_type);
126 l.add(this.left_size);
127 map.put("left", l);
128 r.add(this.right_type);
129 r.add(this.right_size);
130 map.put("right", r);
131 meta.put("context", map);
Joachim Bingel20e06ac2015-01-15 10:31:33 +0000132 }
133 else
Michael Hanlc1c3b5d2014-08-04 16:57:46 +0000134 meta.put("context", this.context);
135 return meta;
136 }
137 }
Michael Hanled5658f2014-02-07 22:24:46 +0000138}