package com.dy.common.util; 
 | 
  
 | 
import org.jdom2.Document; 
 | 
import org.jdom2.Element; 
 | 
import org.jdom2.input.SAXBuilder; 
 | 
  
 | 
import java.io.InputStream; 
 | 
import java.net.URL; 
 | 
import java.util.HashMap; 
 | 
import java.util.Iterator; 
 | 
import java.util.List; 
 | 
  
 | 
@SuppressWarnings("unused") 
 | 
public class Config { 
 | 
  
 | 
    private static HashMap<String, String> configs; 
 | 
    private static Config config; 
 | 
     
 | 
    /** 
 | 
     * 得到唯一实例 
 | 
     * @return 返回实例 
 | 
     */ 
 | 
    public static Config getInstance() { 
 | 
        if (config == null) { 
 | 
            config = new Config(); 
 | 
            configs = new HashMap<>(); 
 | 
        } 
 | 
        return config; 
 | 
    } 
 | 
         
 | 
    private Config() { 
 | 
    } 
 | 
    /** 
 | 
     * 根据配置名称得到配置值 
 | 
     * @param name 配置名称 
 | 
     * @return 配置值 
 | 
     */ 
 | 
    public static String getConfig(String name) { 
 | 
        if (configs == null) { 
 | 
            return null; 
 | 
        } 
 | 
        if(name.trim().equals("")){ 
 | 
            return "" ; 
 | 
        } 
 | 
        return configs.get(name); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 初始化配置 
 | 
     * @param fileUrl 配置文件路径 
 | 
     * @throws Exception 抛出异常 
 | 
     */ 
 | 
    public void init(URL fileUrl) throws Exception { 
 | 
        parseConfig(createDom(fileUrl));         
 | 
    } 
 | 
    /** 
 | 
     * 重新初始化 
 | 
     * @param fileUrl 配置文件路径 
 | 
     * @param propertiesInput 属性文件输入流 
 | 
     * @throws Exception 抛出异常 
 | 
     */ 
 | 
    public void reInit(URL fileUrl, InputStream propertiesInput) throws Exception { 
 | 
        configs = new HashMap<>(); 
 | 
        parseConfig(createDom(fileUrl)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 创建dom对象 
 | 
     * @param configFileURL 配置文件路径 
 | 
     * @return dom对象 
 | 
     */ 
 | 
    private Document createDom(URL configFileURL) throws Exception { 
 | 
        if (configFileURL == null) { 
 | 
            throw new Exception("没有得到配置文件!", null); 
 | 
        } 
 | 
        Document doc = null; 
 | 
        try { 
 | 
            SAXBuilder sb = new SAXBuilder(); 
 | 
            doc = sb.build(configFileURL); 
 | 
            if (doc == null) { 
 | 
                throw new Exception("没有生成配置文件的DOM对象!", null); 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            throw new Exception("生成配置文件的DOM对象失败!", e); 
 | 
        } 
 | 
        return doc; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 分析服务器运行参数 
 | 
     * @param doc dom对象 
 | 
     * @throws Exception 抛出异常 
 | 
     */ 
 | 
    private void parseConfig(Document doc) throws Exception { 
 | 
        Element root = doc.getRootElement(); 
 | 
        if (root == null) { 
 | 
            throw new Exception("没有得到配置文件根元素config!"); 
 | 
        } 
 | 
        List<Element> list = root.getChildren(); 
 | 
        if (list == null) { 
 | 
            throw new Exception("配置文件没有配置元素!"); 
 | 
        } 
 | 
        Iterator<Element> it = list.iterator(); 
 | 
        Element e ; 
 | 
        String name ; 
 | 
        String tx ; 
 | 
        while (it.hasNext()) { 
 | 
            e = it.next(); 
 | 
            if (e == null) { 
 | 
                throw new Exception("得到配置文件中元素配置出错!"); 
 | 
            } 
 | 
            name = e.getName(); 
 | 
            if (configs.get(name) != null) { 
 | 
                throw new Exception("配置文件中元素" + name + "重名!"); 
 | 
            } 
 | 
            tx = e.getText(); 
 | 
  
 | 
            if(tx != null && tx.startsWith("${") && tx.endsWith("}")){ 
 | 
                tx = tx.substring(2, tx.length() - 1) ; 
 | 
                tx = ConfigProperties.getConfig(tx) ; 
 | 
            } 
 | 
            configs.put(name, tx);     
 | 
        } 
 | 
    } 
 | 
} 
 |