@SuppressWarnings("unchecked") public <T> Optional<T> getOptional(Class<T> configurationClass, String... path) { return (Optional<T>) getOptional((Type) configurationClass, path); }
@Override public Object getObject() throws Exception { if (key == null) { throw new IllegalArgumentException("Property key is required for SeedConfigurationFactoryBean"); } else { Optional<String> value = configuration.getOptional(String.class, key); if (value.isPresent()) { return value.get(); } else { if (defaultValue == null && mandatory) { throw new IllegalArgumentException("Configuration value " + key + " is mandatory and has no value nor default value"); } return defaultValue; } } }
public Object getMandatory(Type configurationClass, String... path) { return getOptional(configurationClass, path).orElseThrow(() -> (ConfigurationException) ConfigurationException.createNew(ConfigurationErrorCode.PATH_NOT_FOUND) .put("path", path == null ? "null" : String.join(".", (CharSequence[]) path)) ); }
@Override @SuppressWarnings("unchecked") public <T> ClassConfiguration<T> getConfiguration(Class<T> someClass) { ClassConfiguration<T> classConfiguration = ClassConfiguration.empty(someClass); StringBuilder sb = new StringBuilder(CLASSES_CONFIGURATION_PREFIX); for (String part : someClass.getName().split("\\.")) { sb.append(".").append(part); coffig.getOptional(Types.newParameterizedType(ClassConfiguration.class, someClass), sb.toString()) .ifPresent(o -> classConfiguration.merge((ClassConfiguration<T>) o)); } return classConfiguration; }
public Object get(Type type, String... path) { return getOptional(type, path).orElseGet(() -> instantiateDefault(rawClassOf(type))); }
@Override public void injectMembers(T t) { for (ConfigurableField configurableField : fields) { Configuration configuration = configurableField.getConfiguration(); Field field = configurableField.getField(); Class<?> fieldType = field.getType(); Optional<?> optionalValue = coffig.getOptional(fieldType, configuration.value()); try { if (optionalValue.isPresent()) { field.set(t, optionalValue.get()); } else if (configuration.mandatory()) { throw SeedException.createNew(CoreErrorCode.MISSING_CONFIGURATION_KEY) .put("key", computeConfigKey(configuration, fieldType)); } else if (field.get(t) == null && configuration.injectDefault()) { field.set(t, instantiateDefault(fieldType)); } } catch (IllegalAccessException e) { throw SeedException.wrap(e, CoreErrorCode.UNABLE_TO_INJECT_CONFIGURATION_VALUE) .put("class", field.getDeclaringClass().getCanonicalName()) .put("field", field.getName()) .put("key", computeConfigKey(configuration, fieldType)); } } }