/**
*
*/
package com.impetus.kundera.loader;
import java.util.HashMap;
import java.util.Map;
import com.impetus.kundera.Client;
/**
* @author impetus
*/
public final class ClientResolver {
static Map<ClientIdentifier, Client> clientsNew = new HashMap<ClientIdentifier, Client>();
/**
*
* @param clientIdentifier
* @return
*/
public static Client getClient(ClientIdentifier clientIdentifier) {
if(clientsNew.containsKey(clientIdentifier)) {
return clientsNew.get(clientIdentifier);
}else {
return loadNewProxyInstance(clientIdentifier);
}
}
private static Client loadNewProxyInstance(ClientIdentifier clientIdentifier) {
Client proxy = null;
try {
if (clientIdentifier.getClientType().equals(ClientType.HBASE)) {
proxy = (Client) Class.forName(
"com.impetus.kundera.hbase.client.HBaseClient")
.newInstance();
} else if (clientIdentifier.getClientType().equals(
ClientType.PELOPS)) {
proxy = (Client) Class.forName(
"com.impetus.kundera.client.PelopsClient")
.newInstance();
} else if (clientIdentifier.getClientType().equals(
ClientType.THRIFT)) {
proxy = (Client) Class.forName(
"com.impetus.kundera.client.ThriftClient")
.newInstance();
} else if(clientIdentifier.getClientType().equals(ClientType.MONGODB)) {
proxy = (Client) Class.forName(
"com.impetus.kundera.client.MongoDBClient")
.newInstance();
}
} catch (InstantiationException e) {
throw new ClientResolverException(e.getMessage());
} catch (IllegalAccessException e) {
throw new ClientResolverException(e.getMessage());
} catch (ClassNotFoundException e) {
throw new ClientResolverException(e.getMessage());
}
if(proxy !=null) {
proxy.setContactNodes(clientIdentifier.getNode());
proxy.setDefaultPort(clientIdentifier.getPort());
proxy.setKeySpace(clientIdentifier.getKeyspace());
clientsNew.put(clientIdentifier, proxy);
}else{
throw new ClientResolverException("No client configured:");
}
return proxy;
}
}