@Override public String apply(OptionValue input) { return input.getName(); } };
@Override public boolean apply(final OptionValue value) { final String name = value.getName(); return !shortLivedOptions.containsKey(name) || withinRange(name); } };
private static Map<String, OptionValue> getMapFromOptionList(final OptionList options) { final Map<String, OptionValue> tmp = Maps.newHashMap(); for (final OptionValue value : options) { tmp.put(value.getName(), value); } return CaseInsensitiveMap.newImmutableMap(tmp); }
/** * only merge options from list that are not already set locally */ public void mergeIfNotPresent(OptionList list) { Set<String> options = Sets.newHashSet(Iterables.transform(this, EXTRACT_OPTION_NAME)); for (OptionValue optionValue : list) { if (!options.contains(optionValue.getName())) { this.add(optionValue); } } }
@Override boolean setLocalOption(final OptionValue value) { if (supportsOptionType(value.getType())) { options.put(value.getName(), value); return true; } else { return false; } }
@SuppressWarnings("rawtypes") private Setting toSetting(OptionValue option){ // display the value if it is the whitelist or has been set. final boolean showOutsideWhitelist = options.isSet(option.getName()); switch(option.getKind()){ case BOOLEAN: return new Setting.BooleanSetting(option.getName(), option.getBoolVal(), showOutsideWhitelist); case DOUBLE: return new Setting.FloatSetting(option.getName(), option.getFloatVal(), showOutsideWhitelist); case LONG: return new Setting.IntegerSetting(option.getName(), option.getNumVal(), showOutsideWhitelist); case STRING: return new Setting.TextSetting(option.getName(), option.getStringVal(), showOutsideWhitelist); default: throw new IllegalStateException("Unable to handle kind " + option.getKind()); } } }
@Override boolean setLocalOption(final OptionValue value) { final boolean set = super.setLocalOption(value); if (!set) { return false; } final String name = value.getName(); final OptionValidator validator = getValidator(name); // if set, validator must exist. final boolean shortLived = validator.isShortLived(); if (shortLived) { final int start = session.getQueryCount() + 1; // start from the next query final int ttl = validator.getTtl(); final int end = start + ttl; shortLivedOptions.put(name, new ImmutablePair<>(start, end)); } return true; }
@Override public void setOption(final OptionValue value) { checkArgument(value.getType() == OptionType.SYSTEM, "OptionType must be SYSTEM."); final String name = value.getName().toLowerCase(); final OptionValidator validator = getValidator(name); validator.validate(value); // validate the option if (options.get(name) == null && value.equals(validator.getDefault())) { return; // if the option is not overridden, ignore setting option to default } options.put(name, value); }
@Override public void setOption(OptionValue value) { final OptionValidator validator = fallback.getValidator(value.getName()); validator.validate(value); // validate the option // fallback if unable to set locally if (!setLocalOption(value)) { fallback.setOption(value); } }
@Override public OptionValueWrapper next() { final OptionValue value = mergedOptions.next(); final Status status; if (value.getType() == OptionType.BOOT) { status = Status.BOOT; } else { final OptionValue def = fragmentOptions.getValidator(value.getName()).getDefault(); if (value.equalsIgnoreType(def)) { status = Status.DEFAULT; } else { status = Status.CHANGED; } } return new OptionValueWrapper(value.getName(), value.getKind(), value.getType(), value.getNumVal(), value.getStringVal(), value.getBoolVal(), value.getFloatVal(), status); }