package com.firefly.core.support.annotation;
import com.firefly.utils.VerifyUtils;
import com.firefly.utils.dom.DefaultDom;
import com.firefly.utils.dom.Dom;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;
public class ConfigReader {
public static final String DEFAULT_CONFIG_FILE = "firefly.xml";
public static final String SCAN_ELEMENT = "component-scan";
public static final String PACKAGE_ATTRIBUTE = "base-package";
private Config config;
private ConfigReader() {
config = new Config();
}
private static class Holder {
private static ConfigReader instance = new ConfigReader();
}
public static ConfigReader getInstance() {
return Holder.instance;
}
public Config load(String file) {
Dom dom = new DefaultDom();
Document doc = dom.getDocument(file == null ? DEFAULT_CONFIG_FILE : file);
Element root = dom.getRoot(doc);
load(root, dom);
return config;
}
public Config load(Element root, Dom dom) {
List<Element> scanList = dom.elements(root, SCAN_ELEMENT);
if (scanList != null) {
List<String> paths = new ArrayList<>();
for (int i = 0; i < scanList.size(); i++) {
Element ele = scanList.get(i);
String path = ele.getAttribute(PACKAGE_ATTRIBUTE);
if (!VerifyUtils.isEmpty(path))
paths.add(path);
}
config.setPaths(paths.toArray(new String[0]));
} else {
config.setPaths(new String[0]);
}
return config;
}
public Config getConfig() {
return config;
}
}