diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2019-01-17 10:53:02 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-01-24 10:01:27 +0100 |
commit | 9f22f42eca5d2fec98077170b4ee4f2bacf2cb99 (patch) | |
tree | 1f81c1482c7bc7998b37d9c0c08e2343e2498d6a /flags | |
parent | b62ea5328f268c8bbf12d5c5c241b1948ead8b97 (diff) |
Add ListFlag
Diffstat (limited to 'flags')
5 files changed, 76 insertions, 0 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index 0f521649a6c..bfccbd1e46c 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -118,6 +118,12 @@ public class Flags { flagId, defaultValue, description, modificationEffect, dimensions); } + /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ + public static <T> UnboundListFlag<T> defineListFlag(String flagId, List<T> defaultValue, String description, + String modificationEffect, FetchVector.Dimension... dimensions) { + return define(UnboundListFlag::new, flagId, defaultValue, description, modificationEffect, dimensions); + } + @FunctionalInterface private interface TypedUnboundFlagFactory<T, U extends UnboundFlag<?, ?, ?>> { U create(FlagId id, T defaultVale, FetchVector defaultFetchVector); diff --git a/flags/src/main/java/com/yahoo/vespa/flags/JacksonArraySerializer.java b/flags/src/main/java/com/yahoo/vespa/flags/JacksonArraySerializer.java new file mode 100644 index 00000000000..619c0c51c17 --- /dev/null +++ b/flags/src/main/java/com/yahoo/vespa/flags/JacksonArraySerializer.java @@ -0,0 +1,21 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.flags; + +import java.util.List; + +/** + * @author freva + */ +public class JacksonArraySerializer<T> implements FlagSerializer<List<T>> { + + @SuppressWarnings("unchecked") + @Override + public List<T> deserialize(RawFlag rawFlag) { + return (List<T>) JsonNodeRawFlag.fromJsonNode(rawFlag.asJsonNode()).toJacksonClass(List.class); + } + + @Override + public RawFlag serialize(List<T> value) { + return null; + } +} diff --git a/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java new file mode 100644 index 00000000000..6fefc5e22e3 --- /dev/null +++ b/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java @@ -0,0 +1,19 @@ +// Copyright 2019 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.flags; + +import javax.annotation.concurrent.Immutable; +import java.util.List; + +/** + * @author freva + */ +@Immutable +public class ListFlag<T> extends FlagImpl<List<T>, ListFlag<T>> { + public ListFlag(FlagId id, List<T> defaultValue, FetchVector vector, FlagSerializer<List<T>> serializer, FlagSource source) { + super(id, defaultValue, vector, serializer, source, ListFlag::new); + } + + public List<T> value() { + return boxedValue(); + } +} diff --git a/flags/src/main/java/com/yahoo/vespa/flags/UnboundListFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/UnboundListFlag.java new file mode 100644 index 00000000000..f5150604231 --- /dev/null +++ b/flags/src/main/java/com/yahoo/vespa/flags/UnboundListFlag.java @@ -0,0 +1,22 @@ +// Copyright 2019 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.flags; + +import javax.annotation.concurrent.Immutable; +import java.util.List; + +/** + * @author freva + */ +@Immutable +public class UnboundListFlag<T> extends UnboundFlagImpl<List<T>, ListFlag<T>, UnboundListFlag<T>> { + public UnboundListFlag(FlagId id, List<T> defaultValue) { + this(id, defaultValue, new FetchVector()); + } + + public UnboundListFlag(FlagId id, List<T> defaultValue, FetchVector defaultFetchVector) { + super(id, defaultValue, defaultFetchVector, + new JacksonArraySerializer<T>(), + UnboundListFlag::new, + ListFlag::new); + } +} diff --git a/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java b/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java index 570058ae1d2..aa41cbbd94d 100644 --- a/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java +++ b/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java @@ -7,6 +7,8 @@ import com.fasterxml.jackson.databind.node.BooleanNode; import org.junit.Test; import org.mockito.ArgumentCaptor; +import java.util.Arrays; +import java.util.Collections; import java.util.Objects; import java.util.Optional; @@ -87,6 +89,12 @@ public class FlagsTest { } @Test + public void testList() { + testGeneric(Flags.defineListFlag("list-id", Collections.singletonList("a"), "desc", "mod"), + Collections.singletonList("a"), Arrays.asList("a", "b", "c")); + } + + @Test public void testJacksonClass() { ExampleJacksonClass defaultInstance = new ExampleJacksonClass(); ExampleJacksonClass instance = new ExampleJacksonClass(); |