指令数据采集(五)--指令的条件的执行判断

指令在执行的时候,执行当前的指令前,需要进行判断当前的指令是否需要执行,则需要对条件进行判断,根据前面设计的条件判断方式和对象,则现在的条件执行需要嵌套递归执行,也就是(条件组(条件组(条件组(条件组))))

 1 public class GroupConditionExector {
 2     private List<Param> paramList;
 3     public GroupConditionExector(List<Param> paramList){
 4         this.paramList = paramList;
 5     }
 6     public GroupConditionExector(){}
 7     public boolean execute(GroupCondition groupCondition){
 8         //组成员的判断
 9         IConditionOperation iConditionOperation = groupCondition.getiConditionOperation();
10         IConditionOperation iConditionOperationGroup;
11         Param paramA = groupCondition.getParamA();
12         Param paramB = groupCondition.getParamB();
13         //组成员
14         if(paramList!=null&&!paramList.isEmpty()){
15             for(Param param:paramList){
16                 if(paramA!=null){
17                     if(param.getParamKey()!=null
18                             &&paramA.getParamKey()!=null
19                             &&param.getParamKey().getKeyId()!=null
20                             &&paramA.getParamKey().getKeyId()!=null
21                             &&param.getParamKey().getKeyId().equals(paramA.getParamKey().getKeyId())){
22                         //将当前的值复制给 判断的值
23                         if(param.getParamValue()!=null) {
24                             paramA.setParamValue(param.getParamValue());
25                         }
26                     }
27                 }
28             }
29         }
30         boolean paramFlag;
31         //组属性的判断
32         boolean groupFlag;
33         boolean groupResult;
34         /**
35          * 如果设置了组判断的条件就进行判断
36          * 如果没有设置组判断条件则直接返回
37          * 递归处理条件
38          */
39         if(groupCondition.getGroupCondition()!=null) {
40             groupFlag = execute(groupCondition.getGroupCondition());
41             if(paramA!=null&&paramB!=null) {
42                 //如果当前组的条件是存在的则进行处理
43                 paramFlag= iConditionOperation.operation(paramA, paramB);
44             }else {
45                 //如果不存在则使用组的结果直接进行判断
46                 paramFlag = groupFlag;
47             }
48             iConditionOperationGroup = groupCondition.getiConditionOperationGroup();
49             groupResult = iConditionOperationGroup.operationLogic(paramFlag,groupFlag);
50             /**
51              * 经过组判断 返回组判断的结果
52              */
53             return groupResult;
54         }else {
55             //没有组进行判断
56             paramFlag= iConditionOperation.operation(paramA, paramB);
57             /**
58              * 没有经过组判断 返回结果
59              * 递归判断返回的结果
60              */
61             return paramFlag;
62         }
63 
64     }
65 }
View Code
递归判断执行对象 能够决定是否执行当前的指令,设置的是Instruction当中的isCondition属性,true为执行,false为否
posted @ 2017-08-27 22:39  BinarySheep  阅读(326)  评论(0编辑  收藏  举报