Просмотр исходного кода

完善内置日期函数和字符串函数,用户使用时给出空值不再抛出空指针的异常

jacky6024 8 лет назад
Родитель
Сommit
7a3bfb9e30

+ 106 - 14
urule-core/src/main/java/com/bstek/urule/runtime/builtinaction/DateAction.java

@@ -20,6 +20,8 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 
+import org.apache.commons.lang.StringUtils;
+
 import com.bstek.urule.RuleException;
 import com.bstek.urule.model.library.action.annotation.ActionBean;
 import com.bstek.urule.model.library.action.annotation.ActionMethod;
@@ -35,6 +37,9 @@ public class DateAction {
 	@ActionMethod(name="解析字符串为日期")
 	@ActionMethodParameter(names={"日期字符串","格式"})
 	public Date formatString(String dateStr,String pattern){
+		if(StringUtils.isBlank(dateStr)){
+			return null;
+		}
 		SimpleDateFormat sd=new SimpleDateFormat(pattern);
 		try {
 			return sd.parse(dateStr);
@@ -52,12 +57,18 @@ public class DateAction {
 	@ActionMethod(name="格式化日期")
 	@ActionMethodParameter(names={"目标日期","格式"})
 	public String format(Date date,String pattern){
+		if(date==null){
+			return null;
+		}
 		SimpleDateFormat sd=new SimpleDateFormat(pattern);
 		return sd.format(date);
 	}
 	@ActionMethod(name="加日期")
 	@ActionMethodParameter(names={"目标日期","年数","月数","天数","小时","分钟","秒数"})
 	public Date addDate(Date date,int years,int months,int days,int hours,int minutes,int seconds){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.YEAR, years);
@@ -71,6 +82,9 @@ public class DateAction {
 	@ActionMethod(name="日期加年")
 	@ActionMethodParameter(names={"目标日期","年数"})
 	public Date addDateForYear(Date date,int years){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.YEAR, years);
@@ -80,6 +94,9 @@ public class DateAction {
 	@ActionMethod(name="日期加月")
 	@ActionMethodParameter(names={"目标日期","月数"})
 	public Date addDateForMonth(Date date,int months){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.MONTH, months);
@@ -88,6 +105,9 @@ public class DateAction {
 	@ActionMethod(name="日期加天")
 	@ActionMethodParameter(names={"目标日期","天数"})
 	public Date addDateForDay(Date date,int days){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.DAY_OF_MONTH, days);
@@ -97,6 +117,9 @@ public class DateAction {
 	@ActionMethod(name="日期加小时")
 	@ActionMethodParameter(names={"目标日期","小时数"})
 	public Date addDateForHour(Date date,int hours){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.HOUR_OF_DAY, hours);
@@ -106,6 +129,9 @@ public class DateAction {
 	@ActionMethod(name="日期加分钟")
 	@ActionMethodParameter(names={"目标日期","分钟数"})
 	public Date addDateForMinute(Date date,int minutes){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.MINUTE, minutes);
@@ -114,6 +140,9 @@ public class DateAction {
 	@ActionMethod(name="日期加秒")
 	@ActionMethodParameter(names={"目标日期","秒数"})
 	public Date addDateForSecond(Date date,int seconds){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.SECOND, seconds);
@@ -122,6 +151,9 @@ public class DateAction {
 	@ActionMethod(name="减日期")
 	@ActionMethodParameter(names={"目标日期","年数","月数","天数","小时","分钟","秒数"})
 	public Date subDate(Date date,int years,int months,int days,int hours,int minutes,int seconds){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.YEAR, -years);
@@ -135,6 +167,9 @@ public class DateAction {
 	@ActionMethod(name="减日期减年")
 	@ActionMethodParameter(names={"目标日期","年数"})
 	public Date subDateForYear(Date date,int years){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.YEAR, -years);
@@ -143,6 +178,9 @@ public class DateAction {
 	@ActionMethod(name="减日期减月")
 	@ActionMethodParameter(names={"目标日期","月数"})
 	public Date subDateForMonth(Date date,int months){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.MONTH, -months);
@@ -151,6 +189,9 @@ public class DateAction {
 	@ActionMethod(name="减日期减天")
 	@ActionMethodParameter(names={"目标日期","天数"})
 	public Date subDateForDay(Date date,int days){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.DAY_OF_MONTH, -days);
@@ -159,6 +200,9 @@ public class DateAction {
 	@ActionMethod(name="减日期减小时")
 	@ActionMethodParameter(names={"目标日期","小时"})
 	public Date subDateForHour(Date date,int hours){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.HOUR_OF_DAY, -hours);
@@ -167,6 +211,9 @@ public class DateAction {
 	@ActionMethod(name="减日期减分钟")
 	@ActionMethodParameter(names={"目标日期","分钟"})
 	public Date subDateForMinute(Date date,int minutes){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.MINUTE, -minutes);
@@ -175,6 +222,9 @@ public class DateAction {
 	@ActionMethod(name="减日期减秒")
 	@ActionMethodParameter(names={"目标日期","秒数"})
 	public Date subDateForSecond(Date date,int seconds){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		c.add(Calendar.SECOND, -seconds);
@@ -183,7 +233,10 @@ public class DateAction {
 	
 	@ActionMethod(name="取年份")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getYear(Date date){
+	public Object getYear(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.YEAR);
@@ -191,7 +244,10 @@ public class DateAction {
 	
 	@ActionMethod(name="取月份")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getMonth(Date date){
+	public Object getMonth(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.MONTH);
@@ -199,42 +255,60 @@ public class DateAction {
 	
 	@ActionMethod(name="取星期")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getWeek(Date date){
+	public Object getWeek(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.DAY_OF_WEEK);
 	}
 	@ActionMethod(name="取天")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getay(Date date){
+	public Object getay(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.DAY_OF_MONTH);
 	}
 	@ActionMethod(name="取小时")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getHour(Date date){
+	public Object getHour(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.HOUR_OF_DAY);
 	}
 	@ActionMethod(name="取分钟")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getMinute(Date date){
+	public Object getMinute(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.MINUTE);
 	}
 	@ActionMethod(name="取秒")
 	@ActionMethodParameter(names={"目标日期"})
-	public int getSecond(Date date){
+	public Object getSecond(Date date){
+		if(date==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(date);
 		return c.get(Calendar.SECOND);
 	}
 	@ActionMethod(name="日期相减返回毫秒")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public long dateDifMillSecond(Date d1,Date d2){
+	public Object dateDifMillSecond(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();
@@ -245,7 +319,10 @@ public class DateAction {
 	}
 	@ActionMethod(name="日期相减返回秒")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public long dateDifSecond(Date d1,Date d2){
+	public Object dateDifSecond(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();
@@ -256,7 +333,10 @@ public class DateAction {
 	}
 	@ActionMethod(name="日期相减返回分钟")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public long dateDifMinute(Date d1,Date d2){
+	public Object dateDifMinute(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();
@@ -267,7 +347,10 @@ public class DateAction {
 	}
 	@ActionMethod(name="日期相减返回小时")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public long dateDifHour(Date d1,Date d2){
+	public Object dateDifHour(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();
@@ -278,7 +361,10 @@ public class DateAction {
 	}
 	@ActionMethod(name="日期相减返回天")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public long dateDifDay(Date d1,Date d2){
+	public Object dateDifDay(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();
@@ -289,7 +375,10 @@ public class DateAction {
 	}
 	@ActionMethod(name="日期相减返回星期")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public long dateDifWeek(Date d1,Date d2){
+	public Object dateDifWeek(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();
@@ -300,7 +389,10 @@ public class DateAction {
 	}
 	@ActionMethod(name="日期相减返回月")
 	@ActionMethodParameter(names={"日期","减去的日期"})
-	public int dateDifMonth(Date d1,Date d2){
+	public Object dateDifMonth(Date d1,Date d2){
+		if(d1==null || d2==null){
+			return null;
+		}
 		Calendar c=Calendar.getInstance();
 		c.setTime(d1);
 		Calendar c1=Calendar.getInstance();

+ 39 - 4
urule-core/src/main/java/com/bstek/urule/runtime/builtinaction/StringAction.java

@@ -18,6 +18,8 @@ package com.bstek.urule.runtime.builtinaction;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
+
 import com.bstek.urule.model.library.action.annotation.ActionBean;
 import com.bstek.urule.model.library.action.annotation.ActionMethod;
 import com.bstek.urule.model.library.action.annotation.ActionMethodParameter;
@@ -40,64 +42,97 @@ public class StringAction {
 	@ActionMethod(name="指定起始的字符串截取")
 	@ActionMethodParameter(names={"目标字符串","开始位置","结束位置"})
 	public String substring(String str,int start,int end){
+		if(str==null){
+			return null;
+		}
 		return str.substring(start, end);
 	}
 	
 	@ActionMethod(name="指定开始的字符串截取")
 	@ActionMethodParameter(names={"目标字符串","开始位置"})
 	public String substringForStart(String str,int start){
+		if(str==null){
+			return null;
+		}
 		return str.substring(start);
 	}
 	@ActionMethod(name="指定结束的字符串截取")
 	@ActionMethodParameter(names={"目标字符串","结束位置"})
 	public String substringForEnd(String str,int end){
+		if(str==null){
+			return null;
+		}
 		return str.substring(0,end);
 	}
 	
 	@ActionMethod(name="转小写")
 	@ActionMethodParameter(names={"目标字符串"})
 	public String toLowerCase(String str){
+		if(str==null){
+			return null;
+		}
 		return str.toLowerCase();
 	}
 	
 	@ActionMethod(name="转大写")
 	@ActionMethodParameter(names={"目标字符串"})
 	public String toUpperCase(String str){
+		if(str==null){
+			return null;
+		}
 		return str.toUpperCase();
 	}
 	
 	@ActionMethod(name="获取长度")
 	@ActionMethodParameter(names={"目标字符串"})
-	public int length(String str){
+	public Object length(String str){
+		if(str==null){
+			return null;
+		}
 		return str.length();
 	}
 	
 	@ActionMethod(name="获取字符")
 	@ActionMethodParameter(names={"目标字符串","位置"})
-	public char charAt(String str,int index){
+	public Object charAt(String str,int index){
+		if(str==null){
+			return null;
+		}
 		return str.charAt(index);
 	}
 	
 	@ActionMethod(name="字符首次出现位置")
 	@ActionMethodParameter(names={"目标字符串","要查找的字符串"})
-	public int indexOf(String str,String targetStr){
+	public Object indexOf(String str,String targetStr){
+		if(str==null){
+			return null;
+		}
 		return str.indexOf(targetStr);
 	}
 	
 	@ActionMethod(name="字符最后出现位置")
 	@ActionMethodParameter(names={"目标字符串","要查找的字符串"})
-	public int lastIndexOf(String str,String targetStr){
+	public Object lastIndexOf(String str,String targetStr){
+		if(str==null){
+			return null;
+		}
 		return str.lastIndexOf(targetStr);
 	}
 	
 	@ActionMethod(name="替换字符串")
 	@ActionMethodParameter(names={"目标字符串","原字符串","新字符串"})
 	public String replace(String str,String oldStr,String newStr){
+		if(str==null){
+			return null;
+		}
 		return str.replace(oldStr, newStr);
 	}
 	@ActionMethod(name="拆分字符串为集合")
 	@ActionMethodParameter(names={"目标字符串","原字符串","新字符串"})
 	public List<String> split(String str,String regex){
+		if(StringUtils.isBlank(str)){
+			return new ArrayList<String>();
+		}
 		String[] arr=str.split(regex);
 		List<String> list=new ArrayList<String>();
 		for(String item:arr){