package com.hundsun.jresplus.web.view;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.hundsun.jresplus.exception.BaseException;
/**
* 简单模型转换器,将springmvc返回的模型数据封装到参考模型对象中(支持返回码、错误号、错误信息)
* @author XIE (xjj@hundsun.com)
*
*/
public class SimpleModelConverter implements ModelConverter {
private String successRetCode = "0";
private String failRetCode = "-1";
public Model convert(Map model) {
if (model == null) {
return null;
}
Model mod = new Model();
mod.setRetCode(successRetCode);
Set<Entry> entrySet = model.entrySet();
int size = model.size();
if (size > 1) {
mod.setData(new HashMap());
}
for (Entry entry : entrySet) {
Object value = entry.getValue();
Object key = entry.getKey();
if (value instanceof Exception) {
Exception ex = (Exception) value;
processException(mod, ex);
continue;
}
if (size > 1) {
Map dataMap = (Map) mod.getData();
dataMap.put(key, value);
continue;
}
mod.setData(value);
}
return mod;
}
public Model convert(Object model) {
if (model == null) {
return null;
}
Model mod = new Model();
if (model instanceof Exception) {
processException(mod, (Exception) model);
} else {
mod.setRetCode(successRetCode);
mod.setData(model);
}
return mod;
}
private void processException(Model mod, Exception ex) {
mod.setErrInfo(ex.getMessage());
mod.setRetCode(this.failRetCode);
if (ex instanceof BaseException) {
BaseException bex = (BaseException) ex;
mod.setErrCode(bex.getErrorCode());
mod.setErrInfo(bex.getErrorMessage());
}
}
public String getSuccessRetCode() {
return successRetCode;
}
public void setSuccessRetCode(String successRetCode) {
this.successRetCode = successRetCode;
}
public String getFailRetCode() {
return failRetCode;
}
public void setFailRetCode(String failRetCode) {
this.failRetCode = failRetCode;
}
}