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

org.zodiac.sentinel.base.config.SentinelDataSourceConfigInfo Maven / Gradle / Ivy

package org.zodiac.sentinel.base.config;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import org.zodiac.commons.util.ObjectUtil;
import org.zodiac.sentinel.base.datasource.model.AbstractDataSourceInfo;
import org.zodiac.sentinel.base.datasource.model.SentinelApolloDataSourceInfo;
import org.zodiac.sentinel.base.datasource.model.SentinelFileDataSourceInfo;
import org.zodiac.sentinel.base.datasource.model.SentinelNacosDataSourceInfo;
import org.zodiac.sentinel.base.datasource.model.SentinelRedisDataSourceInfo;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * @deprecated 使用各个数据源实现包的功能代替。
 *
 */
public class SentinelDataSourceConfigInfo {

    private final SentinelFileDataSourceInfo file = new SentinelFileDataSourceInfo();

    private final SentinelApolloDataSourceInfo apollo = new SentinelApolloDataSourceInfo();

    private final SentinelNacosDataSourceInfo nacos = new SentinelNacosDataSourceInfo();

    private final SentinelRedisDataSourceInfo redis = new SentinelRedisDataSourceInfo();

    public SentinelDataSourceConfigInfo() {
        super();
    }

    public SentinelFileDataSourceInfo getFile() {
        return file;
    }

    public SentinelApolloDataSourceInfo getApollo() {
        return apollo;
    }

    public SentinelNacosDataSourceInfo getNacos() {
        return nacos;
    }

    public SentinelRedisDataSourceInfo getRedis() {
        return redis;
    }

    @JsonIgnore
    public List getValidField() {
        return Arrays.stream(this.getClass().getDeclaredFields()).map(field -> {
            try {
                if (ObjectUtil.notEmptyObject(field.get(this))) {
                    return field.getName();
                }
            } catch (IllegalAccessException e) {
                // won't happen
            }
            return null;
        }).filter(Objects::nonNull).collect(Collectors.toList());
    }

    @JsonIgnore
    public AbstractDataSourceInfo getValidDataSourceInfo() {
        List invalidFields = getValidField();
        if (invalidFields.size() == 1) {
            try {
                this.getClass().getDeclaredField(invalidFields.get(0))
                        .setAccessible(true);
                return (AbstractDataSourceInfo) this.getClass()
                        .getDeclaredField(invalidFields.get(0)).get(this);
            } catch (IllegalAccessException e) {
                // won't happen
            } catch (NoSuchFieldException e) {
                // won't happen
            }
        }
        return null;
    }

    @Override
    public int hashCode() {
        return Objects.hash(apollo, file, nacos, redis);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        SentinelDataSourceConfigInfo other = (SentinelDataSourceConfigInfo)obj;
        return Objects.equals(apollo, other.apollo) && Objects.equals(file, other.file)
            && Objects.equals(nacos, other.nacos) && Objects.equals(redis, other.redis);
    }

    @Override
    public String toString() {
        return "SentinelDataSourceConfigInfo [file=" + file + ", apollo=" + apollo + ", nacos=" + nacos + ", redis="
            + redis + "]";
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy