Fix the issue that operator can not be deserialized #249

This commit is contained in:
Francis Dong
2021-07-19 15:32:51 +08:00
committed by dxfeng10
parent 9c9cd323dc
commit fce76c3c83
4 changed files with 60 additions and 49 deletions

View File

@@ -25,9 +25,9 @@ package we.fizz.component;
*/
public enum OperatorEnum {
EQ("eq"), NE("ne"), GT("gt"), GE("ge"), LT("lt"), LE("le"), CONTAINS("contains"), NOT_CONTAIN("notContain"), CONTAINS_ANY("containsAny"),
IS_NULL("isNull"), IS_NOT_NULL("isNotNull"), IS_BLANK("isBlank"), IS_NOT_BLANK("isNotBlank"), IS_EMPTY("isEmpty"),
IS_NOT_EMPTY("isNotEmpty");
EQ("eq"), NE("ne"), GT("gt"), GE("ge"), LT("lt"), LE("le"), CONTAINS("contains"), NOTCONTAIN("notContain"), CONTAINSANY("containsAny"),
ISNULL("isNull"), ISNOTNULL("isNotNull"), ISBLANK("isBlank"), ISNOTBLANK("isNotBlank"), ISEMPTY("isEmpty"),
ISNOTEMPTY("isNotEmpty");
private String code;

View File

@@ -28,6 +28,7 @@ import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import we.fizz.component.ComponentTypeEnum;
import we.fizz.component.IComponent;
import we.fizz.component.OperatorEnum;
@@ -43,7 +44,6 @@ import we.fizz.input.PathMapping;
*
*/
@Data
@AllArgsConstructor
public class Condition implements IComponent {
private static final String type = ComponentTypeEnum.CONDITION.getCode();
@@ -56,6 +56,13 @@ public class Condition implements IComponent {
private ConditionValue value2;
public Condition(String desc, ConditionValue value1, OperatorEnum operator, ConditionValue value2) {
this.desc = desc;
this.value1 = value1;
this.operator = operator;
this.value2 = value2;
}
@Override
public ComponentTypeEnum getType() {
return ComponentTypeEnum.getEnumByCode(type);
@@ -141,7 +148,7 @@ public class Condition implements IComponent {
throw new FizzRuntimeException("value2 can not be a collection");
}
break;
case NOT_CONTAIN:
case NOTCONTAIN:
if (v1 == null) {
rs = true;
break;
@@ -161,7 +168,7 @@ public class Condition implements IComponent {
throw new FizzRuntimeException("value2 can not be a collection");
}
break;
case CONTAINS_ANY:
case CONTAINSANY:
if (v1 == null || v2 == null) {
rs = false;
break;
@@ -176,23 +183,23 @@ public class Condition implements IComponent {
throw new FizzRuntimeException("value2 must be a collection");
}
break;
case IS_NULL:
case ISNULL:
rs = v1 == null;
break;
case IS_NOT_NULL:
case ISNOTNULL:
rs = v1 != null;
break;
case IS_BLANK:
case ISBLANK:
rs = v1 == null || StringUtils.isBlank(v1.toString());
break;
case IS_NOT_BLANK:
case ISNOTBLANK:
rs = v1 != null && StringUtils.isNotBlank(v1.toString());
break;
case IS_EMPTY:
case ISEMPTY:
rs = v1 == null || (v1 instanceof Collection && ((Collection) v1).isEmpty())
|| (v1 instanceof Map && ((Map) v1).isEmpty());
break;
case IS_NOT_EMPTY:
case ISNOTEMPTY:
if (v1 != null) {
if (v1 instanceof Collection) {
rs = !((Collection) v1).isEmpty();

View File

@@ -21,6 +21,7 @@ import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.noear.snack.ONode;
import we.constants.CommonConstants;
@@ -304,6 +305,9 @@ public class PathMapping {
* @return
*/
public static Object getValueByPath(ONode ctxNode, String path) {
if (StringUtils.isBlank(path)) {
return null;
}
String p = path;
String defaultValue = null;
if (path.indexOf("|") != -1) {

View File

@@ -158,17 +158,17 @@ class ConditionTests {
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.CONTAINS, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.FIXED,
FixedDataTypeEnum.STRING, "2", OperatorEnum.NOT_CONTAIN, FALSE });
FixedDataTypeEnum.STRING, "2", OperatorEnum.NOTCONTAIN, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_1", OperatorEnum.NOT_CONTAIN, FALSE });
RefDataTypeEnum.STRING, "data.m.string_1", OperatorEnum.NOTCONTAIN, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.NOT_CONTAIN, TRUE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.NOTCONTAIN, TRUE });
// collection contains any
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.REF,
RefDataTypeEnum.ARRAY, "data.list2", OperatorEnum.CONTAINS_ANY, TRUE });
RefDataTypeEnum.ARRAY, "data.list2", OperatorEnum.CONTAINSANY, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.REF,
RefDataTypeEnum.ARRAY, "data.intList", OperatorEnum.CONTAINS_ANY, FALSE });
RefDataTypeEnum.ARRAY, "data.intList", OperatorEnum.CONTAINSANY, FALSE });
// Collection<int>
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.intList", ValueTypeEnum.FIXED,
@@ -181,13 +181,13 @@ class ConditionTests {
RefDataTypeEnum.INT, 9, OperatorEnum.CONTAINS, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.intList", ValueTypeEnum.FIXED,
FixedDataTypeEnum.STRING, "2", OperatorEnum.NOT_CONTAIN, TRUE });
FixedDataTypeEnum.STRING, "2", OperatorEnum.NOTCONTAIN, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.intList", ValueTypeEnum.REF,
RefDataTypeEnum.INT, "data.m.int", OperatorEnum.NOT_CONTAIN, FALSE });
RefDataTypeEnum.INT, "data.m.int", OperatorEnum.NOTCONTAIN, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.intList", ValueTypeEnum.FIXED,
RefDataTypeEnum.INT, 2, OperatorEnum.NOT_CONTAIN, FALSE });
RefDataTypeEnum.INT, 2, OperatorEnum.NOTCONTAIN, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.intList", ValueTypeEnum.FIXED,
RefDataTypeEnum.INT, 9, OperatorEnum.NOT_CONTAIN, TRUE });
RefDataTypeEnum.INT, 9, OperatorEnum.NOTCONTAIN, TRUE });
// Collection<Float>
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.floatList",
@@ -235,71 +235,71 @@ class ConditionTests {
// Is null
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NULL, TRUE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNULL, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8",
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NULL, FALSE });
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNULL, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", null, null, null,
OperatorEnum.IS_NULL, TRUE });
OperatorEnum.ISNULL, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", null, null, null,
OperatorEnum.IS_NULL, FALSE });
OperatorEnum.ISNULL, FALSE });
// Is not null
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NOT_NULL, FALSE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNOTNULL, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8",
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NOT_NULL, TRUE });
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNOTNULL, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", null, null, null,
OperatorEnum.IS_NOT_NULL, FALSE });
OperatorEnum.ISNOTNULL, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", null, null, null,
OperatorEnum.IS_NOT_NULL, TRUE });
OperatorEnum.ISNOTNULL, TRUE });
// Is Blank
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_BLANK, TRUE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISBLANK, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8",
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_BLANK, FALSE });
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISBLANK, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", null, null, null,
OperatorEnum.IS_BLANK, TRUE });
OperatorEnum.ISBLANK, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", null, null, null,
OperatorEnum.IS_BLANK, FALSE });
OperatorEnum.ISBLANK, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_blank", null, null,
null, OperatorEnum.IS_BLANK, TRUE });
null, OperatorEnum.ISBLANK, TRUE });
// Is not Blank
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NOT_BLANK, FALSE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNOTBLANK, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8",
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NOT_BLANK, TRUE });
ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNOTBLANK, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", null, null, null,
OperatorEnum.IS_NOT_BLANK, FALSE });
OperatorEnum.ISNOTBLANK, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_8", null, null, null,
OperatorEnum.IS_NOT_BLANK, TRUE });
OperatorEnum.ISNOTBLANK, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.STRING, "data.m.string_blank", null, null,
null, OperatorEnum.IS_NOT_BLANK, FALSE });
null, OperatorEnum.ISNOTBLANK, FALSE });
// Is empty
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_EMPTY, TRUE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISEMPTY, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_EMPTY, FALSE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISEMPTY, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", null, null, null,
OperatorEnum.IS_EMPTY, TRUE });
OperatorEnum.ISEMPTY, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", null, null, null,
OperatorEnum.IS_EMPTY, FALSE });
OperatorEnum.ISEMPTY, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.emptyList", null, null, null,
OperatorEnum.IS_EMPTY, TRUE });
OperatorEnum.ISEMPTY, TRUE });
// Is not empty
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NOT_EMPTY, FALSE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNOTEMPTY, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", ValueTypeEnum.REF,
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.IS_NOT_EMPTY, TRUE });
RefDataTypeEnum.STRING, "data.m.string_8", OperatorEnum.ISNOTEMPTY, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list11111", null, null, null,
OperatorEnum.IS_NOT_EMPTY, FALSE });
OperatorEnum.ISNOTEMPTY, FALSE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.list1", null, null, null,
OperatorEnum.IS_NOT_EMPTY, TRUE });
OperatorEnum.ISNOTEMPTY, TRUE });
this.run(ctxNode, new Object[] { ValueTypeEnum.REF, RefDataTypeEnum.ARRAY, "data.emptyList", null, null, null,
OperatorEnum.IS_NOT_EMPTY, FALSE });
OperatorEnum.ISNOTEMPTY, FALSE });
}