package frame.persist; 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 chat.server.Configer; import chat.server.DTDResolver; import chat.server.Loader; import frame.util.Util; public class NamedSQLLoader extends Loader { 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; } public static void staticLoad() throws FileNotFoundException { getInstance(); instance.load(); } @Override public void load() { File root = new File(path); File[] files = root.listFiles(); for (File config: files) { if (!config.isFile()) { continue; } loadOneFile(config); } } public void reload() { sqlContainer.clear(); load(); } public void loadOneFile(File file) { try { logger.debug("load sql file:" + file); InputStream inputStream = new FileInputStream(file); try { SAXReader reader = new SAXReader(); DTDResolver resolver = new DTDResolver(Configer.getPath_Config(), "sql.dtd"); reader.setEntityResolver(resolver); reader.setValidation(false); Document doc = reader.read(inputStream); Element root = doc.getRootElement(); String active = root.attributeValue("active"); if (!Util.isEmptyStr(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); } }