|
@@ -375,14 +375,8 @@ public class RestUtil {
|
|
|
filter_rule = sql_json.toJSONString();
|
|
|
}
|
|
|
JSONObject CriteriaObject = JSON.parseObject(filter_rule).getJSONObject("Criteria");
|
|
|
- List<String> all_params = parseCriteria(CriteriaObject);
|
|
|
- JSONObject pass = new JSONObject();
|
|
|
- pass.put("pass", true);
|
|
|
- for (String one : all_params) {
|
|
|
- if (!params.containsKey(one)) {
|
|
|
- params.put(one, pass);
|
|
|
- }
|
|
|
- }
|
|
|
+ List<String> refPropertyList = new ArrayList<String>();
|
|
|
+ JSONObject CriteriaNew = parseCriteria(CriteriaObject, params, refPropertyList);
|
|
|
|
|
|
List<SceneDataValue> targetSet = new ArrayList<SceneDataValue>();
|
|
|
for (SceneDataBase sdb : valueObject.value_array) {
|
|
@@ -397,31 +391,52 @@ public class RestUtil {
|
|
|
for (String key : params.keySet()) {
|
|
|
Object value = params.get(key);
|
|
|
SceneDataValue svInner = new SceneDataValue(null, parentData, key, null, false);
|
|
|
- svInner.value_primitive = value;
|
|
|
+ if (value instanceof JSONArray) {
|
|
|
+ svInner.value_array = new ArrayList<SceneDataBase>();
|
|
|
+ JSONArray valueArray = (JSONArray) value;
|
|
|
+ for (int i = 0; i < valueArray.size(); i++) {
|
|
|
+ Object valueItem = valueArray.get(i);
|
|
|
+ SceneDataValue svInner2 = new SceneDataValue(null, null, null, null, false);
|
|
|
+ svInner2.value_primitive = valueItem;
|
|
|
+ svInner.value_array.add(svInner2);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ svInner.value_primitive = value;
|
|
|
+ }
|
|
|
parentData.put(key, svInner);
|
|
|
}
|
|
|
SceneDataValue sv = new SceneDataValue(Repository, parentData, valueObject.rel_property.propertyName, valueObject.rel_property, false);
|
|
|
JSONObject sql_json = JSON.parseObject(filter_rule);
|
|
|
+ sql_json.put("Criteria", CriteriaNew);
|
|
|
List<SceneDataValue> array = (List<SceneDataValue>) QueryUtil.QueryInner(Repository, sv, sql_json, targetSet);
|
|
|
|
|
|
return array;
|
|
|
}
|
|
|
|
|
|
- private static List<String> parseCriteria(JSONObject CriteriaObject) throws Exception {
|
|
|
- List<String> criteriaList = new ArrayList<String>();
|
|
|
+ private static JSONObject parseCriteria(JSONObject CriteriaObject, JSONObject params, List<String> criteriaList) throws Exception {
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ JSONObject pass = new JSONObject();
|
|
|
+ pass.put("pass", true);
|
|
|
Object LogicOperator = CriteriaObject.get("LogicOperator");
|
|
|
if (LogicOperator != null) {
|
|
|
String LogicOperatorString = (LogicOperator).toString();
|
|
|
+ result.put("LogicOperator", LogicOperator);
|
|
|
+ JSONArray resultCriterias = new JSONArray();
|
|
|
+ result.put("Criterias", resultCriterias);
|
|
|
if (LogicOperatorString.equals("and") || LogicOperatorString.equals("or")) {
|
|
|
JSONArray Criterias = (JSONArray) CriteriaObject.get("Criterias");
|
|
|
for (int i = 0; i < Criterias.size(); i++) {
|
|
|
JSONObject CriteriaObjectInner = (JSONObject) Criterias.get(i);
|
|
|
- List<String> criteriaInner = parseCriteria(CriteriaObjectInner);
|
|
|
+ List<String> criteriaInner = new ArrayList<String>();
|
|
|
+ JSONObject resultInner = parseCriteria(CriteriaObjectInner, params, criteriaInner);
|
|
|
+ resultCriterias.add(resultInner);
|
|
|
criteriaList.addAll(criteriaInner);
|
|
|
}
|
|
|
} else if (LogicOperatorString.equals("not")) {
|
|
|
JSONObject CriteriaObjectInner = (JSONObject) CriteriaObject.get("Criteria");
|
|
|
- List<String> criteriaInner = parseCriteria(CriteriaObjectInner);
|
|
|
+ List<String> criteriaInner = new ArrayList<String>();
|
|
|
+ JSONObject resultInner = parseCriteria(CriteriaObjectInner, params, criteriaInner);
|
|
|
+ resultCriterias.add(resultInner);
|
|
|
criteriaList.addAll(criteriaInner);
|
|
|
} else {
|
|
|
}
|
|
@@ -432,8 +447,14 @@ public class RestUtil {
|
|
|
JSONObject valueInner = (JSONObject) itemValue;
|
|
|
if (valueInner.get("ref") != null) {
|
|
|
String svInner_value_primitive = parseCriteriaRef(valueInner);
|
|
|
+ if (params.containsKey(svInner_value_primitive)) {
|
|
|
+ result.put(itemKey, itemValue);
|
|
|
+ } else {
|
|
|
+ result.put(itemKey, pass);
|
|
|
+ }
|
|
|
criteriaList.add(svInner_value_primitive);
|
|
|
} else {
|
|
|
+ JSONObject itemValueResult = new JSONObject();
|
|
|
for (String itemKeyInner : valueInner.keySet()) {
|
|
|
Object itemValueInner = valueInner.get(itemKeyInner);
|
|
|
if (itemKeyInner.equals("e") || itemKeyInner.equals("ne") || itemKeyInner.equals("gt") || itemKeyInner.equals("gte")
|
|
@@ -443,18 +464,36 @@ public class RestUtil {
|
|
|
JSONObject valueInnerInner = (JSONObject) itemValueInner;
|
|
|
if (valueInnerInner.get("ref") != null) {
|
|
|
String svInner_value_primitive = parseCriteriaRef(valueInnerInner);
|
|
|
+ if (params.containsKey(svInner_value_primitive)) {
|
|
|
+ itemValueResult.put(itemKeyInner, itemValueInner);
|
|
|
+ } else {
|
|
|
+ itemValueResult.put(itemKeyInner, pass);
|
|
|
+ }
|
|
|
criteriaList.add(svInner_value_primitive);
|
|
|
}
|
|
|
}
|
|
|
} else if (itemKeyInner.equals("in") || itemKeyInner.equals("notin")) {
|
|
|
+ if (itemValueInner instanceof JSONObject) {
|
|
|
+ JSONObject valueInnerInner = (JSONObject) itemValueInner;
|
|
|
+ if (valueInnerInner.get("ref") != null) {
|
|
|
+ String svInner_value_primitive = parseCriteriaRef(valueInnerInner);
|
|
|
+ if (params.containsKey(svInner_value_primitive)) {
|
|
|
+ itemValueResult.put(itemKeyInner, itemValueInner);
|
|
|
+ } else {
|
|
|
+ itemValueResult.put(itemKeyInner, pass);
|
|
|
+ }
|
|
|
+ criteriaList.add(svInner_value_primitive);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ result.put(itemKey, itemValueResult);
|
|
|
}
|
|
|
} else {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return criteriaList;
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
private static String parseCriteriaRef(JSONObject valueInner) throws Exception {
|