From 256969f698e13901d3611ebcdf2d2b4c8c322206 Mon Sep 17 00:00:00 2001 From: kwakeroni Date: Fri, 24 Feb 2017 19:24:23 +0100 Subject: [PATCH] Reading Mapped groups from ES --- .../backend/es/api/ElasticSearchCriteria.java | 14 ++++ .../backend/es/api/ElasticSearchData.java | 2 +- .../backend/es/api/ElasticSearchQuery.java | 2 +- .../service/DefaultElasticSearchCriteria.java | 69 ++++++++++++++++++ .../es/service/ElasticSearchBackend.java | 9 +-- .../es/service/ElasticSearchClient.java | 48 ++++++------ .../IntermediaryBackendGroupSupport.java | 33 +++++++++ .../IntermediateBackendQuerySupport.java | 30 ++++++++ .../backend/es/ElasticSearchMappedGroup.java | 61 ++++++++++++++++ .../backend/es/EntryElasticSearchQuery.java | 5 +- .../backend/es/ValueElasticSearchQuery.java | 6 +- .../backend/inmemory/InmemoryMappedGroup.java | 32 +++----- scratch/.es/data/nodes/0/_state/global-56.st | Bin 1588 -> 0 bytes scratch/.es/data/nodes/0/_state/node-29.st | Bin 71 -> 0 bytes .../0/_state/state-0.st | Bin 134 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/0/index/segments_1 | Bin 130 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/0/index/write.lock | 0 .../0/translog/translog-1.tlog | Bin 43 -> 0 bytes .../0/translog/translog.ckp | Bin 48 -> 0 bytes .../1/_state/state-0.st | Bin 134 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/1/index/_0.cfe | Bin 363 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/1/index/_0.cfs | Bin 3153 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/1/index/_0.si | Bin 360 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/1/index/segments_2 | Bin 195 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/1/index/write.lock | 0 .../1/translog/translog-2.tlog | Bin 43 -> 0 bytes .../1/translog/translog.ckp | Bin 48 -> 0 bytes .../2/_state/state-0.st | Bin 134 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/2/index/segments_1 | Bin 130 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/2/index/write.lock | 0 .../2/translog/translog-1.tlog | Bin 43 -> 0 bytes .../2/translog/translog.ckp | Bin 48 -> 0 bytes .../3/_state/state-0.st | Bin 134 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/3/index/_0.cfe | Bin 363 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/3/index/_0.cfs | Bin 3193 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/3/index/_0.si | Bin 360 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/3/index/segments_2 | Bin 195 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/3/index/write.lock | 0 .../3/translog/translog-2.tlog | Bin 43 -> 0 bytes .../3/translog/translog.ckp | Bin 48 -> 0 bytes .../4/_state/state-0.st | Bin 134 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/4/index/segments_1 | Bin 130 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/4/index/write.lock | 0 .../4/translog/translog-1.tlog | Bin 43 -> 0 bytes .../4/translog/translog.ckp | Bin 48 -> 0 bytes .../jObO1c2yQ3m_ym4Wvp2_gg/_state/state-5.st | Bin 706 -> 0 bytes scratch/.es/data/nodes/0/node.lock | 0 .../scratch/tv/MappedRangedTVGroup.java | 2 +- .../kwakeroni/scratch/tv/MappedTVGroup.java | 8 +- .../scratch/ElasticSearchTestData.java | 45 ++++++++---- 50 files changed, 290 insertions(+), 76 deletions(-) create mode 100644 parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchCriteria.java create mode 100644 parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/DefaultElasticSearchCriteria.java create mode 100644 parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediaryBackendGroupSupport.java create mode 100644 parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediateBackendQuerySupport.java create mode 100644 parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ElasticSearchMappedGroup.java delete mode 100644 scratch/.es/data/nodes/0/_state/global-56.st delete mode 100644 scratch/.es/data/nodes/0/_state/node-29.st delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/_state/state-0.st delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/index/segments_1 delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/index/write.lock delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/translog/translog-1.tlog delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/translog/translog.ckp delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/_state/state-0.st delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/_0.cfe delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/_0.cfs delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/_0.si delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/segments_2 delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/write.lock delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/translog/translog-2.tlog delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/translog/translog.ckp delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/_state/state-0.st delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/index/segments_1 delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/index/write.lock delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/translog/translog-1.tlog delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/translog/translog.ckp delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/_state/state-0.st delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/_0.cfe delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/_0.cfs delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/_0.si delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/segments_2 delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/write.lock delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/translog/translog-2.tlog delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/translog/translog.ckp delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/_state/state-0.st delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/index/segments_1 delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/index/write.lock delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/translog/translog-1.tlog delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/translog/translog.ckp delete mode 100644 scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/_state/state-5.st delete mode 100644 scratch/.es/data/nodes/0/node.lock diff --git a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchCriteria.java b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchCriteria.java new file mode 100644 index 0000000..c4de925 --- /dev/null +++ b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchCriteria.java @@ -0,0 +1,14 @@ +package be.kwakeroni.parameters.backend.es.api; + +import org.json.JSONObject; + +/** + * (C) 2017 Maarten Van Puymbroeck + */ +public interface ElasticSearchCriteria { + + public void addParameterMatch(String parameter, String value); + + public JSONObject toJSONObject(); + +} diff --git a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchData.java b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchData.java index e459158..59f39d3 100644 --- a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchData.java +++ b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchData.java @@ -9,6 +9,6 @@ */ public interface ElasticSearchData { - Stream query(JSONObject query); + Stream query(ElasticSearchCriteria query, int pageSize); } diff --git a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchQuery.java b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchQuery.java index ab3cc2f..3e66494 100644 --- a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchQuery.java +++ b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/api/ElasticSearchQuery.java @@ -15,5 +15,5 @@ default ElasticSearchQuery raw() { return this; } - Optional apply(ElasticSearchData data, JSONObject query); + Optional apply(ElasticSearchData data, ElasticSearchCriteria criteria); } diff --git a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/DefaultElasticSearchCriteria.java b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/DefaultElasticSearchCriteria.java new file mode 100644 index 0000000..fd0ad69 --- /dev/null +++ b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/DefaultElasticSearchCriteria.java @@ -0,0 +1,69 @@ +package be.kwakeroni.parameters.backend.es.service; + +import be.kwakeroni.parameters.backend.es.api.ElasticSearchCriteria; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * (C) 2017 Maarten Van Puymbroeck + */ +class DefaultElasticSearchCriteria implements ElasticSearchCriteria{ + + private String group; + private List parameterMatches = Collections.emptyList(); + + public DefaultElasticSearchCriteria(String group) { + this.group = group; + } + + @Override + public void addParameterMatch(String parameter, String value) { + if (this.parameterMatches.isEmpty()){ + this.parameterMatches = new ArrayList<>(1); + } + this.parameterMatches.add(new Match(parameter, value)); + } + + @Override + public JSONObject toJSONObject() { + if (parameterMatches == null || parameterMatches.isEmpty()) { + return Match.match("_type", group); + } else { + JSONArray criteria = new JSONArray(); + + criteria.put(Match.match("_type", group)); + + this.parameterMatches.forEach(match -> criteria.put(match.toJSONObject())); + + + return new JSONObject().put("bool", + new JSONObject().put("must", criteria) + ); + } + } + + private static final class Match { + public final String parameter; + public final String value; + + public Match(String parameter, String value) { + this.parameter = parameter; + this.value = value; + } + + public JSONObject toJSONObject() { + return match(this.parameter, this.value); + } + + public static JSONObject match(String parameter, String value) { + return new JSONObject().put("match", + new JSONObject().put(parameter, value)); + } + + } +} diff --git a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchBackend.java b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchBackend.java index 5835688..7d84c2e 100644 --- a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchBackend.java +++ b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchBackend.java @@ -3,6 +3,7 @@ import be.kwakeroni.parameters.backend.api.BackendGroup; import be.kwakeroni.parameters.backend.api.BusinessParametersBackend; import be.kwakeroni.parameters.backend.api.query.BackendQuery; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchCriteria; import be.kwakeroni.parameters.backend.es.api.ElasticSearchData; import be.kwakeroni.parameters.backend.es.api.ElasticSearchQuery; import org.json.JSONObject; @@ -60,13 +61,11 @@ public Collection getGroupNames() { public V select(BackendGroup, ?, ?> group, BackendQuery, V> query) { ElasticSearchData data = new ElasticSearchData() { @Override - public Stream query(JSONObject query) { - return client.query(query); + public Stream query(ElasticSearchCriteria criteria, int pageSize) { + return client.query(criteria.toJSONObject(), pageSize); } }; - return ((ElasticSearchQuery) query.raw()).apply(data, - new JSONObject().put("match", - new JSONObject().put("_type", group.getName()))).orElse(null); + return ((ElasticSearchQuery) query.raw()).apply(data, new DefaultElasticSearchCriteria(group.getName())).orElse(null); } @Override diff --git a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchClient.java b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchClient.java index 8287d55..c3de2c3 100644 --- a/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchClient.java +++ b/parameters-backend/parameters-backend-elasticsearch/src/main/java/be/kwakeroni/parameters/backend/es/service/ElasticSearchClient.java @@ -20,7 +20,7 @@ class ElasticSearchClient { private WebResource index; private WebResource search; - ElasticSearchClient(Configuration configuration){ + ElasticSearchClient(Configuration configuration) { this.client = new Client(); String indexPath = normalizeRelativePath(configuration.getIndexPath()); @@ -30,13 +30,13 @@ class ElasticSearchClient { this.search = this.client.resource(url + "/_search"); } - Stream getAggregation(String name, JSONObject terms){ + Stream getAggregation(String name, JSONObject terms) { JSONObject request = new JSONObject(); request.put("size", 0); request.put("aggs", new JSONObject().put(name, - new JSONObject().put("terms", - terms))); + new JSONObject().put("terms", + terms))); // request.put("from", page * pageSize); ClientResponse response = search.post(ClientResponse.class, request.toString()); @@ -48,15 +48,15 @@ Stream getAggregation(String name, JSONObject terms){ } - Stream query(JSONObject query){ - JSONObject first = query(query, 0, 10); + Stream query(JSONObject query, int pageSize) { + JSONObject first = query(query, 0, pageSize); long totalHits = first.getJSONObject("hits").getLong("total"); // 0->0, 1->1, 10->1, 11->2, 19->, 20->2, 21->3 - if (totalHits == 0){ + if (totalHits == 0) { return Stream.empty(); } else { - long pages = 1 + (totalHits - 1) / 10; + long pages = 1 + (totalHits - 1) / pageSize; if (pages == 1) { return hits(first); } else { @@ -64,7 +64,7 @@ Stream query(JSONObject query){ hits(first), LongStream .range(1, pages) - .mapToObj(i -> query(query, i*10, 10)) + .mapToObj(i -> query(query, i * pageSize, pageSize)) .flatMap(this::hits) ); } @@ -72,14 +72,14 @@ Stream query(JSONObject query){ } - Stream hits(JSONObject searchResults){ + Stream hits(JSONObject searchResults) { JSONArray hits = searchResults.getJSONObject("hits").getJSONArray("hits"); return IntStream.range(0, hits.length()) .mapToObj(hits::getJSONObject) .map(jo -> jo.getJSONObject("_source")); } - JSONObject query(JSONObject query, long page, int pageSize){ + JSONObject query(JSONObject query, long page, int pageSize) { JSONObject request = new JSONObject(); request.put("query", query); request.put("size", pageSize); @@ -91,43 +91,43 @@ JSONObject query(JSONObject query, long page, int pageSize){ return new JSONObject(entity); } - JSONObject _search(String query){ + JSONObject _search(String query) { ClientResponse response = search.post(ClientResponse.class, query); String entity = extractEntity(response, String.class); return new JSONObject(entity); } // Normalize to form /path - private String normalizeRelativePath(String path){ - if (path.endsWith("/")){ - path = path.substring(0, path.length()-1); + private String normalizeRelativePath(String path) { + if (path.endsWith("/")) { + path = path.substring(0, path.length() - 1); } - if (! path.startsWith("/")){ + if (!path.startsWith("/")) { path = "/" + path; } return path; } - private T extractEntity(ClientResponse response, Class type){ - if(isError(response)){ + private T extractEntity(ClientResponse response, Class type) { + if (isError(response)) { throw toException(response); } return response.getEntity(type); } - private boolean isError(ClientResponse response){ + private boolean isError(ClientResponse response) { Response.Status.Family family = response.getStatusInfo().getFamily(); return family == Response.Status.Family.CLIENT_ERROR || family == Response.Status.Family.SERVER_ERROR; } - private RuntimeException toException(ClientResponse response){ + private RuntimeException toException(ClientResponse response) { throw new RuntimeException( String.format("[%s] %s: %s", - response.getStatus(), - response.getStatusInfo().getReasonPhrase(), - response.getEntity(String.class) - )); + response.getStatus(), + response.getStatusInfo().getReasonPhrase(), + response.getEntity(String.class) + )); } } diff --git a/parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediaryBackendGroupSupport.java b/parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediaryBackendGroupSupport.java new file mode 100644 index 0000000..ca17b39 --- /dev/null +++ b/parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediaryBackendGroupSupport.java @@ -0,0 +1,33 @@ +package be.kwakeroni.parameters.basic.backend.query.support; + +import be.kwakeroni.parameters.backend.api.BackendGroup; +import be.kwakeroni.parameters.backend.api.query.BackendQuery; +import be.kwakeroni.parameters.backend.api.query.BackendWireFormatterContext; + +/** + * (C) 2017 Maarten Van Puymbroeck + */ +public abstract class IntermediaryBackendGroupSupport, S, E> implements BackendGroup { + + private final BackendGroup subGroup; + + public IntermediaryBackendGroupSupport(BackendGroup subGroup) { + this.subGroup = subGroup; + } + + @Override + public BackendQuery internalize(Object query, BackendWireFormatterContext context) { + return context.internalize(this, query); + } + + public BackendGroup getSubGroup() { + return this.subGroup; + } + + + @Override + public String getName() { + return this.subGroup.getName(); + } + +} diff --git a/parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediateBackendQuerySupport.java b/parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediateBackendQuerySupport.java new file mode 100644 index 0000000..cf6e466 --- /dev/null +++ b/parameters-basic/parameters-basic-backend/src/main/java/be/kwakeroni/parameters/basic/backend/query/support/IntermediateBackendQuerySupport.java @@ -0,0 +1,30 @@ +package be.kwakeroni.parameters.basic.backend.query.support; + +import be.kwakeroni.parameters.backend.api.query.BackendQuery; +import be.kwakeroni.parameters.backend.api.query.BackendWireFormatterContext; + +/** + * (C) 2017 Maarten Van Puymbroeck + */ +public abstract class IntermediateBackendQuerySupport, V> implements BackendQuery { + + private final Q subQuery; + + public IntermediateBackendQuerySupport(Q subQuery) { + this.subQuery = subQuery; + } + + protected BackendQuery getSubQuery() { + return subQuery; + } + + @Override + public Object externalizeValue(V value, BackendWireFormatterContext wireFormatterContext) { + return subQuery.externalizeValue(value, wireFormatterContext); + } + + @Override + public V internalizeValue(Object value, BackendWireFormatterContext wireFormatterContext) { + return subQuery.internalizeValue(value, wireFormatterContext); + } +} diff --git a/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ElasticSearchMappedGroup.java b/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ElasticSearchMappedGroup.java new file mode 100644 index 0000000..679a98f --- /dev/null +++ b/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ElasticSearchMappedGroup.java @@ -0,0 +1,61 @@ +package be.kwakeroni.parameters.basic.backend.es; + +import be.kwakeroni.parameters.backend.api.BackendGroup; +import be.kwakeroni.parameters.backend.api.query.BackendQuery; +import be.kwakeroni.parameters.backend.api.query.BackendWireFormatterContext; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchCriteria; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchData; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchEntry; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchQuery; +import be.kwakeroni.parameters.basic.backend.query.BasicBackendWireFormatter; +import be.kwakeroni.parameters.basic.backend.query.MappedBackendGroup; +import be.kwakeroni.parameters.basic.backend.query.support.IntermediaryBackendGroupSupport; +import be.kwakeroni.parameters.basic.backend.query.support.IntermediateBackendQuerySupport; +import org.json.JSONObject; + +import java.util.Optional; +import java.util.function.BiPredicate; + +/** + * (C) 2017 Maarten Van Puymbroeck + */ +public class ElasticSearchMappedGroup + extends IntermediaryBackendGroupSupport, Object, ElasticSearchEntry> + implements MappedBackendGroup, Object, ElasticSearchEntry> { + + private final String keyParameterName; + + public ElasticSearchMappedGroup(String keyParameterName, BackendGroup, Object, ElasticSearchEntry> subGroup) { + super(subGroup); + this.keyParameterName = keyParameterName; + } + + @Override + public ElasticSearchQuery getEntryQuery(String keyValue, ElasticSearchQuery subQuery) { + return new ElasticSearchMappedQuery<>(keyValue, subQuery); + } + + @Override + public void validateNewEntry(ElasticSearchEntry entry, Object storage) { + throw new UnsupportedOperationException(); + } + + private final class ElasticSearchMappedQuery + extends IntermediateBackendQuerySupport, T> + implements ElasticSearchQuery{ + + private final String keyValue; + + public ElasticSearchMappedQuery(String keyValue, ElasticSearchQuery subQuery) { + super(subQuery); + this.keyValue = keyValue; + } + + @Override + public Optional apply(ElasticSearchData data, ElasticSearchCriteria criteria) { + criteria.addParameterMatch(keyParameterName, this.keyValue); + return getSubQuery().raw().apply(data, criteria); + } + + } +} diff --git a/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/EntryElasticSearchQuery.java b/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/EntryElasticSearchQuery.java index 698cb89..16995fa 100644 --- a/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/EntryElasticSearchQuery.java +++ b/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/EntryElasticSearchQuery.java @@ -1,6 +1,7 @@ package be.kwakeroni.parameters.basic.backend.es; import be.kwakeroni.parameters.backend.api.query.BackendWireFormatterContext; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchCriteria; import be.kwakeroni.parameters.backend.es.api.ElasticSearchData; import be.kwakeroni.parameters.backend.es.api.ElasticSearchQuery; import be.kwakeroni.parameters.basic.backend.query.BasicBackendWireFormatter; @@ -25,8 +26,8 @@ private EntryElasticSearchQuery() { } @Override - public Optional> apply(ElasticSearchData data, JSONObject query) { - return data.query(query) + public Optional> apply(ElasticSearchData data, ElasticSearchCriteria criteria) { + return data.query(criteria, 2) .reduce(ElasticSearchSimpleGroup.atMostOne()) .map(this::toStringMap); } diff --git a/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ValueElasticSearchQuery.java b/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ValueElasticSearchQuery.java index 184e18c..8dd9c27 100644 --- a/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ValueElasticSearchQuery.java +++ b/parameters-basic/parameters-basic-elasticsearch/src/main/java/be/kwakeroni/parameters/basic/backend/es/ValueElasticSearchQuery.java @@ -1,10 +1,10 @@ package be.kwakeroni.parameters.basic.backend.es; import be.kwakeroni.parameters.backend.api.query.BackendWireFormatterContext; +import be.kwakeroni.parameters.backend.es.api.ElasticSearchCriteria; import be.kwakeroni.parameters.backend.es.api.ElasticSearchData; import be.kwakeroni.parameters.backend.es.api.ElasticSearchQuery; import be.kwakeroni.parameters.basic.backend.query.BasicBackendWireFormatter; -import org.json.JSONObject; import java.util.Optional; @@ -20,8 +20,8 @@ class ValueElasticSearchQuery implements ElasticSearchQuery { } @Override - public Optional apply(ElasticSearchData data, JSONObject query) { - return data.query(query) + public Optional apply(ElasticSearchData data, ElasticSearchCriteria criteria) { + return data.query(criteria, 2) .reduce(ElasticSearchSimpleGroup.atMostOne()) .map(jo -> jo.getString(this.parameterName)); } diff --git a/parameters-basic/parameters-basic-inmemory/src/main/java/be/kwakeroni/parameters/basic/backend/inmemory/InmemoryMappedGroup.java b/parameters-basic/parameters-basic-inmemory/src/main/java/be/kwakeroni/parameters/basic/backend/inmemory/InmemoryMappedGroup.java index 3825e1c..4a1a440 100644 --- a/parameters-basic/parameters-basic-inmemory/src/main/java/be/kwakeroni/parameters/basic/backend/inmemory/InmemoryMappedGroup.java +++ b/parameters-basic/parameters-basic-inmemory/src/main/java/be/kwakeroni/parameters/basic/backend/inmemory/InmemoryMappedGroup.java @@ -1,14 +1,13 @@ package be.kwakeroni.parameters.basic.backend.inmemory; import be.kwakeroni.parameters.backend.api.BackendGroup; -import be.kwakeroni.parameters.backend.api.query.BackendQuery; -import be.kwakeroni.parameters.backend.api.query.BackendWireFormatterContext; import be.kwakeroni.parameters.backend.inmemory.api.EntryData; import be.kwakeroni.parameters.backend.inmemory.api.GroupData; import be.kwakeroni.parameters.backend.inmemory.api.InMemoryQuery; import be.kwakeroni.parameters.backend.inmemory.support.FilteredGroupData; import be.kwakeroni.parameters.backend.inmemory.support.IntermediateInMemoryQuery; import be.kwakeroni.parameters.basic.backend.query.MappedBackendGroup; +import be.kwakeroni.parameters.basic.backend.query.support.IntermediaryBackendGroupSupport; import java.util.function.BiPredicate; import java.util.function.Predicate; @@ -16,22 +15,21 @@ /** * (C) 2017 Maarten Van Puymbroeck */ -public class InmemoryMappedGroup implements MappedBackendGroup, GroupData, EntryData> { +public class InmemoryMappedGroup + extends IntermediaryBackendGroupSupport, GroupData, EntryData> + implements MappedBackendGroup, GroupData, EntryData> { private final String keyParameterName; private final BiPredicate equalizer; - private final BackendGroup, GroupData, EntryData> subGroup; + + public InmemoryMappedGroup(String keyParameterName, BackendGroup, GroupData, EntryData> subGroup) { + this(keyParameterName, String::equals, subGroup); + } public InmemoryMappedGroup(String keyParameterName, BiPredicate equalizer, BackendGroup, GroupData, EntryData> subGroup) { + super(subGroup); this.keyParameterName = keyParameterName; this.equalizer = equalizer; - this.subGroup = subGroup; - } - - - @Override - public BackendQuery, ?> internalize(Object query, BackendWireFormatterContext context) { - return context.internalize(this, query); } @Override @@ -43,22 +41,12 @@ private Predicate entryWithKey(String keyValue) { return (entry) -> equalizer.test(keyValue, entry.getValue(keyParameterName)); } - @Override - public BackendGroup, GroupData, EntryData> getSubGroup() { - return this.subGroup; - } - - @Override - public String getName() { - return this.subGroup.getName(); - } - @Override public void validateNewEntry(EntryData entry, GroupData storage) { String key = entry.getValue(this.keyParameterName); try { - this.subGroup.validateNewEntry(entry, new FilteredGroupData(storage, data -> data.filter(entryWithKey(key)))); + getSubGroup().validateNewEntry(entry, new FilteredGroupData(storage, data -> data.filter(entryWithKey(key)))); } catch (IllegalStateException exc) { throw new IllegalStateException(exc.getMessage() + " with key: " + this.keyParameterName + "=" + key); } diff --git a/scratch/.es/data/nodes/0/_state/global-56.st b/scratch/.es/data/nodes/0/_state/global-56.st deleted file mode 100644 index d18dc010473dfc30cb5b686c2e40f2a58f69fec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmZvdO|PR=7{~8TyuQw6W*qOmorM{riDQD(QYfv7F)j3kQrf~PrF0hLP$;DZN_i{b zW)_plj3%>CV_X;)E?i8EF~+zs#`rD#2F8z|?JTC2PGUky$Vq_T`Td{saNwgq&GR$Q zhrV`la&r3L`N8d1&o&P&&4-8zeYklLYOZH2?YGbFeL67%&(~Zz2nkoa+a?IU)-e&vQuvINWbQgwN3|)2e$X{BD=Pzx|`)6~1e|Pg}Kgc$; zG}?jgZrB;T!_~cr&aY}17Bm3{8eG_|H-XpBSGQlNnz?&c-lf!J!G!5^aQ{+bH z=39@qo5rU3zX@A{1Tk_3fXUm4p%|zy%>6!H-O@Yajh1`&mn@Oj%3_3)9j*pj3>Ei4 zVW}s2O3?7e{VYNAN@)=ZfN!C49!%?nMcB~~jy6+%a)jtF1V&CE@U22v_3U2FYqIOT za5ffKYL)6R4-h|#hmMqNi?sDlG9pMI4k0+QnT zh$@2yD9vYrUZP56E$znzZnTfA?o?{e3nDA>Q)X3JMcqIcFPVd*^pbd_j!-vUU1s!w z9kXb2w5)3FIG?WW8<5y*Hn;$^g`p`j2ek>nqUYj@})mFF9Y$T96Tz?*?6 z)4iksJSRNNQoR8VZUdIB4~w92W1CIv!U1(+?OgL diff --git a/scratch/.es/data/nodes/0/_state/node-29.st b/scratch/.es/data/nodes/0/_state/node-29.st deleted file mode 100644 index d1c9f955003ad93feb2b9b6fe92e0b383933dec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^^72zs<1YcB6NAjcgS>Jx Uv(tYc(3t!Js2B`lYj?~A0PNBg)c^nh diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/_state/state-0.st b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/_state/state-0.st deleted file mode 100644 index 07539cd8b757eeda3fd1f7fb9ede7976eb749161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^%2JDpGxPHfwiOg*<|Y?YHw#Y9HT10Tt4a?xOiV2ohAT=>%}XsxEXmBzV>CRV NG5H0|oLyd@d;rxNCvX4& diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/index/write.lock b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/index/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/translog/translog-1.tlog b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/0/translog/translog-1.tlog deleted file mode 100644 index 8204291b26c91aafaca389ed7658ede93416a9df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 wcmcD&o+HjtQk0lioRgoqQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1lByUb+6Z}^nKIlT(fDe#1jT? z{&=WzlXwHYl(JlqDj?8

g19c>|Dqelk=%1wu3Ap~#nHLiICVg2*#XN0Bec2fKoS zfh7~FKafQ)uMBD!%Py#(HH%(aN(F?&@)ar=0yhcbQm7_YPpEt*Tpr}olFR~#IO`?| w&BzThv;@Lo+Y8mS7Gyot&FooF!6cx{Jec4ah#*Vp0gcHopb8k?&5A4q010Qo z{=e^iKQsKOyuR~bt$?feGv!O8GHukVdQP)7K-S)tli&aM=ckumZ~yW7&AIO9V3<&E z@TjvnqwuX(u3>8o+nOH15@*z^B63hfA_Q-}C6cqdc8kD=dZ7Ib2iPIU0iLmXL^+0I zdk%6CBG}L&%MH{L9b*jV>o_8CP(VV1pXV9P5n&1cHw@?VAEySc{d@b*FFgyv?H6-z zf>Bcr8Yr(RjphWRm-TE1uUp`eH!y>t)xrp3^uKjQRQ^4o*=)} z6s~_~m^yEj4ZDT@F^CM=YR^+^LW}E??U|HSs!W$L$$&iI)RYg{mM)|xmBDPLKQmdt z{aHLY&_9HCW%|>Zbb4rTsHmhTi!N6ivmZgg<%a>+CXS7ajORwaa`6erNe8(faPG~) zND@L%IfNhzg+Z3lU7lF(_#bkIaLtRvqlVp$6OnRNBDfX0utM?}L<=;ii23aA5Z#Is z1aqD3JYk@4*G0!q0itUO0&*_SpZhFuCYY8}e_W_7Qv@X4DAzLC2`~Ubf#V0SY@q_% zyo}9^8#K)$dQgb<#-SSvl(m;7`%&94u|8VDW!)OpEc-xJ$7hH+aIrmrJUhweJ+#_? zfkAVg?8@JvGP_u_^IKz-Nvy!Ls^aArjewuA^g^qN?mLGpIP<3@Tl129+0@LF2cYLYvYit~s=WV}<%<_&fXyK4fk7 zMKBc4{`q$uwSH67J9?pC`i!%)5CMep3liLUHr_{8lJ=S8p1vfFd2(kbP)H~00RQjs z-XvsvFf&FGD7`P%l96}rX!3^g;7##nw=^-o5aGunUVRq-;^#JCC;i9 zi={JAiIl?#fHOEqr}fQ7Q8E{q7)9nwZcHOm8!RX&(xR~VY$Tm8-x+E=;6A+Nq0u6I z)XzsJeQY&i5d3@)Kk5)TUjx!=#Gpkj(m|$HwFoQ<|KbmuhAdoSL4SnpfhPmzK}Kz`$tD6I=Isy-MFVjm|Zj=1M#PiZQSO zF$+i%gc-S*@{75{GxJjN%Zn8(^bEPP63Y_x%2I&>MMC~XiOD&s3eNdO1^GpZC7Jno zJW%PPVjzdZP|rfoAl}H7A0nCy)CZQ}G&0pQGSy8oFyhMrI}9elYNltRXULvkte04n zoWYuyn_^}n0@hqqnpcvUn+j9N12bAT$m|d5L}X9l$zp}nVOSQ o?3Q1Yn^>Zko1c=(<>VS15+5Ak>gvL9Kx6U?U=V>p_Rr9n0QO&Q%K!iX diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/segments_2 b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/segments_2 deleted file mode 100644 index 94957d0294fcd5b30824feff0f3c5ae74df35dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmcD&o+HjtoSL4SnpaZHz`(#}%@bSqdc8{DH;v9Uo90S9V>Du8VFXHm06P$a*o;6S zrg#HJG__ASd`gp3^HR->{zCys6O0X`L1GL{yd_16dBr*T>G7qdnJHpn!6yFhA(=@* s$wo!4K7k&&VZ}b#>B4YD=|E$P5=%1k^B9c|XiR diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/write.lock b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/index/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/translog/translog-2.tlog b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/1/translog/translog-2.tlog deleted file mode 100644 index 2e1da38a1fce12e40ab4fc4f7511d269df1c2964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 wcmcD&o+HjtQk0lioRgoG;{p@`+&ye7eKqfKtxy64ghYzFDn25 diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/index/segments_1 b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/index/segments_1 deleted file mode 100644 index a2df77fa0033b7e501353fdebd852898087261f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmcD&o+HjtoSL4SnpaZHz`(#}%@bSqdc8{DH;v9Uo90S9U^HZ7VFXHm05gPQU|`}c zDN4*M&dE=YFD=bX5%Uf+DoxY%j|{3Z3eB$aGk0>yF)j=ghAT=>%}XsxEXmBzV>CRV NG5H0|oQ2-CN&vt{CQ1MR diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/index/write.lock b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/index/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/translog/translog-1.tlog b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/translog/translog-1.tlog deleted file mode 100644 index 86ddddcf6e97629857f39a2f90b0a3f3fee6b6b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 wcmcD&o+HjtQk0lioRgo diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/translog/translog.ckp b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/2/translog/translog.ckp deleted file mode 100644 index 493b5fb3af21b6b3081e260afca509ff14ad0d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 lcmcD&o+HkjoL#`cz`zK^AfOGQz$D`Vjma-y{3(*2vH+?W27Ukl diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/_state/state-0.st b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/_state/state-0.st deleted file mode 100644 index 6941dfca0b14de31982701fa49d30c5baa8d28a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^%2JDpGxPHfwiOg*<|YqQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1lByUb+6Z}^nKIlT(fDe#8U=t z{&=WzlXwHYl(JlqDj?8

g19c>|Dqelk=%1wu3Ap~#nHLiICVg2*#%MUgMa2fKoS zfu$X)KafQ)uMBD!%MGZYHH%(aN(F?&Dhw42ftv(zDO3|{I#eFrB?VCZS0OYbH^|Tu r2#4(fgl57k`idgw_kZAJ7@$gL>$Qawlyh4#Ifyva;9v%=B^A0%() z|NVaN|1mSqOI!O7SBtoU$K^w2dBv<&w4CawfUE;uUtIk2!Jg}H_g=a8@b0!hzzmVz z-jvSf%;J(-s$zQ{JE|6;l3>z`EOJmpA_V_7mq?zyH7x?4+9VxhJis1u9N?L1Qz*xH zY|lXsLIhhry1QGfRX&b0p6_Ex;GlqnmOjrjnI&PB{z=C3^$Rq>O+W6v^|Bcucsg* z>)NuK&WFMm6Y0sxeN)Thqxx8ORP|JQ*hvrsTww-qJ>vZA?2+8;XC6Q49@k|a z1f2KgawG|%28R$tAwc4B^oS>CaFGZdjA%U*$=TXY(Dq8~-Is{edQP++oft%S62u>3 zIQTn64a#6}u$?CgNvhx;+x-(DdO}Gpig#(S9!%O3!{1cbC=rs3RBMgg1sH&!!C#Em zQ`BHjGoQzfn6wBYI#ftix%T^GsyfI@VZkvitmO?{((JryJ98BcpCjSG_ILnE1(NIg zX)pK+2E%!N?B@oxxrMbtzi~!|#L7Rb$jzLi2!vCaQfR@^J?L$0;D?jcTVJ>Zu(;pV z1GxOcBC#j{$Z-usPehFcsQjZ&RPk9Ss&u~-HF2jSwWGIWN7>{P*TUp{v33J~4ZnxK zu}=IV2*p43{0NPHN7Q9D@n3zH^*TfVq2e0}j+{>nk(HvYD7AkmMKMo}^aGhRt3L1- zyP#C!!shjq84RV$%b#w$nafhe%iOi*E8uAY(Dh}^+sTu}o@%S+QF=lCoMO`JVKO1R zsXbTGJ69P0Qn6kDz_Ha+sB>QpDAyPL%BU?&svtDvJ?Hp-k` z)pg?>lq2mh0pJc8(ue)9QIyTL5TnF=%dM$J3WR}zA|nc$&qm7m_TAyf1MdHiJT!QO z_xk$i7eQoQ<|KbmuhAdoSL4SnpfhPmzK}Kz`$tD6I=Isy-MFVjm|Zj=1M#TiZQSO zF$+i%gc-S*@{75{GxJjN%Zn8(^bEPP63Y_x%2I&>MMC~XiOD&s3eNdO1^GpZC7Jno zJW%PPVjzdZP|rfoAl}H7A0nCy)CZQ}G&0pQGSy8oFyhMrI}9elYNltRXULvkte04n zoWYuyn_^}n0@hqqnpcvUn+j9N12bAT$m|d5L}X9l$zp}nVOSQ o?3Q1Yn^>Zko1c=(<>VS15+5Ak>gvL9Kx6U?U=V@9?&uja0ruT)zW@LL diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/segments_2 b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/index/segments_2 deleted file mode 100644 index 6dff3adc8a69a6a0426eccef91b61056806eac9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmcD&o+HjtoSL4SnpaZHz`(#}%@bSqdc8{DH;v9Uo90S9XEb7CVFXHm06P$a*o;6S zrg#HJG__ATd`gp3^HR->{zCys6O0X`L1GL{yd_16dBr*T>G7qdnJHpfx$&k&;dupt s$%)xc#zuy^=3$;D>B4YD=|E$P5=%1k^B9c|XiRw@uo%Lc?E&ViP=uZMuxiPVV)-G02A^IEC2ui diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/translog/translog.ckp b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/3/translog/translog.ckp deleted file mode 100644 index bca3e9b87b5c827a396bf89940b45f6cb9eff922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 mcmcD&o+HkjoL#`cz`zK^AfOGQz$DWFjma-y{Iyd`ZvX(T5eNDJ diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/_state/state-0.st b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/_state/state-0.st deleted file mode 100644 index f7911e7001c1e467d420cd5f18b4dbe40cbe52ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^%2JDpGxPHfwiOg*<|Y%}XsxEXmBzV>CRV NG5H0|oE*EWYyib~CQ$$Y diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/index/write.lock b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/index/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/translog/translog-1.tlog b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/translog/translog-1.tlog deleted file mode 100644 index aca852ff956a1a93591cad87e16bf1ae55d0a78c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 wcmcD&o+HjtQk0lioRgoc}^jwMozxT#b&t%@&4ZF01+DuRR910 diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/translog/translog.ckp b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/4/translog/translog.ckp deleted file mode 100644 index 493b5fb3af21b6b3081e260afca509ff14ad0d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 lcmcD&o+HkjoL#`cz`zK^AfOGQz$D`Vjma-y{3(*2vH+?W27Ukl diff --git a/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/_state/state-5.st b/scratch/.es/data/nodes/0/indices/jObO1c2yQ3m_ym4Wvp2_gg/_state/state-5.st deleted file mode 100644 index 1164e1cd62b4ba77092be04f2dd9f84c0aace448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%x33lfVGb5l!Fi;91>l>y1j{Je7$i}FiLGV{{o z^Gb8$i!&07Qi@Ntfb}}(7o_I37pInhq>Fz|%FIhitW^!V&gW*(kDTqxDrchH0it@`cQ&Lmn^MDTY zM7XmPqOY_xGbJ?3Kgr)P*{CwmI5)mB*Cf2Gz$iXFeF{Vc)H@L8rKY%<8W!gn^+s7awZO0JLRK|dy zl`2~oxp=y3>KdD>v+B&98x=V(eoE647PUo-r_7u;J${PR{25c?*{)=#WQ9dXuU;H7 zXL7uguW(}<6ELv<|7T|S%eW3?*&1I@t`-A;PTzNt5Vfu(@%l+}k43ch^Xr2foxQLRhf(F48p zoqx*qo^k&kY`#>a`N`8=mDwL9?gFD1WZ}=Y#GK5;;?&|_zk3RbGIJA)D&v6>om>3l z5D5GPhI4#zWnOZ8VopweGB^f{e>Ir=2(5CAatX>P4h||vHHb1!cT36gC{A|#* Query>, T> valueQuery(Dag day private static final String NAME = "tv.mapped-ranged"; - private static final InmemoryMappedGroup INMEMORY_GROUP = new InmemoryMappedGroup(DAY.getName(), String::equals, + private static final InmemoryMappedGroup INMEMORY_GROUP = new InmemoryMappedGroup(DAY.getName(), new InmemoryRangedGroup(SLOT.getName(), Ranges.stringRangeTypeOf(Slot.type), new InmemorySimpleGroup(NAME, DAY.getName(), SLOT.getName(), PROGRAM.getName()))); diff --git a/scratch/src/main/java/be/kwakeroni/scratch/tv/MappedTVGroup.java b/scratch/src/main/java/be/kwakeroni/scratch/tv/MappedTVGroup.java index 0181f44..b9a8c88 100644 --- a/scratch/src/main/java/be/kwakeroni/scratch/tv/MappedTVGroup.java +++ b/scratch/src/main/java/be/kwakeroni/scratch/tv/MappedTVGroup.java @@ -3,6 +3,8 @@ import be.kwakeroni.parameters.backend.inmemory.api.EntryData; import be.kwakeroni.parameters.backend.inmemory.api.GroupData; import be.kwakeroni.parameters.backend.inmemory.support.DefaultEntryData; +import be.kwakeroni.parameters.basic.backend.es.ElasticSearchMappedGroup; +import be.kwakeroni.parameters.basic.backend.es.ElasticSearchSimpleGroup; import be.kwakeroni.parameters.basic.backend.inmemory.InmemoryMappedGroup; import be.kwakeroni.parameters.basic.backend.inmemory.InmemorySimpleGroup; import be.kwakeroni.parameters.basic.client.model.Mapped; @@ -39,7 +41,7 @@ public static Entry entry(Dag dag, String program) { } // For test purposes - private static EntryData entryData(Dag day, String program) { + public static EntryData entryData(Dag day, String program) { return DefaultEntryData.of( DAY.getName(), day.toString(), PROGRAM.getName(), program @@ -71,5 +73,7 @@ public static Query, Entry> entryQuery(Dag dag){ private static final String NAME = "tv.mapped"; private static final InmemoryMappedGroup INMEMORY_GROUP = new InmemoryMappedGroup(DAY.getName(), String::equals, new InmemorySimpleGroup(NAME, DAY.getName(), PROGRAM.getName())); - + public static final ElasticSearchMappedGroup ELASTICSEARCH_GROUP = + new ElasticSearchMappedGroup(DAY.getName(), + new ElasticSearchSimpleGroup(NAME, DAY.getName(), PROGRAM.getName())); } diff --git a/scratch/src/test/java/be/kwakeroni/scratch/ElasticSearchTestData.java b/scratch/src/test/java/be/kwakeroni/scratch/ElasticSearchTestData.java index 726d360..74717f9 100644 --- a/scratch/src/test/java/be/kwakeroni/scratch/ElasticSearchTestData.java +++ b/scratch/src/test/java/be/kwakeroni/scratch/ElasticSearchTestData.java @@ -6,6 +6,7 @@ import be.kwakeroni.parameters.backend.es.service.ElasticSearchBackend; import be.kwakeroni.parameters.backend.inmemory.api.EntryData; import be.kwakeroni.scratch.tv.Dag; +import be.kwakeroni.scratch.tv.MappedTVGroup; import be.kwakeroni.scratch.tv.SimpleTVGroup; import be.kwakeroni.scratch.tv.Slot; import com.sun.jersey.api.client.Client; @@ -51,14 +52,28 @@ public void reset() { LOG.info("Inserting test data..."); register(SimpleTVGroup.ELASTICSEARCH_GROUP); - insert(SimpleTVGroup.instance().getName(), SimpleTVGroup.getEntryData(Dag.MAANDAG, Slot.atHour(20))); - String uuid = insert(SimpleTVGroup.instance().getName()+".test", SimpleTVGroup.getEntryData(Dag.MAANDAG, Slot.atHour(20))); + + register(MappedTVGroup.ELASTICSEARCH_GROUP); + insert(MappedTVGroup.instance().getName(), MappedTVGroup.entryData(Dag.ZATERDAG, "Samson")); + String uuid = insert(MappedTVGroup.instance().getName(), MappedTVGroup.entryData(Dag.ZONDAG, "Morgen Maandag")); + +// setGroupData(RangedTVGroup.instance().getName(), +// RangedTVGroup.getData(Slot.atHour(8), Slot.atHour(12), "Samson", +// Slot.atHalfPast(20), Slot.atHour(22), "Morgen Maandag")); +// +// setGroupData(MappedRangedTVGroup.instance().getName(), +// MappedRangedTVGroup.getData( +// MappedRangedTVGroup.entryData(Dag.MAANDAG, Slot.atHalfPast(20), Slot.atHour(22), "Gisteren Zondag"), +// MappedRangedTVGroup.entryData(Dag.ZATERDAG, Slot.atHour(8), Slot.atHour(12), "Samson"), +// MappedRangedTVGroup.entryData(Dag.ZATERDAG, Slot.atHour(14), Slot.atHour(18), "Koers"), +// MappedRangedTVGroup.entryData(Dag.ZONDAG, Slot.atHalfPast(20), Slot.atHour(22), "Morgen Maandag") +// )); LOG.info("Waiting for test data to become available..."); try { - this.elasticSearch.waitUntil(() -> get(SimpleTVGroup.instance().getName()+".test", uuid) != null, 5000); + this.elasticSearch.waitUntil(() -> get(MappedTVGroup.instance().getName(), uuid) != null, 5000); } catch (InterruptedException e) { e.printStackTrace(); } @@ -69,18 +84,18 @@ public boolean hasDataForGroup(String name) { return groups.contains(name); } - private void register(BackendGroup, ?, ?> group){ + private void register(BackendGroup, ?, ?> group) { backend.registerGroup(group); this.groups.add(group.getName()); } - private String get(String group, String uuid){ + private String get(String group, String uuid) { String url = String.format("/parameters/%s/%s", group, uuid); ClientResponse response = callES(url, WebResource::get); int status = response.getStatus(); - if (status == 204 || status == 404){ + if (status == 204 || status == 404) { return null; - } else if (status < 400){ + } else if (status < 400) { return response.getEntity(String.class); } else { throw new RuntimeException(status + " - " + response.getEntity(String.class)); @@ -88,21 +103,21 @@ private String get(String group, String uuid){ } - private String insert(String group, EntryData entryData){ + private String insert(String group, EntryData entryData) { String uuid = UUID.randomUUID().toString(); String url = String.format("/parameters/%s/%s", group, uuid); callES(url, toJson(entryData), WebResource::put); return uuid; } - private void callES(String path, String body, CallWithBody call){ + private void callES(String path, String body, CallWithBody call) { String url = resolve("http://127.0.0.1:9200", path); LOG.info("{} : {}\r\n{}", url, call, body); ClientResponse response = call.call(client.resource(url), body); LOG.info("[{}] {}\r\n{}", response.getStatus(), url, response.getEntity(String.class)); } - private ClientResponse callES(String path, CallWithoutBody call){ + private ClientResponse callES(String path, CallWithoutBody call) { String url = resolve("http://127.0.0.1:9200", path); LOG.info("{} : {}", url, call); ClientResponse response = call.call(client.resource(url)); @@ -112,18 +127,18 @@ private ClientResponse callES(String path, CallWithoutBody call){ return response; } - private String resolve(String base, String path){ - return base + ((path.startsWith("/"))? "" : "/") + path + "?pretty"; + private String resolve(String base, String path) { + return base + ((path.startsWith("/")) ? "" : "/") + path + "?pretty"; } - private String toJson(EntryData entry){ + private String toJson(EntryData entry) { return new JSONObject(entry.asMap()).toString(4); } private static interface CallWithoutBody { T call(WebResource resource, Class type); - default ClientResponse call(WebResource resource){ + default ClientResponse call(WebResource resource) { return call(resource, ClientResponse.class); } } @@ -131,7 +146,7 @@ default ClientResponse call(WebResource resource){ private static interface CallWithBody { T call(WebResource resource, Class type, String body); - default ClientResponse call(WebResource resource, String body){ + default ClientResponse call(WebResource resource, String body) { return call(resource, ClientResponse.class, body); } }