package com.dianping.pigeon.remoting.common.util;
import java.util.List;
import org.springframework.util.CollectionUtils;
import com.dianping.pigeon.config.ConfigManagerLoader;
public class ServiceConfigUtils {
private static String interfacePackagesConfig = ConfigManagerLoader.getConfigManager().getStringValue(
"pigeon.provider.interface.packages", "com.dianping,com.dp");
private static String[] interfacePackages = new String[] { "com.dianping" };
static {
interfacePackages = (interfacePackagesConfig == null || interfacePackagesConfig.length() == 0) ? null
: Constants.COMMA_SPLIT_PATTERN.split(interfacePackagesConfig);
}
private static boolean isValidType(Class type) {
String beanClassName = type.getName();
for (String pkg : interfacePackages) {
if (beanClassName.startsWith(pkg)) {
return true;
}
}
return false;
}
public static <T> Class<?> getServiceInterface(Class<?> type) {
Class<?>[] interfaces = type.getInterfaces();
Class<?> interfaceClass = null;
if (interfaces != null && interfaces.length > 0) {
interfaceClass = type.getInterfaces()[0];
} else {
List<Class<?>> allInterfaces = org.apache.commons.lang.ClassUtils.getAllInterfaces(type);
if (!CollectionUtils.isEmpty(allInterfaces)) {
for (Class<?> i : allInterfaces) {
if (isValidType(i)) {
interfaceClass = i;
break;
}
}
if (interfaceClass == null) {
interfaceClass = allInterfaces.get(0);
}
}
if (interfaceClass == null) {
interfaceClass = type;
}
}
return interfaceClass;
}
}