content: package com.alibaba.datax.plugin.writer.hologresjdbcwriter.util;
  
  import com.alibaba.hologres.client.model.WriteMode;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import java.lang.reflect.Field;
  import java.util.Map;
  import java.util.Set;
  
  public class ConfLoader {
  	public static Logger LOG = LoggerFactory.getLogger(ConfLoader.class);
  
  	static public <T> T load(Map<String, Object> props, T config, Set<String> ignoreList) throws Exception {
  		Field[] fields = config.getClass().getDeclaredFields();
  		for (Map.Entry<String, Object> entry : props.entrySet()) {
  			String key = entry.getKey();
  			String value = entry.getValue().toString();
  			if (ignoreList.contains(key)) {
  				LOG.info("Config Skip {}", key);
  				continue;
  			}
  			boolean match = false;
  			for (Field field : fields) {
  				if (field.getName().equals(key)) {
  					match = true;
  					field.setAccessible(true);
  					Class<?> type = field.getType();
  					if (type.equals(String.class)) {
  						field.set(config, value);
  					} else if (type.equals(int.class)) {
  						field.set(config, Integer.parseInt(value));
  					} else if (type.equals(long.class)) {
  						field.set(config, Long.parseLong(value));
  					} else if (type.equals(boolean.class)) {
  						field.set(config, Boolean.parseBoolean(value));
  					} else if (WriteMode.class.equals(type)) {
  						field.set(config, WriteMode.valueOf(value));
  					} else {
  						throw new Exception("invalid type " + type + " for param " + key);
  					}
  					if ("password".equals(key)) {
  						StringBuilder sb = new StringBuilder();
  						for (int i = 0; i < value.length(); ++i) {
  							sb.append("*");
  						}
  						LOG.info("Config {}={}", key, sb.toString());
  					} else {
  						LOG.info("Config {}={}", key, value);
  					}
  				}
  			}
  			if (!match) {
  				throw new Exception("param " + key + " not found in HoloConfig");
  			}
  		}
  		return config;
  	}
  }
  