package com.norteksoft.wf.engine.core.impl; import java.text.ParseException; import java.text.SimpleDateFormat; import org.apache.commons.lang.StringUtils; import com.norteksoft.wf.base.enumeration.DateOperator; /** * 日期前后的运算器 */ public class TimeCalculator extends DateCalculator{ private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); public Boolean execute(String subExpression) { try { if(StringUtils.contains(subExpression, DateOperator.NLT.getCode())){ Long leftOperand = simpleDateFormat.parse(StringUtils.substringBefore(subExpression, DateOperator.NLT.getCode()).trim()).getTime(); Long rightOperand = simpleDateFormat.parse(StringUtils.substringAfterLast(subExpression, DateOperator.NLT.getCode()).trim()).getTime(); return leftOperand.longValue()>=rightOperand.longValue(); }else if(StringUtils.contains(subExpression, DateOperator.NGT.getCode())){ Long leftOperand = simpleDateFormat.parse(StringUtils.substringBefore(subExpression, DateOperator.NGT.getCode()).trim()).getTime(); Long rightOperand = simpleDateFormat.parse(StringUtils.substringAfterLast(subExpression, DateOperator.NGT.getCode()).trim()).getTime(); return leftOperand.longValue()<=rightOperand.longValue(); }else if(StringUtils.contains(subExpression, DateOperator.GT.getCode())){ Long leftOperand = simpleDateFormat.parse(StringUtils.substringBefore(subExpression, DateOperator.GT.getCode()).trim()).getTime(); Long rightOperand = simpleDateFormat.parse(StringUtils.substringAfterLast(subExpression, DateOperator.GT.getCode()).trim()).getTime(); return leftOperand.longValue()>rightOperand.longValue(); }else if(StringUtils.contains(subExpression, DateOperator.LT.getCode())){ Long leftOperand = simpleDateFormat.parse(StringUtils.substringBefore(subExpression, DateOperator.LT.getCode()).trim()).getTime(); Long rightOperand = simpleDateFormat.parse(StringUtils.substringAfterLast(subExpression, DateOperator.LT.getCode()).trim()).getTime(); return leftOperand.longValue()<rightOperand.longValue(); }else if(StringUtils.contains(subExpression, DateOperator.ET.getCode())){ Long leftOperand = simpleDateFormat.parse(StringUtils.substringBefore(subExpression, DateOperator.ET.getCode()).trim()).getTime(); Long rightOperand = simpleDateFormat.parse(StringUtils.substringAfterLast(subExpression, DateOperator.ET.getCode()).trim()).getTime(); return leftOperand.longValue()==rightOperand.longValue(); } throw new RuntimeException(subExpression + " is invalid expression."); } catch (ParseException e) { throw new RuntimeException(e.getMessage()); } } }