动态修改xml文件

接上篇文章动态修改properties文件,中的FileWacthdog.java作为父类,代码如下:

 

import org.apache.commons.digester.Digester;

/**
 * 

* Info: 动态加载collectionsFavourableActivity.xml文件,
* 该文件使用 common-digester 库解析因此解析的文件要符合digester库要求的格式。 *

*

* Date: 2014-4-28 14:22:54 *

* @author zhangyq * */ public class CollectionsFavourableActiDynamicLoading { //------- 实体类变量 ---------------------------------- private static CollectionsFavourableActivity activity; public static CollectionsFavourableActivity getActivity() { return activity; } /** * 根据传递的文件配置并加载该文件 * @param configFilename 要解析文件的绝对路径 * @param delay 检验文件的间隔时间段 */ public static void configureAndLoad(String configFilename, long delay) { PropertyWatchdog pdog = new PropertyWatchdog(configFilename); pdog.setDelay(delay); pdog.start(); } //-------------------------------------- 静态内部类定义 -------------------------- /** * Info: 动态读取配置文件的信息 * @author zhangyq */ static class PropertyWatchdog extends FileWatchdog { /** * 构造函数 * @param configFileName 绝对路径 */ PropertyWatchdog(String filename){ super(filename); } @Override protected void doOnChange() { try { Digester digester = new Digester(); digester.addObjectCreate("CollectionsFavourableActivity", CollectionsFavourableActivity.class); digester.addSetProperties("CollectionsFavourableActivity"); activity = (CollectionsFavourableActivity) digester.parse(file); } catch (Exception e) { return; } } } //--------------------------------------end 静态内部类定义 end-------------------------- }

 使用Digester库解析xml文件,上述解析的xml文件为:

 



 Digester库解析后生成的对象类为:

 

 

public class CollectionsFavourableActivity {

//----------------------------------------------- Instance Constants ----------------------
	private String avtivitySatrtDate;//活动开始日期
	private String avtivityEndDate;//活动结束日期
	
	private Double upperLimit;//上限金额
	private Double lowerLimit;//下限金额
	
	private int maxCountEveryMounth;//每月最多优惠笔数

	/**
	 * 空的构造函数
	 */
	public CollectionsFavourableActivity(){
		super();
	}
	
	/**
	 *  一档	1000元(含)-5000元	10	10
	 *	二档	5001-10000元			50	50
	 *	三档	10001-50000(含)元	80	80
	 *  四档	50001-200000含)元	120	120
	 *	五档	200001元以上			150	150
	 * Info:		根据支付金额的及优惠笔数获得优惠后的金额
	 * @param 		orderPrice		订单金额
	 * @return      计算后的金额
	 */
	public static double cal(double orderPrice){
		double result = 0.0;
		if (orderPrice < 1000 && orderPrice > 0) {
			result = orderPrice;
		} else if (orderPrice >=1000 && orderPrice <= 5000) {
			result = orderPrice - 10;
		}else if (orderPrice > 5000 && orderPrice <= 10000) {
			result = orderPrice - 50;
		}else if (orderPrice > 10000 && orderPrice <= 50000) {
			result = orderPrice - 80;
		}else if (orderPrice > 50000 && orderPrice <= 200000) {
			result = orderPrice - 120;
		}else if (orderPrice >  200000) {
			result = orderPrice - 150;
		}
		return result ;
	}
	
	
	@Override
	public String toString() {
		
		return "{开始日期:"+avtivitySatrtDate+" 结束日期:"+avtivityEndDate+"\r\n"+
			   "上限金额:"+upperLimit.doubleValue()+" 下限金额:"+lowerLimit.doubleValue()+"\r\n"+
			   " 每月最多优惠笔数:"+maxCountEveryMounth+"}";
	}


	//----------------------------------- start getter setter -----------------------------
	public Double getUpperLimit() {
		return upperLimit;
	}

	public void setUpperLimit(Double upperLimit) {
		this.upperLimit = upperLimit;
	}

	public Double getLowerLimit() {
		return lowerLimit;
	}

	public void setLowerLimit(Double lowerLimit) {
		this.lowerLimit = lowerLimit;
	}

	public int getMaxCountEveryMounth() {
		return maxCountEveryMounth;
	}

	public void setMaxCountEveryMounth(int maxCountEveryMounth) {
		this.maxCountEveryMounth = maxCountEveryMounth;
	}
	public String getAvtivitySatrtDate() {
		return avtivitySatrtDate;
	}
	
	public void setAvtivitySatrtDate(String avtivitySatrtDate) {
		this.avtivitySatrtDate = avtivitySatrtDate;
	}
	
	public String getAvtivityEndDate() {
		return avtivityEndDate;
	}
	
	public void setAvtivityEndDate(String avtivityEndDate) {
		this.avtivityEndDate = avtivityEndDate;
	}
//----------------------------------- end getter setter -----------------------------	


}

 测试使用:

CollectionsFavourableActiDynamicLoading.configureAndLoad(configFilename, delay);
CollectionsFavourableActivity  activity = CollectionsFavourableActiDynamicLoading.getActivity();

 

 

 

你可能感兴趣的:(Utils)