package foundation.data.loader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import foundation.persist.NamedSQL; import foundation.persist.NamedSQLContainer; import foundation.server.Initializer; import foundation.server.config.Configer; import foundation.util.Util; public class NamedSQLLoader extends Initializer { private static NamedSQLLoader instance; private NamedSQLContainer sqlContainer; protected String Node_RootElements; private NamedSQLLoader() throws FileNotFoundException { path = Configer.getPath_SQLConfig(); sqlContainer = NamedSQLContainer.getInstance(); Node_RootElements = "dataSpace"; } public static synchronized NamedSQLLoader getInstance() throws FileNotFoundException { if (instance == null) { if (instance == null) { instance = new NamedSQLLoader(); } } return instance; } @Override public void startUp() throws Exception { load(); } @Override public void shutDown() throws Exception { } public void load() { //1. clear sqlContainer.clear(); //2. load File root = new File(path); File[] files = root.listFiles(); for (File config: files) { if (!config.isFile()) { continue; } loadOneFile(config); } } public void loadOneFile(File file) { try { logger.debug("load sql file:" + file); InputStream inputStream = new FileInputStream(file); try { SAXReader reader = new SAXReader(); Document doc = reader.read(inputStream); Element root = doc.getRootElement(); String active = root.attributeValue("active"); if (!Util.isEmpty(active)) { if (!Util.StringToBoolean(active)) { return; } } loadRootElements(root); } catch (DocumentException e) { logger.error("can not load sql file: " + file); logger.error(e); } finally { try { inputStream.close(); } catch (IOException e) { } } } catch (Exception e) { logger.error(e); } } protected void loadRootElements(Element root) throws Exception { Iterator iterator = root.elementIterator(Node_RootElements); while (iterator.hasNext()) { Element element = (Element) iterator.next(); loadOneRootElement(element); } } protected void loadOneRootElement(Element element, Object ...args) throws Exception { Iterator sqlIterator = element.elementIterator(); while (sqlIterator.hasNext()) { Element statementElemnet = (Element) sqlIterator.next(); loadOneSQLElement(statementElemnet, args); } } protected void loadOneSQLElement(Element element, Object ...args) throws Exception { String name = element.attributeValue("name"); String sql = element.getTextTrim(); NamedSQL namedSQL = new NamedSQL(name, sql); sqlContainer.add(name, namedSQL); } }