package cn.newgxu.bbs.domain.lucky; import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Map; import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * @path valhalla_hx----cn.newgxu.bbs.domain.lucky.LuckyConfig.java * * @author 集成显卡 * @since 4.5.0 * @version $Revision 1.1$ * @date 2011-10-2 * @describe * 幸运帖的设置<br /> * 默认是没有值的,当需要时,会从xml配置文件中读取相应的信息到内存中 */ public class LuckyConfig { private static final String CONFIG_FILE_NAME="lucky_config.xml";//幸运帖配置文件名称 /** * 因为 LuckySubject 中的题目选项是保存为一个 字段值,又不能避免出现多个选项的情况, * 所以,每个选项间以 SPLIT_CHAR 分开。 * 使用了一个很特殊的字符串 */ public static final String SPLIT_CHAR="#!#!!%!!!%"; public static final String DAY_COUNT_CONFIG="day"; public static final String ALL_COUNT_CONFIG="all"; private static Map<String,String> luckyConfig; /** * 获取config信息 */ private static void initConfig() throws Exception{ String path=Thread.currentThread().getContextClassLoader().getResource("\\config\\").toURI().getPath() + CONFIG_FILE_NAME; Document document=getXMLDocument(path); Node minExpNode=document.selectSingleNode("/lucky/minExperience"); Node probabilityNode=document.selectSingleNode("/lucky/probability"); Node createMoneyNode=document.selectSingleNode("/lucky/createMoney"); luckyConfig=new HashMap<String,String>(); luckyConfig.put("minExperience", minExpNode.getText()); luckyConfig.put("probability", probabilityNode.getText()); luckyConfig.put("createMoney", createMoneyNode.getText()); } /** * 保存配置,更新到文件中 */ public static void updateConfig() throws Exception { String path=Thread.currentThread().getContextClassLoader().getResource("\\config\\").toURI().getPath() + CONFIG_FILE_NAME; Document document=getXMLDocument(path); Node minExpNode=document.selectSingleNode("/lucky/minExperience"); Node probabilityNode=document.selectSingleNode("/lucky/probability"); Node createMoneyNode=document.selectSingleNode("/lucky/createMoney"); minExpNode.setText(luckyConfig.get("minExperience")); probabilityNode.setText(luckyConfig.get("probability")); createMoneyNode.setText(luckyConfig.get("createMoney")); //写数据 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path), getOutputFormat()); xmlWriter.write(document); xmlWriter.close(); } /** * 获取 xml 文件中的 document * @param path * @return * @throws Exception */ public static Document getXMLDocument(String path) throws Exception{ Document document=null; try{ File configFile=new File(path); SAXReader saxReader=new SAXReader(); document=saxReader.read(configFile); }catch(Exception e){ throw e; } return document; } /** * 获取一个 OutputFormat * @return */ public static OutputFormat getOutputFormat(){ OutputFormat outputFormat = OutputFormat.createPrettyPrint();// 设置XML文档输出格式 outputFormat.setEncoding("UTF-8");// 设置XML文档的编码类型 outputFormat.setIndent(true);// 设置是否缩进 outputFormat.setIndent(" ");// 以TAB方式实现缩进 outputFormat.setNewlines(true);// 设置是否换行 return outputFormat; } /** * 获取幸运帖的配置<br /> * 如果没有配置信息,就从配置文件中读取 * * @param key * @return * @throws Exception */ public static String getConfig(String key) throws Exception{ if(LuckyConfig.luckyConfig==null) LuckyConfig.initConfig(); return LuckyConfig.luckyConfig.get(key); } /** * 设置配置信息,直接覆盖 * @param key * @param value * @throws Exception */ public static void setConfig(String key,String value)throws Exception{ if(LuckyConfig.luckyConfig==null) LuckyConfig.initConfig(); LuckyConfig.luckyConfig.put(key, value); } /**测试一下*/ public static void main(String a[]) throws Exception{ //System.out.println(LuckyConfig.getConfig("probability")); //LuckyConfig.setConfig("probability", "0.2"); //System.out.println(LuckyConfig.getConfig("probability")); //LuckyConfig.updateConfig(); LuckySubject ls=new LuckySubject(); ls.setOptionList(new String[]{"演讲辩论社","绿叶社","青年志愿者协会","女性商业协会"}); System.out.println(ls.getOptionString()); System.out.println(ls.getOptionList()); } }