// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.flags; /** * @author hakonhall */ public abstract class UnboundFlagImpl, U extends UnboundFlag> implements UnboundFlag { private final FlagId id; private final T defaultValue; private final FlagSerializer serializer; private final FetchVector defaultFetchVector; private final UnboundFlagFactory unboundFlagFactory; private final FlagFactory flagFactory; public interface UnboundFlagFactory, U1 extends UnboundFlag> { U1 create(FlagId id, T1 defaultValue, FetchVector fetchVector); } public interface FlagFactory> { F2 create(FlagId id, T2 defaultValue, FetchVector fetchVector, FlagSerializer serializer, FlagSource source); } protected UnboundFlagImpl(FlagId id, T defaultValue, FetchVector defaultFetchVector, FlagSerializer serializer, UnboundFlagFactory unboundFlagFactory, FlagFactory flagFactory) { this.id = id; this.defaultValue = defaultValue; this.serializer = serializer; this.defaultFetchVector = defaultFetchVector; this.unboundFlagFactory = unboundFlagFactory; this.flagFactory = flagFactory; } @Override public FlagId id() { return id; } @Override public U with(FetchVector.Dimension dimension, String dimensionValue) { return unboundFlagFactory.create(id, defaultValue, defaultFetchVector.with(dimension, dimensionValue)); } @Override public F bindTo(FlagSource source) { return flagFactory.create(id, defaultValue, defaultFetchVector, serializer, source); } @Override public FlagSerializer serializer() { return serializer; } @Override public T defaultValue() { return defaultValue; } }