package com.datastax.oss.driver.internal.core.metadata.token;
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
import com.datastax.oss.driver.shaded.guava.common.base.Preconditions;
import java.util.Map;
import net.jcip.annotations.ThreadSafe;
@ThreadSafe
public class DefaultReplicationStrategyFactory implements ReplicationStrategyFactory {
private final String logPrefix;
public DefaultReplicationStrategyFactory(InternalDriverContext context) {
this.logPrefix = context.getSessionName();
}
@Override
public ReplicationStrategy newInstance(Map<String, String> replicationConfig) {
String strategyClass = replicationConfig.get("class");
Preconditions.checkNotNull(
strategyClass, "Missing replication strategy class in " + replicationConfig);
switch (strategyClass) {
case "org.apache.cassandra.locator.LocalStrategy":
return new LocalReplicationStrategy();
case "org.apache.cassandra.locator.SimpleStrategy":
return new SimpleReplicationStrategy(replicationConfig);
case "org.apache.cassandra.locator.NetworkTopologyStrategy":
return new NetworkTopologyReplicationStrategy(replicationConfig, logPrefix);
case "org.apache.cassandra.locator.EverywhereStrategy":
return new EverywhereReplicationStrategy();
default:
throw new IllegalArgumentException("Unsupported replication strategy: " + strategyClass);
}
}
}