/**
* Dianping.com Inc.
* Copyright (c) 2003-2013 All Rights Reserved.
*/
package com.dianping.pigeon.remoting.provider.config;
import java.util.Map;
import com.dianping.pigeon.util.ThriftUtils;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import com.dianping.pigeon.config.ConfigManager;
import com.dianping.pigeon.config.ConfigManagerLoader;
import com.dianping.pigeon.remoting.common.util.Constants;
import com.dianping.pigeon.remoting.common.util.ServiceConfigUtils;
import org.springframework.aop.support.AopUtils;
public class ProviderConfig<T> {
private Class<?> serviceInterface;
private String url;
private String version;
private T service;
private ServerConfig serverConfig = new ServerConfig();
private boolean published = false;
private boolean cancelTimeout = Constants.DEFAULT_TIMEOUT_CANCEL;
private ConfigManager configManager = ConfigManagerLoader.getConfigManager();
private boolean useSharedPool = configManager.getBooleanValue(Constants.KEY_SERVICE_SHARED,
Constants.DEFAULT_SERVICE_SHARED);
private Map<String, ProviderMethodConfig> methods;
private int actives = 0;
private boolean supported;
private PoolConfig poolConfig;
public PoolConfig getPoolConfig() {
return poolConfig;
}
public void setPoolConfig(PoolConfig poolConfig) {
this.poolConfig = poolConfig;
}
public int getActives() {
return actives;
}
public void setActives(int actives) {
this.actives = actives;
}
public Map<String, ProviderMethodConfig> getMethods() {
return methods;
}
public void setMethods(Map<String, ProviderMethodConfig> methods) {
this.methods = methods;
}
public boolean isUseSharedPool() {
return useSharedPool;
}
public void setSharedPool(boolean useSharedPool) {
this.useSharedPool = useSharedPool;
}
public boolean isCancelTimeout() {
return cancelTimeout;
}
public void setCancelTimeout(boolean cancelTimeout) {
this.cancelTimeout = cancelTimeout;
}
public boolean isPublished() {
return published;
}
public void setPublished(boolean published) {
this.published = published;
}
public ServerConfig getServerConfig() {
return serverConfig;
}
public void setServerConfig(ServerConfig serverConfig) {
if (serverConfig != null) {
this.serverConfig = serverConfig;
}
}
public ProviderConfig(Class<T> serviceInterface, T service) {
if (!serviceInterface.isInstance(service)) {
throw new IllegalArgumentException("Service interface [" + serviceInterface.getName()
+ "] needs to be implemented by service [" + service + "] of class ["
+ service.getClass().getName() + "]");
}
this.setServiceInterface(serviceInterface);
this.setService(service);
supported = ThriftUtils.isSupportedThrift(serviceInterface);
}
public ProviderConfig(T service) {
this((Class<T>) ServiceConfigUtils.getServiceInterface(AopUtils.getTargetClass(service)), service);
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public Class<?> getServiceInterface() {
return serviceInterface;
}
public void setServiceInterface(Class<?> serviceInterface) {
this.serviceInterface = serviceInterface;
}
/**
* @return the url
*/
public String getUrl() {
return url;
}
/**
* @param url the url to set
*/
public void setUrl(String url) {
if (url != null) {
url = url.trim();
}
this.url = url;
}
public T getService() {
return service;
}
public void setService(T service) {
this.service = service;
}
public boolean isSupported() {
return supported;
}
public void setSupported(boolean supported) {
this.supported = supported;
}
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}