package cn.com.shopec.app.common;
import cn.com.shopec.core.common.PageFinder;
import cn.com.shopec.core.common.Query;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.*;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.*;
/**
* Created by guanfeng.li on 2016/7/8.
* APP接口返回实体类
*/
public class Result implements Serializable {
//状态码
private String status = "200";
//消息提示
private String msg = "";
//响应数据
private Object data;
//分页
private PageFinder page;
//json格式化
private SerializeConfig jsonConfig;
//json 特性配置
private Set<SerializerFeature> jsonFeatures;
//json 属性过滤
private Set<SerializeFilter> jsonFilter;
public Result() {
}
public Result(Object data, Query query, long rowCount) {
this.data = data;
this.page = new PageFinder<>(query.getPageNo(), query.getPageSize(), rowCount);
}
public Result(String status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public Result(Object data) {
this.data = data;
}
public Result(Object data,PageFinder page) {
this.data = data;
this.page = page;
}
/**
* Created by guanfeng.li 2016/7/19
* 特性配置
*/
public Result addSerializerFeature(SerializerFeature... serializerFeatures) {
addSerializerFeature(3, serializerFeatures);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* 特性配置
*/
public Result addSerializerFeature(int size, SerializerFeature... serializerFeatures) {
if (jsonFeatures == null) {
jsonFeatures = new HashSet<>(size);
}
for (SerializerFeature item : serializerFeatures) {
jsonFeatures.add(item);
}
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* json 属性过滤
*/
public Result addSerializeFilter(Class<?> clazz, String properties) {
addSerializeFilter(3, clazz, properties, true);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* json 属性过滤
*/
public Result addSerializeFilter(int size,SerializeFilter filter) {
if (jsonFilter == null) {
jsonFilter = new HashSet<>(size);
}
jsonFilter.add(filter);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* json 属性过滤
*/
public Result addSerializeFilter(SerializeFilter filter) {
return addSerializeFilter(3,filter);
}
/**
* Created by guanfeng.li 2016/7/19
* json 属性过滤
*/
public Result addSerializeFilter(Class<?> clazz, String properties, boolean isinclude) {
addSerializeFilter(3, clazz, properties, isinclude);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* json 属性过滤
*/
public Result addSerializeFilter(int size, Class<?> clazz, String properties, boolean isinclude) {
if (jsonFilter == null) {
jsonFilter = new HashSet<>();
}
if(clazz!=null && properties==null){
jsonFilter.add(new SimplePropertyPreFilter(clazz));
return this;
}
if(clazz==null && properties!=null){
jsonFilter.add(new SimplePropertyPreFilter(properties.split(",")));
return this;
}
if (!isinclude) {
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(clazz);
filter.getExcludes().addAll(Arrays.asList(properties.split(",")));
jsonFilter.add(filter);
} else {
jsonFilter.add(new SimplePropertyPreFilter(clazz, properties.split(",")));
}
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* 过滤分页信息
*/
public Result filterPage(){
addSerializeFilter(this.getClass(),"page",false);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* json格式化
*/
public Result putSerializeConfig(Class cls, ObjectSerializer value) {
putSerializeConfig(3, cls, value);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* json格式化
*/
public Result putSerializeConfig(int size, Class cls, ObjectSerializer value) {
if (jsonConfig == null) {
jsonConfig = new SerializeConfig(size);
}
jsonConfig.put(cls, value);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* 空字符串显示 “”
* 空集合 []
* 空Map {}
* Number 0
*/
public Result writeNullStringNumberListAsEmpty() {
addSerializerFeature(5, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty);
return this;
}
public Result writeNullStringAsEmpty() {
addSerializerFeature(2, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
return this;
}
public Result writeNullListAsEmpty() {
addSerializerFeature(2, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty);
return this;
}
public Result writeNullNumberAsZero() {
addSerializerFeature(2, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullNumberAsZero);
return this;
}
/**
* Created by guanfeng.li 2016/7/19
* 漂亮格式化
*/
public Result prettyFormat() {
addSerializerFeature(SerializerFeature.PrettyFormat);
return this;
}
//添加返回结果
public Result put(String key, Object value) {
if (data == null) {
data = new HashMap();
} else {
if (!(data instanceof Map)) {
return this;
}
}
((Map) data).put(key, value);
return this;
}
public String getStatus() {
return status;
}
public Result setStatus(String status) {
this.status = status;
return this;
}
public String getMsg() {
return msg;
}
public Result setMsg(String msg) {
this.msg = msg;
return this;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public PageFinder getPage() {
return page;
}
public Result setPage(PageFinder page) {
this.page = page;
return this;
}
public SerializeConfig getJsonConfig() {
return jsonConfig;
}
public Set<SerializerFeature> getJsonFeatures() {
return jsonFeatures;
}
public Set<SerializeFilter> getJsonFilter() {
return jsonFilter;
}
@Override
public String toString() {
if (jsonFilter != null || jsonFeatures != null || jsonConfig != null) {
addSerializeFilter(Result.class, "jsonConfig,jsonFeatures,jsonFilter", false);
}
SerializerFeature[] features = new SerializerFeature[jsonFeatures == null ? 0 : jsonFeatures.size()];
if (jsonFeatures != null) {
jsonFeatures.toArray(features);
}
SerializeFilter[] filters = new SerializeFilter[jsonFilter == null ? 0 : jsonFilter.size()];
if (jsonFilter != null) {
jsonFilter.toArray(filters);
}
String json;
if (jsonConfig != null) {
json = JSON.toJSONString(this, jsonConfig, filters, features);
} else {
json = JSON.toJSONString(this, filters, features);
}
return json;
}
}