package foundation.send.mail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.Security; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import foundation.data.entity.Entity; import foundation.data.entity.EntitySet; import foundation.data.object.DataObject; import foundation.server.Initializer; import foundation.server.config.Configer; public class MailLoader extends Initializer { private static MailLoader instance; private MailServerBucket serverBucket; private MailActionBucket actionBucket; private MailLoader() throws FileNotFoundException { actionBucket = MailActionBucket.getInstance(); serverBucket = MailServerBucket.getInstance(); } public static synchronized MailLoader getInstance() throws FileNotFoundException { if (instance == null) { if (instance == null) { instance = new MailLoader(); } } return instance; } @Override public void startUp() throws Exception { //1. Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); //2. load mail servers loadMailServers(); //3. load mail actions loadMailActions(); } private void loadMailServers() throws Exception { //1. load configuration String path = Configer.getPath_Config(); File file = new File(path, "mail.xml"); logger.debug("load config file:" + file); //2. InputStream inputStream = new FileInputStream(file); try { SAXReader reader = new SAXReader(); reader.setValidation(false); Document doc = reader.read(inputStream); Element root = doc.getRootElement(); loadServers(root); } finally { try { inputStream.close(); } catch (IOException e) { } } } private void loadServers(Element root) { Element databaseList = root.element("server-list"); Iterator iterator = databaseList.elementIterator("server"); while (iterator.hasNext()) { Element element = iterator.next(); MailServer server = new MailServer(); server.load(element); serverBucket.loadOne(server.getName(), server); } } private void loadMailActions() throws Exception { //1. load DataObject dataObject = DataObject.getInstance("sys_mail"); EntitySet entitySet = dataObject.getTableEntitySet(); for (Entity entity: entitySet) { MailAction action = new MailAction(); action.load(entity); actionBucket.loadOne(action.getName(), action); } //2. for (MailAction action: actionBucket) { String serverName = action.getServerName(); MailServer server = serverBucket.get(serverName); if (server == null) { logger.error("load mail action error, server not exists: {}", serverName); continue; } action.setServer(server); } } @Override public void shutDown() throws Exception { } }