From f2500b8a48b32eb0b99ffaa4c640dd077cae1dfd Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Tue, 16 Apr 2019 12:40:29 +0200 Subject: Fill Query --- .../main/java/com/yahoo/vespa/tenant/cd/Query.java | 44 ++++++++++++++++++++++ .../com/yahoo/vespa/tenant/cd/metrics/Metric.java | 2 +- .../com/yahoo/vespa/tenant/cd/metrics/Space.java | 1 - 3 files changed, 45 insertions(+), 2 deletions(-) (limited to 'tenant-cd') diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java index e7b6baa1406..80dbfe4385a 100644 --- a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java +++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java @@ -1,5 +1,12 @@ package com.yahoo.vespa.tenant.cd; +import java.util.Map; +import java.util.stream.Stream; + +import static java.util.Map.copyOf; +import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.toUnmodifiableMap; + /** * An immutable query to send to a Vespa {@link Endpoint}, to receive a {@link Search}. * @@ -7,4 +14,41 @@ package com.yahoo.vespa.tenant.cd; */ public class Query { + private final String rawQuery; + private final Map parameters; + + private Query(String rawQuery, Map parameters) { + this.rawQuery = rawQuery; + this.parameters = parameters; + } + + /** Creates a query with the given raw query part. */ + public static Query ofRaw(String rawQuery) { + if (rawQuery.isBlank()) + throw new IllegalArgumentException("Query can not be blank."); + + return new Query(rawQuery, + Stream.of(rawQuery.split("&")) + .map(pair -> pair.split("=")) + .collect(toUnmodifiableMap(pair -> pair[0], pair -> pair[1]))); + } + + /** Creates a query with the given name-value pairs. */ + public static Query ofParameters(Map parameters) { + if (parameters.isEmpty()) + throw new IllegalArgumentException("Parameters can not be empty."); + + return new Query(parameters.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(joining("&")), + copyOf(parameters)); + } + + /** Returns a copy of this with the given name-value pair added, potentially overriding any current value. */ + public Query withParameter(String name, String value) { + return ofParameters(Stream.concat(parameters.entrySet().stream().filter(entry -> ! entry.getKey().equals(name)), + Stream.of(Map.entry(name, value))) + .collect(toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue))); + } + } diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Metric.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Metric.java index b7517668e8f..37adf8239fc 100644 --- a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Metric.java +++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Metric.java @@ -10,7 +10,7 @@ import static java.util.Map.copyOf; import static java.util.stream.Collectors.toUnmodifiableMap; /** - * A set of statistics for a metric, for points over a String-indexed space. + * A set of statistics for a metric, for points over a space with named dimensions of arbitrary type. * * @author jonmv */ diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java index 31f1557a2ee..38066373b28 100644 --- a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java +++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java @@ -1,6 +1,5 @@ package com.yahoo.vespa.tenant.cd.metrics; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -- cgit v1.2.3