All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tngtech.configbuilder.util.FieldValueExtractor Maven / Gradle / Ivy

Go to download

The Config Builder creates fully configured instances of config classes, using values from various sources like properties files, command line arguments etc.

The newest version!
package com.tngtech.configbuilder.util;

import com.tngtech.configbuilder.annotation.configuration.DoNotLogValue;
import com.tngtech.configbuilder.annotation.configuration.LoadingOrder;
import com.tngtech.configbuilder.annotation.valueextractor.ValueExtractorAnnotation;
import com.tngtech.configbuilder.annotation.valueextractor.ValueExtractorProcessor;
import com.tngtech.configbuilder.configuration.BuilderConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

public class FieldValueExtractor {

    private final static Logger log = LoggerFactory.getLogger(FieldValueExtractor.class);

    private final AnnotationHelper annotationHelper;
    private final ConfigBuilderFactory configBuilderFactory;

    public FieldValueExtractor(ConfigBuilderFactory configBuilderFactory) {
        this.configBuilderFactory = configBuilderFactory;
        this.annotationHelper = configBuilderFactory.getInstance(AnnotationHelper.class);
    }

    public Object extractValue(Field field, BuilderConfiguration builderConfiguration) {
        Object value = null;
        boolean doNotLogValue = field.isAnnotationPresent(DoNotLogValue.class);
        Class[] annotationOrderOfField = field.isAnnotationPresent(LoadingOrder.class) ? field.getAnnotation(LoadingOrder.class).value() : builderConfiguration.getAnnotationOrder();
        for (Annotation annotation : annotationHelper.getAnnotationsInOrder(field, annotationOrderOfField)) {
            log.debug("trying to find a value for field {} with {} annotation", field.getName(), annotation.annotationType());
            Class processor = annotation.annotationType().getAnnotation(ValueExtractorAnnotation.class).value();
            value = configBuilderFactory.getInstance(processor).getValue(annotation, configBuilderFactory);
            if (value != null) {
                if (doNotLogValue) {
                    log.debug("found value for field {} from {} annotation", field.getName(), annotation.annotationType());
                } else {
                    log.debug("found value \"{}\" for field {} from {} annotation", value, field.getName(), annotation.annotationType());
                }
                break;
            }
        }
        return value;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy