package com.xiaomi.infra.galaxy.sds.client;
import com.xiaomi.infra.galaxy.sds.thrift.BatchRequest;
import com.xiaomi.infra.galaxy.sds.thrift.BatchRequestItem;
import com.xiaomi.infra.galaxy.sds.thrift.GetRequest;
import com.xiaomi.infra.galaxy.sds.thrift.IncrementRequest;
import com.xiaomi.infra.galaxy.sds.thrift.PutRequest;
import com.xiaomi.infra.galaxy.sds.thrift.RemoveRequest;
import com.xiaomi.infra.galaxy.sds.thrift.ScanRequest;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* Copyright 2015, Xiaomi.
* All rights reserved.
* Author: linshangquan@xiaomi.com
*/
public class SdsRequestUtils {
private final static Set<String> methods;
static {
methods = new HashSet<String>();
methods.addAll(
Arrays.asList("get", "put", "increment", "remove", "scan", "batch", "putToRebuildIndex"));
}
public static String getQuery(Method method, Object[] args) {
if (methods.contains(method.getName()) && args.length == 1) {
return getQuery(method.getName(), args[0]);
} else {
return new StringBuilder("type=".length() + method.getName().length())
.append("type=")
.append(method.getName())
.toString();
}
}
private static String getTableName(Object request) {
if (request instanceof PutRequest) {
return ((PutRequest) request).getTableName();
} else if (request instanceof IncrementRequest) {
return ((IncrementRequest) request).getTableName();
} else if (request instanceof GetRequest) {
return ((GetRequest) request).getTableName();
} else if (request instanceof RemoveRequest) {
return ((RemoveRequest) request).getTableName();
} else if (request instanceof ScanRequest) {
return ((ScanRequest) request).getTableName();
} else if (request instanceof BatchRequest) {
BatchRequestItem batchRequestItem = ((BatchRequest) request).getItems().get(0);
switch (batchRequestItem.getAction()) {
case PUT:
return batchRequestItem.getRequest().getPutRequest().getTableName();
case GET:
return batchRequestItem.getRequest().getGetRequest().getTableName();
case INCREMENT:
return batchRequestItem.getRequest().getIncrementRequest().getTableName();
case REMOVE:
return batchRequestItem.getRequest().getRemoveRequest().getTableName();
default:
throw new RuntimeException("Unknown batch action " + batchRequestItem.getAction());
}
} else {
throw new RuntimeException("Unknown request type " + request.getClass().toString());
}
}
private static String getQuery(String methodName, Object request) {
return new StringBuilder().append("type=")
.append(methodName)
.append("&name=")
.append(getTableName(request)).toString();
}
}