private void configureWithResolvedConfigKey(FlagUtils.FlagConfigKeyAndValueRecord r, EntitySpec spec, Set<String> keyNamesUsed){ try { Optional<Object> resolvedValue = resolveValue(r.getConfigKeyMaybeValue().get(), Optional.<TypeToken>of(r.getConfigKey().getTypeToken())); if (resolvedValue.isPresent()) { spec.configure(r.getConfigKey(), resolvedValue.get()); } // todo: Should this be in the if block? keyNamesUsed.add(r.getConfigKey().getName()); } catch (Exception e) { String message = String.format("Cannot set config key %s, could not coerce %s to %s", r.getConfigKey(), r.getConfigKeyMaybeValue(), r.getConfigKey().getTypeToken()); LOG.warn(message, e); } }
protected boolean isRecordEqual(FlagConfigKeyAndValueRecord val1, ExpectedFlagConfigKeyAndValueRecord val2) { return Objects.equal(val1.getConfigKey(), val2.configKey) && Objects.equal(val1.getFlagName(), val2.flagName) && Objects.equal(val1.getConfigKeyMaybeValue(), val2.configKeyValue) && Objects.equal(val1.getFlagMaybeValue(), val2.flagValue); }
/** sets _all_ accessible _{@link ConfigKey}_ and {@link HasConfigKey} fields on the given object, * using the indicated flags/config-bag */ public static void setAllConfigKeys(Configurable o, ConfigBag bag, boolean includeFlags) { for (Field f: getAllFields(o.getClass())) { ConfigKey<?> key = getFieldAsConfigKey(o, f); if (key!=null) { FlagConfigKeyAndValueRecord record = getFlagConfigKeyRecord(f, key, bag); if ((includeFlags && record.isValuePresent()) || record.getConfigKeyMaybeValue().isPresent()) { setField(o, f, record.getValueOrNullPreferringConfigKey(), null); } } } }
public Object getValueOrNullPreferringConfigKey() { return getConfigKeyMaybeValue().or(getFlagMaybeValue()).orNull(); } public Object getValueOrNullPreferringFlag() {
public Object getValueOrNullPreferringFlag() { return getFlagMaybeValue().or(getConfigKeyMaybeValue()).orNull(); } /** true if value is present for either flag or config key */
private void configureWithAllRecords(Collection<FlagUtils.FlagConfigKeyAndValueRecord> records, EntitySpec spec, Set<String> keyNamesUsed){ for (FlagUtils.FlagConfigKeyAndValueRecord r : records) { if (r.getFlagMaybeValue().isPresent()) { configureWithResolvedFlag(r, spec, keyNamesUsed); } if (r.getConfigKeyMaybeValue().isPresent()) { configureWithResolvedConfigKey(r, spec, keyNamesUsed); } } }