Package com.netflix.governator.lifecycle

Source Code of com.netflix.governator.lifecycle.DefaultConfigurationMapper

package com.netflix.governator.lifecycle;

import com.google.common.collect.Maps;
import com.netflix.governator.annotations.Configuration;
import com.netflix.governator.annotations.ConfigurationVariable;
import com.netflix.governator.configuration.ConfigurationDocumentation;
import com.netflix.governator.configuration.ConfigurationMapper;
import com.netflix.governator.configuration.ConfigurationProvider;

import java.lang.reflect.Field;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DefaultConfigurationMapper implements ConfigurationMapper {
    private static final Logger LOG = LoggerFactory.getLogger(DefaultConfigurationMapper.class);
   
    @Override
    public void mapConfiguration(
            ConfigurationProvider configurationProvider,
            ConfigurationDocumentation configurationDocumentation,
            Object obj,
            LifecycleMethods methods) throws Exception {
       
        /**
         * Any field annotated with @ConfigurationVariable will be available for
         * replacement when generating property names
         */
        Map<String, String> overrides = Maps.newHashMap();
        for ( Field variableField : methods.fieldsFor(ConfigurationVariable.class)) {
            ConfigurationVariable annot = variableField.getAnnotation(ConfigurationVariable.class);
            if (annot != null) {
                overrides.put(annot.name(), variableField.get(obj).toString());
            }
        }
       
        /**
         * Map a configuration to any field with @Configuration annotation
         */
        ConfigurationProcessor configurationProcessor = new ConfigurationProcessor(configurationProvider, configurationDocumentation);
        for ( Field configurationField : methods.fieldsFor(Configuration.class) )
        {
            try {
                configurationProcessor.assignConfiguration(obj, configurationField, overrides);
            }
            catch (Exception e) {
                throw new Exception(String.format("Failed to bind property '%s' for instance of '%s'", configurationField.getName(), obj.getClass().getCanonicalName()), e);
            }
        }
    }

}
TOP

Related Classes of com.netflix.governator.lifecycle.DefaultConfigurationMapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.