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

org.joyqueue.toolkit.config.PropertySupplier Maven / Gradle / Ivy

/**
 * Copyright 2019 The JoyQueue Authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.joyqueue.toolkit.config;

import com.jd.laf.extension.Converts;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 属性提供者
 */
public interface PropertySupplier {
    /**
     * 获取属性,没有则创建一个
     *
     * @param key 属性名
     * @return 属性
     */
    Property getOrCreateProperty(String key);

    /**
     * 获取属性
     *
     * @param key 属性名
     * @return 属性
     */
    Property getProperty(String key);

    /**
     * 获取所有属性
     *
     * @return
     */
    List getProperties();

    /**
     * 根据前缀查找属性
     *
     * @param prefix 前缀
     * @return
     */
    List getPrefix(String prefix);

    /**
     * Map属性提供者
     */
    class MapSupplier implements PropertySupplier {
        Map map;

        public MapSupplier(Map map) {
            this.map = map;
        }

        @Override
        public Property getOrCreateProperty(final String key) {
            if (key == null) {
                return null;
            }
            Property result = getProperty(key);
            return result == null ? new Property(null, key, null) : result;

        }

        @Override
        public Property getProperty(final String key) {
            if (key == null) {
                return null;
            }
            Object value = map == null ? null : map.get(key);
            return value == null ? null : new Property(null, key, value.toString());
        }

        @Override
        public List getProperties() {
            List result = new ArrayList(map == null ? 0 : map.size());
            if (map == null) {
                return result;
            }
            for (Map.Entry entry : map.entrySet()) {
                result.add(new Property(null, entry.getKey(), entry.getValue()));
            }
            return result;
        }

        @Override
        public List getPrefix(final String prefix) {
            List result = new ArrayList();
            if (prefix == null || prefix.isEmpty() || map == null) {
                return result;
            }
            for (Map.Entry entry : map.entrySet()) {
                if (entry.getKey().startsWith(prefix)) {
                    result.add(new Property(null, entry.getKey(), entry.getValue()));
                }
            }
            return result;
        }
    }

    default  T getValue(PropertyDef key) {
        return getValue(this, key);
    }

    static  T getValue(PropertySupplier supplier, PropertyDef key) {
        if (key == null) {
            throw new IllegalArgumentException("key can not be null");
        }
        return getValue(supplier, key.getName(), key.getType(), key.getValue());
    }

    static  T getValue(PropertySupplier supplier, String key, PropertyDef.Type type, Object defaultValue) {
        if (key == null) {
            throw new IllegalArgumentException("key can not be null");
        }
        if (type == null) {
            throw new IllegalArgumentException("type can not be null");
        }
        Property property = supplier.getProperty(key);
        Object value = (property != null ? property.getValue() : defaultValue);
        switch (type) {
            case BOOLEAN:
                return (T) Converts.getBoolean(value, Converts.getBoolean(defaultValue));
            case STRING:
                return (T) Converts.getString(value, Converts.getString(defaultValue));
            case INT:
                return (T) Converts.getInteger(value, Converts.getInteger(defaultValue));
            case SHORT:
                return (T) Converts.getShort(value, Converts.getShort(defaultValue));
            case LONG:
                return (T) Converts.getLong(value, Converts.getLong(defaultValue));
            case DOUBLE:
                return (T) Converts.getDouble(value, Converts.getDouble(defaultValue));
            default:
                return (T) (value == null ? defaultValue : value);
        }
    }


    static  T getValue(PropertySupplier supplier, PropertyDef key, Object value) {
        if (key == null) {
            throw new IllegalArgumentException("key can not be null");
        }
        Object propertyValue = null;
        if(null != supplier) {
            Property property = supplier.getProperty(key.getName());
            if (property != null) {
                propertyValue = property.getValue();
            }
        }

        Object defaultValue = key.getValue();
        switch (key.getType()) {
            case BOOLEAN:
                return (T) Converts.getBoolean(propertyValue, Converts.getBoolean(value,Converts.getBoolean(defaultValue)));
            case STRING:
                return (T) Converts.getString(propertyValue, Converts.getString(value,Converts.getString(defaultValue)));
            case INT:
                return (T) Converts.getInteger(propertyValue, Converts.getInteger(value,Converts.getInteger(defaultValue)));
            case SHORT:
                return (T) Converts.getShort(propertyValue, Converts.getShort(value,Converts.getShort(defaultValue)));
            case LONG:
                return (T) Converts.getLong(propertyValue, Converts.getLong(value,Converts.getLong(defaultValue)));
            case DOUBLE:
                return (T) Converts.getDouble(propertyValue, Converts.getDouble(value,Converts.getDouble(defaultValue)));
            default:
                return (T) (propertyValue == null ? (value == null ? defaultValue : value) : propertyValue);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy