package io.github.ibuildthecloud.gdapi.util;
import static io.github.ibuildthecloud.gdapi.model.Schema.Method.*;
import io.github.ibuildthecloud.gdapi.condition.Condition;
import io.github.ibuildthecloud.gdapi.condition.ConditionType;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.ObjectUtils;
public class RequestUtils {
public static boolean isBrowser(HttpServletRequest request, boolean checkAccepts) {
String accepts = request.getHeader("Accept");
String userAgent = request.getHeader("User-Agent");
if (accepts == null || !checkAccepts) {
accepts = "*/*";
}
accepts = accepts.toLowerCase();
// User agent has Mozilla and browser accepts */*
return (userAgent != null && userAgent.toLowerCase().indexOf("mozilla") != -1 && accepts.indexOf("*/*") != -1);
}
public static boolean isReadMethod(String method) {
return !isWriteMethod(method);
}
public static boolean isWriteMethod(String method) {
return POST.isMethod(method) || PUT.isMethod(method) || DELETE.isMethod(method);
}
public static boolean mayHaveBody(String method) {
return POST.isMethod(method) || PUT.isMethod(method);
}
public static String getSingularStringValue(String key, Map<String, Object> params) {
Object obj = params.get(key);
Object singleObj = makeSingular(obj);
return ObjectUtils.toString(singleObj, null);
}
public static String getConditionValue(String key, Map<Object, Object> params) {
Object value = params.get(key);
if (value == null) {
return null;
}
value = makeSingular(value);
if (value instanceof Condition) {
return ObjectUtils.toString(((Condition) value).getValue(), null);
}
return ObjectUtils.toString(value, null);
}
public static Object makeSingular(Object input) {
if (input instanceof List) {
List<?> list = (List<?>)input;
return list.size() == 0 ? null : list.get(0);
}
if (input instanceof String[]) {
String[] array = (String[])input;
return array.length == 0 ? null : array[0];
}
return input;
}
public static Object makeSingularIfCan(Object input) {
if (input instanceof List) {
List<?> list = (List<?>)input;
if (list.size() == 1)
return makeSingularIfCan(list.get(0));
if (list.size() == 0)
return null;
}
if (input instanceof String[]) {
String[] array = (String[])input;
if (array.length == 1) {
return makeSingularIfCan(array[0]);
}
if (array.length == 0) {
return null;
}
return Arrays.asList(array);
}
if (input instanceof Condition && ((Condition)input).getConditionType() == ConditionType.EQ) {
return makeSingularIfCan(((Condition)input).getValue());
}
return input;
}
public static String makeSingularStringIfCan(Object input) {
Object result = makeSingularIfCan(input);
return result == null ? null : result.toString();
}
public static boolean hasBeenHandled(ApiRequest request) {
if (request.isCommitted() || request.getResponseObject() != null) {
return true;
}
return false;
}
public static List<?> toList(Object obj) {
if (obj instanceof List) {
return (List<?>)obj;
} else if (obj == null) {
return Collections.emptyList();
} else {
return Arrays.asList(obj);
}
}
@SuppressWarnings("unchecked")
public static <K, V> Map<K, V> toMap(Object obj) {
if (obj == null) {
return new HashMap<K, V>();
}
if (obj instanceof Map) {
return (Map<K, V>)obj;
} else {
return new HashMap<K, V>();
}
}
}