package org.nutz.mapl.impl.convert;
import java.util.ArrayList;
import java.util.List;
import org.nutz.json.Json;
import org.nutz.lang.Streams;
import org.nutz.mapl.MaplConvert;
import org.nutz.mapl.impl.MaplEach;
import org.nutz.mapl.impl.MaplRebuild;
/**
* Json过滤,
* <p>
* 根据模板将原始的JSON进行过滤, 只显示一部分. 不做转换.
* <p>
* 包括两种模式, 即, 包含, 排除模式, 默认为排除模式.
* <p>
*
* @author juqkai(juqkai@gmail.com)
*/
public class FilterConvertImpl extends MaplEach implements MaplConvert{
//处理列表
private List<String> items = new ArrayList<String>();
//类型, 取名自exclude(排除), include(包含), false时为排除, true时为包含
private boolean clude = false;
private MaplRebuild build = new MaplRebuild();
@SuppressWarnings("unchecked")
public FilterConvertImpl(String path) {
items = (List<String>) Json.fromJson(Streams.fileInr(path));
}
public FilterConvertImpl(List<String> paths){
this.items = paths;
}
/**
* 转换
* @param obj 目标对象
*/
public Object convert(Object obj){
each(obj);
return build.fetchNewobj();
}
protected void DLR(String path, Object item) {
if(clude){
if(items.contains(path)){
build.put(path, item, arrayIndex);
}
}
}
protected void LRD(String path, Object item) {
if(clude){
return;
}
int isFilter = 0;
for(String p : items){
if(
p.equals(path)
|| path.startsWith((p + "."))
|| p.startsWith(path + ".")
|| path.startsWith((p + "[]"))
|| p.startsWith(path + "[]")
){
isFilter++;
}
}
if(isFilter == 0){
build.put(path, item, arrayIndex);
}
}
public void useExcludeModel() {
this.clude = false;
}
public void useIncludeModel() {
this.clude = true;
}
}