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

com.baidu.disconf.client.common.model.DisconfCenterFile Maven / Gradle / Ivy

The newest version!
package com.baidu.disconf.client.common.model;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

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

import com.baidu.disconf.client.common.constants.SupportFileTypeEnum;
import com.baidu.disconf.client.config.DisClientConfig;
import com.baidu.disconf.client.support.utils.ClassUtils;
import com.baidu.disconf.core.common.utils.ClassLoaderUtil;
import com.baidu.disconf.core.common.utils.OsUtil;

/**
 * 配置文件表示
 *
 * @author liaoqiqi
 * @version 2014-5-20
 */
public class DisconfCenterFile extends DisconfCenterBaseModel {

    protected static final Logger LOGGER = LoggerFactory.getLogger(DisconfCenterFile.class);

    // -----key: 配置文件中的项名
    // -----value: 默认值
    private Map keyMaps = new HashMap();

    // 额外的配置数据,非注解式使用它来存储
    private Map additionalKeyMaps = new HashMap();

    // 是否是非注解注入方式
    private boolean isTaggedWithNonAnnotationFile = false;

    // 配置文件类
    private Class cls;

    // 文件名
    private String fileName;

    // 配置文件 指定路径下
    private String targetDirPath;

    // 文件类型
    private SupportFileTypeEnum supportFileTypeEnum = SupportFileTypeEnum.ANY;

    public Class getCls() {
        return cls;
    }

    public void setCls(Class cls) {
        this.cls = cls;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public Map getKeyMaps() {
        return keyMaps;
    }

    public void setKeyMaps(Map keyMaps) {
        this.keyMaps = keyMaps;
    }

    public Map getAdditionalKeyMaps() {
        return additionalKeyMaps;
    }

    public void setAdditionalKeyMaps(Map additionalKeyMaps) {
        this.additionalKeyMaps = additionalKeyMaps;
    }

    public SupportFileTypeEnum getSupportFileTypeEnum() {
        return supportFileTypeEnum;
    }

    public void setSupportFileTypeEnum(SupportFileTypeEnum supportFileTypeEnum) {
        this.supportFileTypeEnum = supportFileTypeEnum;
    }

    public boolean isTaggedWithNonAnnotationFile() {
        return isTaggedWithNonAnnotationFile;
    }

    public void setIsTaggedWithNonAnnotationFile(boolean isTaggedWithNonAnnotationFile) {
        this.isTaggedWithNonAnnotationFile = isTaggedWithNonAnnotationFile;
    }

    public String getTargetDirPath() {
        return targetDirPath;
    }

    public void setTargetDirPath(String targetDirPath) {
        this.targetDirPath = targetDirPath;
    }

    @Override
    public String toString() {
        return "\n\tDisconfCenterFile [\n\tkeyMaps=" + keyMaps + "\n\tcls=" + cls + "\n\tfileName=" + fileName
                + "\n\ttargetDirPath=" + targetDirPath +
                super.toString() + "]";
    }

    @Override
    public String infoString() {
        return "\n\tDisconfCenterFile [\n\tkeyMaps=" + keyMaps + "\n" +
                "\tadditionalKeyMaps=" + additionalKeyMaps + "\n\tcls=" + cls + super.infoString() + "]";
    }

    /**
     * 获取可以表示的KeyMap对
     */
    public Map getKV() {

        // 非注解式的
        if (keyMaps.size() == 0) {
            return additionalKeyMaps;
        }

        //
        // 注解式的
        //
        Map map = new HashMap();
        for (String key : keyMaps.keySet()) {
            map.put(key, keyMaps.get(key).getValue());
        }

        return map;
    }

    /**
     * 配置文件的路径
     */
    public String getFilePath() {

        // 不放到classpath, 则文件路径根据 userDefineDownloadDir 来设置
        if (!DisClientConfig.getInstance().enableLocalDownloadDirInClassPath) {
            return OsUtil.pathJoin(DisClientConfig.getInstance().userDefineDownloadDir, fileName);
        }

        if (targetDirPath != null) {

            if (targetDirPath.startsWith("/")) {
                return OsUtil.pathJoin(targetDirPath, fileName);
            }

            return OsUtil.pathJoin(ClassLoaderUtil.getClassPath(), targetDirPath, fileName);
        }

        return OsUtil.pathJoin(ClassLoaderUtil.getClassPath(), fileName);
    }

    /**
     * 配置文件的路径
     */
    public String getFileDir() {

        // 获取相对于classpath的路径
        if (targetDirPath != null) {

            if (targetDirPath.startsWith("/")) {
                return OsUtil.pathJoin(targetDirPath);
            }

            return OsUtil.pathJoin(ClassLoaderUtil.getClassPath(), targetDirPath);
        }

        return ClassLoaderUtil.getClassPath();
    }

    /**
     * 配置文件Item项表示,包括了值,还有其类型
     *
     * @author liaoqiqi
     * @version 2014-6-16
     */
    public static class FileItemValue {

        private Object value;
        private Field field;
        private Method setMethod;

        public Object getValue() {
            return value;
        }

        public void setValue(Object value) {
            this.value = value;
        }

        public void setField(Field field) {
            this.field = field;
        }

        /**
         * 是否是静态域
         *
         * @return
         */
        public boolean isStatic() {
            return Modifier.isStatic(field.getModifiers());
        }

        /**
         * 设置value, 优先使用 setter method, 然后其次是反射
         *
         * @param value
         */
        public Object setValue4StaticFileItem(Object value) throws Exception {

            try {
                if (setMethod != null) {
                    setMethod.invoke(null, value);
                } else {
                    field.set(null, value);
                }

            } catch (Exception e) {
                LOGGER.warn(e.toString());
            }

            return value;
        }

        public Object setValue4FileItem(Object object, Object value) throws Exception {

            try {
                if (setMethod != null) {
                    setMethod.invoke(object, value);
                } else {
                    field.set(object, value);
                }
            } catch (Exception e) {
                LOGGER.warn(e.toString());
            }

            return value;
        }

        /**
         * 返回值
         *
         * @param fieldValue
         *
         * @return
         *
         * @throws Exception
         */
        public Object getFieldValueByType(Object fieldValue) throws Exception {
            return ClassUtils.getValeByType(field.getType(), fieldValue);
        }

        public Object getFieldDefaultValue(Object object) throws Exception {
            return field.get(object);
        }

        @Override
        public String toString() {
            return "FileItemValue{" +
                    "value=" + value +
                    ", field=" + field +
                    ", setMethod=" + setMethod +
                    '}';
        }

        public FileItemValue(Object value, Field field) {
            super();
            this.value = value;
            this.field = field;
        }

        public FileItemValue(Object value, Field field, Method setMethod) {
            super();
            this.value = value;
            this.field = field;
            this.setMethod = setMethod;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy