private static boolean setFieldFromFlagInternal(String flagName, Object fieldVal, Object o, Collection<Field> fields) { for (Field f: fields) { SetFromFlag cf = f.getAnnotation(SetFromFlag.class); if (cf != null && flagName.equals(elvis(cf.value(), f.getName()))) { setField(o, f, fieldVal, cf); return true; } } return false; }
private static void setFieldFromConfig(Object o, Field f, ConfigBag bag, SetFromFlag optionalAnnotation, boolean setDefaultVals) { String flagName = optionalAnnotation==null ? null : elvis(optionalAnnotation.value(), f.getName()); // prefer flag name, if present if (groovyTruth(flagName) && bag.containsKey(flagName)) { setField(o, f, bag.getStringKey(flagName), optionalAnnotation); return; } // first check whether it is a key ConfigKey<?> key = getFieldAsConfigKey(o, f); if (key!=null && bag.containsKey(key)) { Object uncoercedValue = bag.getObjKeyMaybe(key).get(); setField(o, f, uncoercedValue, optionalAnnotation); return; } if (setDefaultVals && optionalAnnotation!=null && groovyTruth(optionalAnnotation.defaultVal())) { Object oldValue; try { f.setAccessible(true); oldValue = f.get(o); if (oldValue==null || oldValue.equals(getDefaultValueForType(f.getType()))) { setField(o, f, optionalAnnotation.defaultVal(), optionalAnnotation); } } catch (Exception e) { Exceptions.propagate(e); } return; } }
/** 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); } } } }