public class DestinationFillterTest extends TestCase {
private static String expression = "(( /UniqueKey/Bizkey eq 12345 ) and (/UniqueKey/Source in ['CORP','PFD','GOVT','EQUITY','CMO','CDS'] )) or(( /FullConcepts/Concept1/Attr1 gt 2500 ) and ( /FullConcepts/Concept1/Attr2 ge 2500) and ( /FullConcepts/Concept1/Attr3 le 2500 ) ) or ( ( /FullConcepts/Concept2/Attr1 lt 2500 ) or ( /FullConcepts/Concept2/Attr2 match ^[1,2]\\d{3}[0,1]\\d[0-3]\\d$ ) and (/FullConcepts/Concept2/Attr3 eq CREDIT-INDEX )) ";
@Override
protected void setUp() throws Exception { }
public void testFillter() {
ExpressionBTree bTree = new ExpressionBTree();
BTreeNode node = bTree.build(expression, new java.util.Stack<BTreeNode>(), new BTreeNode(null));
System.out.println(node.toString());
/*cc.plural.jsonij.JSON.Object<String, Value> BTreeToJson = JsonUtils.BTreeToJson(node, null);
System.out.println(BTreeToJson.toString());*/
StringBuilder json = new StringBuilder();
JsonUtils.toJson(node, json);
System.out.println(json.toString());
}
if (bTree.isLeaf()) {
json.append(transferData(bTree.getValue()));
} else {
toJson(bTree.getLeft(), json.append("{\"left\":"));
json.append(",\"op\":").append(transferData(bTree.getValue())).append(",");
toJson(bTree.getRight(), json.append("\"right\":"));
json.append("}");
}
}
public static cc.plural.jsonij.JSON.Object<String, Value> BTreeToJson(BTreeNode bTree, cc.plural.jsonij.JSON.Object<String, Value> upperJson) {
if (upperJson == null) {
upperJson = new cc.plural.jsonij.JSON.Object<String, Value>();
}
Object value = bTree.getValue();
if (bTree.hasLeft()) {
Object leftValue = bTree.getLeft().getValue();
if (leftValue != null && ExpressionBTree.operatorSet.contains(leftValue.toString())) {
cc.plural.jsonij.JSON.Object<String, Value> leftJsonObj = new cc.plural.jsonij.JSON.Object<String, Value>();
upperJson.put("left", leftJsonObj);
BTreeToJson(bTree.getLeft(), leftJsonObj);
} else {
upperJson.put("left", changToJsonValue(leftValue));
}
}
if (value != null && ExpressionBTree.operatorSet.contains(value.toString())) {
upperJson.put("op", changToJsonValue(value));
}
if (bTree.hasRight()) {
Object rightValue = bTree.getRight().getValue();
if (rightValue != null && ExpressionBTree.operatorSet.contains(rightValue.toString())) {
cc.plural.jsonij.JSON.Object<String, Value> rightJsonObj = new cc.plural.jsonij.JSON.Object<String, Value>();
upperJson.put("right", rightJsonObj);
BTreeToJson(bTree.getRight(), rightJsonObj);
} else {
upperJson.put("right", changToJsonValue(rightValue));
}
}
return upperJson;
}
public static Value changToJsonValue(Object obj) {
if (obj == null) {
return null;
}
if (obj.toString().startsWith("[") && obj.toString().endsWith("]")) {//regular expression also contains the []
cc.plural.jsonij.JSON.Array<Value> jsonArray = new cc.plural.jsonij.JSON.Array<Value>();
for (String str : obj.toString().substring(1, obj.toString().length() - 1).split(",")) {
jsonArray.add(toJSONStrValue(str));
}
return jsonArray;
} else if (isNumeric(obj.toString())) {
return new cc.plural.jsonij.JSON.Numeric(Integer.valueOf(obj.toString()));
} else {
return toJSONStrValue(obj.toString());
}
}
public static Object transferData(Object obj) {
if (obj == null) {
return null;
}
if (obj.toString().startsWith("[") && obj.toString().endsWith("]")) {//regular expression also contains the []
return obj.toString();
} else if (isNumeric(obj.toString())) {
return obj.toString();
} else {
return "\"" + obj.toString() + "\"";
}
}
public static boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
public static Value toJSONStrValue(String value) {
return new cc.plural.jsonij.JSON.String(value);
private static String expression = "(( /UniqueKey/Bizkey eq 12345 ) and (/UniqueKey/Source in ['CORP','PFD','GOVT','EQUITY','CMO','CDS'] )) or(( /FullConcepts/Concept1/Attr1 gt 2500 ) and ( /FullConcepts/Concept1/Attr2 ge 2500) and ( /FullConcepts/Concept1/Attr3 le 2500 ) ) or ( ( /FullConcepts/Concept2/Attr1 lt 2500 ) or ( /FullConcepts/Concept2/Attr2 match ^[1,2]\\d{3}[0,1]\\d[0-3]\\d$ ) and (/FullConcepts/Concept2/Attr3 eq CREDIT-INDEX )) ";
@Override
protected void setUp() throws Exception { }
public void testFillter() {
ExpressionBTree bTree = new ExpressionBTree();
BTreeNode node = bTree.build(expression, new java.util.Stack<BTreeNode>(), new BTreeNode(null));
System.out.println(node.toString());
/*cc.plural.jsonij.JSON.Object<String, Value> BTreeToJson = JsonUtils.BTreeToJson(node, null);
System.out.println(BTreeToJson.toString());*/
StringBuilder json = new StringBuilder();
JsonUtils.toJson(node, json);
System.out.println(json.toString());
}
}
===========================================================
if (bTree.isLeaf()) {
json.append(transferData(bTree.getValue()));
} else {
toJson(bTree.getLeft(), json.append("{\"left\":"));
json.append(",\"op\":").append(transferData(bTree.getValue())).append(",");
toJson(bTree.getRight(), json.append("\"right\":"));
json.append("}");
}
}
public static cc.plural.jsonij.JSON.Object<String, Value> BTreeToJson(BTreeNode bTree, cc.plural.jsonij.JSON.Object<String, Value> upperJson) {
if (upperJson == null) {
upperJson = new cc.plural.jsonij.JSON.Object<String, Value>();
}
Object value = bTree.getValue();
if (bTree.hasLeft()) {
Object leftValue = bTree.getLeft().getValue();
if (leftValue != null && ExpressionBTree.operatorSet.contains(leftValue.toString())) {
cc.plural.jsonij.JSON.Object<String, Value> leftJsonObj = new cc.plural.jsonij.JSON.Object<String, Value>();
upperJson.put("left", leftJsonObj);
BTreeToJson(bTree.getLeft(), leftJsonObj);
} else {
upperJson.put("left", changToJsonValue(leftValue));
}
}
if (value != null && ExpressionBTree.operatorSet.contains(value.toString())) {
upperJson.put("op", changToJsonValue(value));
}
if (bTree.hasRight()) {
Object rightValue = bTree.getRight().getValue();
if (rightValue != null && ExpressionBTree.operatorSet.contains(rightValue.toString())) {
cc.plural.jsonij.JSON.Object<String, Value> rightJsonObj = new cc.plural.jsonij.JSON.Object<String, Value>();
upperJson.put("right", rightJsonObj);
BTreeToJson(bTree.getRight(), rightJsonObj);
} else {
upperJson.put("right", changToJsonValue(rightValue));
}
}
return upperJson;
}
public static Value changToJsonValue(Object obj) {
if (obj == null) {
return null;
}
if (obj.toString().startsWith("[") && obj.toString().endsWith("]")) {//regular expression also contains the []
cc.plural.jsonij.JSON.Array<Value> jsonArray = new cc.plural.jsonij.JSON.Array<Value>();
for (String str : obj.toString().substring(1, obj.toString().length() - 1).split(",")) {
jsonArray.add(toJSONStrValue(str));
}
return jsonArray;
} else if (isNumeric(obj.toString())) {
return new cc.plural.jsonij.JSON.Numeric(Integer.valueOf(obj.toString()));
} else {
return toJSONStrValue(obj.toString());
}
}
public static Object transferData(Object obj) {
if (obj == null) {
return null;
}
if (obj.toString().startsWith("[") && obj.toString().endsWith("]")) {//regular expression also contains the []
return obj.toString();
} else if (isNumeric(obj.toString())) {
return obj.toString();
} else {
return "\"" + obj.toString() + "\"";
}
}
public static boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
public static Value toJSONStrValue(String value) {
return new cc.plural.jsonij.JSON.String(value);
}
=========================================