package com.xinxin.everyxday.base.jsonparser;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.apache.http.Header;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.xinxin.everyxday.base.netcode.ResultCodeUtil;
import com.xinxin.everyxday.bean.base.CommonResponseErrorBean;
import com.xinxin.everyxday.bean.base.CommonResponseHeader;
import com.xinxin.everyxday.global.Globe;
import com.xinxin.everyxday.util.TimeUtil;
public class InterfaceResultParser extends InterfaceResultParserBase {
public static CommonResponseHeader processResult(CommonResponseHeader responseHeader){
if(responseHeader != null){
responseHeader.setResultCode(ResultCodeUtil.getInstance().getCommonResult(responseHeader));
}
return responseHeader;
}
public static Gson generateDateFormatGson(){
return new GsonBuilder().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
try {
return formatter.parse(date);
} catch (ParseException e) {
System.out.println("Failed to parse Date due to:"+e);
return null;
}
}
}).create();
}
public static CommonResponseHeader parserResponseHeader(Header[] headers){
CommonResponseHeader responseHeader = new CommonResponseHeader();;
if(headers != null && headers.length > 0){
for(Header header : headers){
String headerName = header.getName();
String headerValue = header.getValue();
if(CommonResponseHeader.HEADER_RESULT_CODE.equals(headerName)){
responseHeader.setResultCode(headerValue);
}else if(CommonResponseHeader.HEADER_DATE.equals(headerName)){
responseHeader.setDate(headerValue);
long curLocalTime = System.currentTimeMillis();
long serverResponseTime = TimeUtil.convertGMTToLong(headerValue);
if(serverResponseTime != 0){//更新本地时间戳
Globe.REQUEST_TIMESTAMP = curLocalTime - serverResponseTime;
}
}else if(CommonResponseHeader.HEADER_LINK.equals(headerName)){
int urlStartIndex = headerValue.indexOf("<");
int urlEndIndex = headerValue.indexOf(">");
headerValue = headerValue.substring(urlStartIndex+1, urlEndIndex);
System.out.println("headerValue ===== " + headerValue);
responseHeader.setLink(headerValue);
}
}
}
return responseHeader;
}
public static CommonResponseErrorBean generateErrorBean(){
CommonResponseErrorBean errorBean = new CommonResponseErrorBean();
errorBean.setCode(ResultCodeUtil.BAD_REQUEST_UNKNOWN);
errorBean.setType(ResultCodeUtil.BAD_REQUEST_TYPE_UNKNOWN);
errorBean.setResource(ResultCodeUtil.BAD_REQUEST_RESOURCE_UNKNOWN);
return errorBean;
}
}