| Joachim Bingel | 4b405f5 | 2013-11-15 15:29:30 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query.serialize; |
| 2 | |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 3 | import com.fasterxml.jackson.core.JsonProcessingException; |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 4 | import com.fasterxml.jackson.databind.ObjectMapper; |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 5 | import de.ids_mannheim.korap.query.serialize.util.KoralObjectGenerator; |
| Joachim Bingel | e3fe367 | 2014-12-17 18:35:58 +0000 | [diff] [blame] | 6 | import de.ids_mannheim.korap.query.serialize.util.StatusCodes; |
| Joachim Bingel | 6e4e9f3 | 2015-01-30 18:59:31 +0000 | [diff] [blame] | 7 | import org.apache.log4j.BasicConfigurator; |
| Michael Hanl | 85d4b5d | 2014-07-25 12:07:20 +0000 | [diff] [blame] | 8 | import org.slf4j.Logger; |
| Michael Hanl | 9ca5edd | 2013-12-06 05:13:24 +0000 | [diff] [blame] | 9 | import org.slf4j.LoggerFactory; |
| Joachim Bingel | 4b405f5 | 2013-11-15 15:29:30 +0000 | [diff] [blame] | 10 | |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 11 | import java.io.IOException; |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 12 | import java.util.*; |
| Joachim Bingel | b5ada90 | 2013-11-19 14:46:04 +0000 | [diff] [blame] | 13 | |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 14 | /** |
| Joachim Bingel | a6954de | 2015-03-20 16:37:37 +0100 | [diff] [blame] | 15 | * Main class for Koral, serializes queries from concrete QLs to |
| 16 | * KoralQuery |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 17 | * |
| Joachim Bingel | a6954de | 2015-03-20 16:37:37 +0100 | [diff] [blame] | 18 | * @author Joachim Bingel (bingel@ids-mannheim.de), |
| Joachim Bingel | 364085b | 2015-03-11 15:28:37 +0100 | [diff] [blame] | 19 | * Michael Hanl (hanl@ids-mannheim.de) |
| Joachim Bingel | 7cb346e | 2015-03-09 10:56:20 +0100 | [diff] [blame] | 20 | * @version 0.3.0 |
| 21 | * @since 0.1.0 |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 22 | */ |
| Michael Hanl | 4fe41cc | 2013-12-10 17:59:51 +0000 | [diff] [blame] | 23 | public class QuerySerializer { |
| Joachim Bingel | 4b405f5 | 2013-11-15 15:29:30 +0000 | [diff] [blame] | 24 | |
| Michael Hanl | 3f0c4c4 | 2015-07-02 20:21:23 +0200 | [diff] [blame] | 25 | // fixme: not used in any way! |
| 26 | @Deprecated |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 27 | static HashMap<String, Class<? extends AbstractQueryProcessor>> qlProcessorAssignment; |
| 28 | |
| Michael Hanl | 3f0c4c4 | 2015-07-02 20:21:23 +0200 | [diff] [blame] | 29 | |
| 30 | |
| 31 | |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 32 | static { |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 33 | qlProcessorAssignment = new HashMap<String, Class<? extends AbstractQueryProcessor>>(); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 34 | qlProcessorAssignment |
| 35 | .put("poliqarpplus", PoliqarpPlusQueryProcessor.class); |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 36 | qlProcessorAssignment.put("cosmas2", Cosmas2QueryProcessor.class); |
| 37 | qlProcessorAssignment.put("annis", AnnisQueryProcessor.class); |
| 38 | qlProcessorAssignment.put("cql", CqlQueryProcessor.class); |
| 39 | } |
| 40 | |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 41 | private static ObjectMapper mapper = new ObjectMapper(); |
| 42 | private Logger qllogger = LoggerFactory.getLogger("ql"); |
| Michael Hanl | 2a30f42 | 2014-04-01 16:41:44 +0000 | [diff] [blame] | 43 | public static String queryLanguageVersion; |
| 44 | |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 45 | private AbstractQueryProcessor ast; |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 46 | private Map<String, Object> collection = new LinkedHashMap<>(); |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 47 | private Map<String, Object> meta; |
| 48 | private List<Object> errors; |
| 49 | private List<Object> warnings; |
| 50 | private List<Object> messages; |
| Michael Hanl | 9ca5edd | 2013-12-06 05:13:24 +0000 | [diff] [blame] | 51 | private org.slf4j.Logger log = LoggerFactory |
| Michael Hanl | 4fe41cc | 2013-12-10 17:59:51 +0000 | [diff] [blame] | 52 | .getLogger(QuerySerializer.class); |
| Joachim Bingel | 4b405f5 | 2013-11-15 15:29:30 +0000 | [diff] [blame] | 53 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 54 | public QuerySerializer() { |
| 55 | this.errors = new LinkedList<>(); |
| 56 | this.warnings = new LinkedList<>(); |
| 57 | this.messages = new LinkedList<>(); |
| 58 | } |
| Joachim Bingel | a6954de | 2015-03-20 16:37:37 +0100 | [diff] [blame] | 59 | |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 60 | /** |
| 61 | * @param args |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 62 | */ |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 63 | public static void main(String[] args) { |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 64 | /* |
| 65 | * just for testing... |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 66 | */ |
| Joachim Bingel | 6e4e9f3 | 2015-01-30 18:59:31 +0000 | [diff] [blame] | 67 | BasicConfigurator.configure(); |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 68 | QuerySerializer jg = new QuerySerializer(); |
| 69 | int i = 0; |
| Joachim Bingel | 2b00f49 | 2015-01-31 18:25:49 +0000 | [diff] [blame] | 70 | String[] queries = null; |
| Joachim Bingel | 6e4e9f3 | 2015-01-30 18:59:31 +0000 | [diff] [blame] | 71 | String ql = "poliqarpplus"; |
| 72 | if (args.length < 2) { |
| Joachim Bingel | a6954de | 2015-03-20 16:37:37 +0100 | [diff] [blame] | 73 | System.err |
| 74 | .println("Usage: QuerySerializer \"query\" queryLanguage"); |
| Joachim Bingel | 2b00f49 | 2015-01-31 18:25:49 +0000 | [diff] [blame] | 75 | System.exit(1); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 76 | }else { |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 77 | queries = new String[] { args[0] }; |
| Joachim Bingel | a6954de | 2015-03-20 16:37:37 +0100 | [diff] [blame] | 78 | ql = args[1]; |
| Joachim Bingel | 6e4e9f3 | 2015-01-30 18:59:31 +0000 | [diff] [blame] | 79 | } |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 80 | for (String q : queries) { |
| 81 | i++; |
| 82 | try { |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 83 | jg.run(q, ql); |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 84 | System.out.println(); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 85 | }catch (NullPointerException npe) { |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 86 | npe.printStackTrace(); |
| 87 | System.out.println("null\n"); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 88 | }catch (IOException e) { |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 89 | e.printStackTrace(); |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 90 | } |
| 91 | } |
| 92 | } |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 93 | |
| 94 | /** |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 95 | * Runs the QuerySerializer by initializing the relevant |
| 96 | * AbstractSyntaxTree implementation (depending on specified query |
| 97 | * language) and transforms and writes the tree's requestMap to |
| 98 | * the specified output file. |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 99 | * |
| 100 | * @param query The query string |
| 101 | * @param queryLanguage The query language. As of 17 Dec 2014, this must be |
| 102 | * one of 'poliqarpplus', 'cosmas2', 'annis' or 'cql'. |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 103 | * @throws IOException |
| 104 | */ |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 105 | public void run(String query, String queryLanguage) throws IOException { |
| Joachim Bingel | 3d5b69b | 2015-01-14 10:46:44 +0000 | [diff] [blame] | 106 | if (queryLanguage.equalsIgnoreCase("poliqarp")) { |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 107 | ast = new PoliqarpPlusQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 108 | }else if (queryLanguage.equalsIgnoreCase("cosmas2")) { |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 109 | ast = new Cosmas2QueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 110 | }else if (queryLanguage.equalsIgnoreCase("poliqarpplus")) { |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 111 | ast = new PoliqarpPlusQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 112 | }else if (queryLanguage.equalsIgnoreCase("cql")) { |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 113 | ast = new CqlQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 114 | }else if (queryLanguage.equalsIgnoreCase("annis")) { |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 115 | ast = new AnnisQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 116 | }else { |
| 117 | throw new IllegalArgumentException( |
| 118 | queryLanguage + " is not a supported query language!"); |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 119 | } |
| Joachim Bingel | 017915d | 2014-12-16 13:03:04 +0000 | [diff] [blame] | 120 | toJSON(); |
| Joachim Bingel | 009623f | 2014-12-16 10:46:43 +0000 | [diff] [blame] | 121 | } |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 122 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 123 | public QuerySerializer setQuery(String query, String ql, String version) { |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 124 | ast = new DummyQueryProcessor(); |
| 125 | if (query == null || query.isEmpty()) { |
| 126 | ast.addError(StatusCodes.NO_QUERY, "You did not specify a query!"); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 127 | }else if (ql == null || ql.isEmpty()) { |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 128 | ast.addError(StatusCodes.NO_QUERY, |
| 129 | "You did not specify any query language!"); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 130 | }else if (ql.equalsIgnoreCase("poliqarp")) { |
| Joachim Bingel | 3d5b69b | 2015-01-14 10:46:44 +0000 | [diff] [blame] | 131 | ast = new PoliqarpPlusQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 132 | }else if (ql.equalsIgnoreCase("cosmas2")) { |
| Joachim Bingel | 3d5b69b | 2015-01-14 10:46:44 +0000 | [diff] [blame] | 133 | ast = new Cosmas2QueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 134 | }else if (ql.equalsIgnoreCase("poliqarpplus")) { |
| Joachim Bingel | 3d5b69b | 2015-01-14 10:46:44 +0000 | [diff] [blame] | 135 | ast = new PoliqarpPlusQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 136 | }else if (ql.equalsIgnoreCase("cql")) { |
| Joachim Bingel | 3d5b69b | 2015-01-14 10:46:44 +0000 | [diff] [blame] | 137 | if (version == null) |
| 138 | ast = new CqlQueryProcessor(query); |
| 139 | else |
| 140 | ast = new CqlQueryProcessor(query, version); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 141 | }else if (ql.equalsIgnoreCase("annis")) { |
| Joachim Bingel | 3d5b69b | 2015-01-14 10:46:44 +0000 | [diff] [blame] | 142 | ast = new AnnisQueryProcessor(query); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 143 | }else { |
| 144 | ast.addError(StatusCodes.UNKNOWN_QL, |
| 145 | ql + " is not a supported query language!"); |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 146 | } |
| Michael Hanl | 0b70bb3 | 2014-05-06 16:09:41 +0000 | [diff] [blame] | 147 | return this; |
| 148 | } |
| Michael Hanl | 034be0d | 2014-02-14 10:17:34 +0000 | [diff] [blame] | 149 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 150 | public QuerySerializer setQuery(String query, String ql) { |
| Michael Hanl | baf1a5e | 2014-05-15 19:51:40 +0000 | [diff] [blame] | 151 | return setQuery(query, ql, ""); |
| 152 | } |
| 153 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 154 | public void setVerbose(boolean verbose) { |
| Joachim Bingel | a6465ef | 2015-01-16 14:24:34 +0000 | [diff] [blame] | 155 | AbstractQueryProcessor.verbose = verbose; |
| 156 | } |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 157 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 158 | public final String toJSON() { |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 159 | String ser; |
| 160 | try { |
| 161 | ser = mapper.writeValueAsString(raw()); |
| 162 | qllogger.info("Serialized query: " + ser); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 163 | }catch (JsonProcessingException e) { |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 164 | return ""; |
| 165 | } |
| Michael Hanl | 85d4b5d | 2014-07-25 12:07:20 +0000 | [diff] [blame] | 166 | return ser; |
| Michael Hanl | 44c73f0 | 2013-12-06 03:12:52 +0000 | [diff] [blame] | 167 | } |
| Michael Hanl | 0b70bb3 | 2014-05-06 16:09:41 +0000 | [diff] [blame] | 168 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 169 | public final Map build() { |
| Michael Hanl | 91917f2 | 2014-06-04 14:38:48 +0000 | [diff] [blame] | 170 | return raw(); |
| 171 | } |
| Michael Hanl | 0b70bb3 | 2014-05-06 16:09:41 +0000 | [diff] [blame] | 172 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 173 | private Map raw() { |
| Michael Hanl | 2bd00c6 | 2014-11-04 16:26:42 +0000 | [diff] [blame] | 174 | if (ast != null) { |
| Michael Hanl | 15311e0 | 2016-06-02 17:20:34 +0200 | [diff] [blame^] | 175 | Map<String, Object> requestMap = new HashMap<>(ast.getRequestMap()); |
| Michael Hanl | 2bd00c6 | 2014-11-04 16:26:42 +0000 | [diff] [blame] | 176 | Map meta = (Map) requestMap.get("meta"); |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 177 | Map collection = (Map) requestMap.get("collection"); |
| Joachim Bingel | 017915d | 2014-12-16 13:03:04 +0000 | [diff] [blame] | 178 | List errors = (List) requestMap.get("errors"); |
| 179 | List warnings = (List) requestMap.get("warnings"); |
| 180 | List messages = (List) requestMap.get("messages"); |
| Michael Hanl | 78208a8 | 2016-05-23 16:25:02 +0200 | [diff] [blame] | 181 | collection = mergeCollection(collection, this.collection); |
| 182 | requestMap.put("collection", collection); |
| Michael Hanl | 2bd00c6 | 2014-11-04 16:26:42 +0000 | [diff] [blame] | 183 | if (this.meta != null) { |
| Michael Hanl | 15311e0 | 2016-06-02 17:20:34 +0200 | [diff] [blame^] | 184 | meta.putAll(this.meta); |
| 185 | requestMap.put("meta", meta); |
| Michael Hanl | 2bd00c6 | 2014-11-04 16:26:42 +0000 | [diff] [blame] | 186 | } |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 187 | if (this.errors != null && !this.errors.isEmpty()) { |
| Joachim Bingel | 017915d | 2014-12-16 13:03:04 +0000 | [diff] [blame] | 188 | errors.addAll(this.errors); |
| 189 | requestMap.put("errors", errors); |
| 190 | } |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 191 | if (this.warnings != null && !this.warnings.isEmpty()) { |
| Joachim Bingel | 017915d | 2014-12-16 13:03:04 +0000 | [diff] [blame] | 192 | warnings.addAll(this.warnings); |
| 193 | requestMap.put("warnings", warnings); |
| 194 | } |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 195 | if (this.messages != null && !this.messages.isEmpty()) { |
| Joachim Bingel | 20e06ac | 2015-01-15 10:31:33 +0000 | [diff] [blame] | 196 | messages.addAll(this.messages); |
| Joachim Bingel | 017915d | 2014-12-16 13:03:04 +0000 | [diff] [blame] | 197 | requestMap.put("messages", messages); |
| 198 | } |
| Michael Hanl | 2bd00c6 | 2014-11-04 16:26:42 +0000 | [diff] [blame] | 199 | |
| Michael Hanl | 3f0c4c4 | 2015-07-02 20:21:23 +0200 | [diff] [blame] | 200 | return cleanup(requestMap); |
| Michael Hanl | 2bd00c6 | 2014-11-04 16:26:42 +0000 | [diff] [blame] | 201 | } |
| 202 | return new HashMap<>(); |
| Michael Hanl | 0b70bb3 | 2014-05-06 16:09:41 +0000 | [diff] [blame] | 203 | } |
| 204 | |
| Michael Hanl | 3f0c4c4 | 2015-07-02 20:21:23 +0200 | [diff] [blame] | 205 | private Map<String, Object> cleanup(Map<String, Object> requestMap) { |
| 206 | Iterator<Map.Entry<String, Object>> set = requestMap.entrySet() |
| 207 | .iterator(); |
| 208 | while (set.hasNext()) { |
| 209 | Map.Entry<String, Object> entry = set.next(); |
| 210 | if (entry.getValue() instanceof List && ((List) entry.getValue()) |
| 211 | .isEmpty()) |
| 212 | set.remove(); |
| 213 | else if (entry.getValue() instanceof Map && ((Map) entry.getValue()) |
| 214 | .isEmpty()) |
| 215 | set.remove(); |
| 216 | else if (entry.getValue() instanceof String && ((String) entry |
| 217 | .getValue()).isEmpty()) |
| 218 | set.remove(); |
| 219 | } |
| 220 | return requestMap; |
| 221 | } |
| 222 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 223 | private Map<String, Object> mergeCollection(Map<String, Object> collection1, |
| 224 | Map<String, Object> collection2) { |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 225 | if (collection1 == null || collection1.isEmpty()) { |
| 226 | return collection2; |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 227 | }else if (collection2 == null || collection2.isEmpty()) { |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 228 | return collection1; |
| Michael Hanl | 78208a8 | 2016-05-23 16:25:02 +0200 | [diff] [blame] | 229 | }else if (collection1.equals(collection2)) { |
| 230 | return collection1; |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 231 | }else { |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 232 | LinkedHashMap<String, Object> docGroup = KoralObjectGenerator |
| 233 | .makeDocGroup("and"); |
| 234 | ArrayList<Object> operands = (ArrayList<Object>) docGroup |
| 235 | .get("operands"); |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 236 | operands.add(collection1); |
| 237 | operands.add(collection2); |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 238 | return docGroup; |
| Joachim Bingel | 1f8f378 | 2015-01-19 17:58:41 +0000 | [diff] [blame] | 239 | } |
| 240 | } |
| Michael Hanl | 26a826e | 2015-01-29 16:26:09 +0000 | [diff] [blame] | 241 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 242 | @Deprecated |
| 243 | public QuerySerializer addMeta(String cli, String cri, int cls, int crs, |
| Michael Hanl | 0b70bb3 | 2014-05-06 16:09:41 +0000 | [diff] [blame] | 244 | int num, int pageIndex) { |
| Michael Hanl | df206ab | 2014-05-13 10:22:27 +0000 | [diff] [blame] | 245 | MetaQueryBuilder meta = new MetaQueryBuilder(); |
| Michael Hanl | dd5c965 | 2014-09-02 18:51:08 +0000 | [diff] [blame] | 246 | meta.setSpanContext(cls, cli, crs, cri); |
| Michael Hanl | 0b70bb3 | 2014-05-06 16:09:41 +0000 | [diff] [blame] | 247 | meta.addEntry("startIndex", pageIndex); |
| 248 | meta.addEntry("count", num); |
| 249 | this.meta = meta.raw(); |
| 250 | return this; |
| 251 | } |
| 252 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 253 | public QuerySerializer setMeta(Map<String, Object> meta) { |
| 254 | this.meta = meta; |
| 255 | return this; |
| 256 | } |
| Joachim Bingel | a6954de | 2015-03-20 16:37:37 +0100 | [diff] [blame] | 257 | |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 258 | public QuerySerializer setCollection(String collection) { |
| Joachim Bingel | 1faf8a5 | 2015-01-09 13:17:34 +0000 | [diff] [blame] | 259 | CollectionQueryProcessor tree = new CollectionQueryProcessor(); |
| Michael Hanl | f1fead4 | 2014-05-14 15:13:33 +0000 | [diff] [blame] | 260 | tree.process(collection); |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 261 | Map<String, Object> collectionRequest = tree.getRequestMap(); |
| Michael Hanl | f33f706 | 2015-06-24 21:14:26 +0200 | [diff] [blame] | 262 | if (collectionRequest.get("errors") != null) |
| 263 | this.errors.addAll((List) collectionRequest.get("errors")); |
| 264 | if (collectionRequest.get("warnings") != null) |
| 265 | this.warnings.addAll((List) collectionRequest.get("warnings")); |
| 266 | if (collectionRequest.get("messages") != null) |
| 267 | this.messages.addAll((List) collectionRequest.get("messages")); |
| Michael Hanl | f3553c9 | 2015-06-25 18:17:43 +0200 | [diff] [blame] | 268 | this.collection = (Map<String, Object>) collectionRequest |
| 269 | .get("collection"); |
| Michael Hanl | f1fead4 | 2014-05-14 15:13:33 +0000 | [diff] [blame] | 270 | return this; |
| 271 | } |
| Joachim Bingel | 4b405f5 | 2013-11-15 15:29:30 +0000 | [diff] [blame] | 272 | } |