package com.troy.xifan.http.request;
import android.text.TextUtils;
import com.troy.xifan.config.Constants;
import java.io.File;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import okhttp3.MediaType;
import okhttp3.RequestBody;
/**
* Created by chenlongfei on 2016/12/30.
*/
public class BaseRequestParams {
private String id;
private String mode;
private String format;
private String callback;
private String page;
private String count;
public BaseRequestParams() {
setFormat(Constants.RequestParams.FORMAT_HTML);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getCallback() {
return callback;
}
public void setCallback(String callback) {
this.callback = callback;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public Map<String, String> convertToQueryMap() {
Map<String, String> params = new HashMap<>();
Class<?> cls = getClass();
while (cls != null && !isSystemCalss(cls.getName())) {
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
String key = field.getName();
String value = getFieldValue(field);
if (TextUtils.isEmpty(value)) {
continue;
}
params.put(key, value);
}
cls = cls.getSuperclass();
}
return params;
}
public Map<String, RequestBody> convertToBodyMap() {
Map<String, RequestBody> params = new HashMap<>();
Class<?> cls = getClass();
while (cls != null && !isSystemCalss(cls.getName())) {
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
String key = field.getName();
String value = getFieldValue(field);
if (TextUtils.isEmpty(value)) {
continue;
}
if (key.equals("photo")) {
File file = new File(value);
String fileKey = "photo\";filename=\"" + file.getName();
params.put(fileKey, createFilePartFormString(file));
} else {
params.put(key, createPartFromString(value));
}
}
cls = cls.getSuperclass();
}
return params;
}
private String getFieldValue(Field field) {
try {
field.setAccessible(true);
if (field.get(this) instanceof String) {
return (String) field.get(this);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
private boolean isSystemCalss(String name) {
return name.startsWith("java.") || name.startsWith("javax.") || name.startsWith("android.");
}
private RequestBody createPartFromString(String value) {
return RequestBody.create(MediaType.parse(Constants.HttpBody.MULTIPART_FORM_DATA), value);
}
private RequestBody createFilePartFormString(File file) {
return RequestBody.create(MediaType.parse(Constants.HttpBody.MULTIPART_FORM_DATA), file);
}
}