package cassandra.metadata;
import cassandra.cql.Row;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import java.util.Map;
public class KeyspaceMetadata extends MetadataEntity {
private final Metadata metadata;
private final String name;
private final boolean durableWrites;
private final String strategyClass;
private final Map<String, String> strategyOptions;
private final ReplicationStrategy replicationStrategy;
public static class Builder {
protected Metadata metadata;
protected String name;
protected boolean durableWrites;
protected String strategyClass;
protected Map<String, String> strategyOptions;
public Builder setMetadata(Metadata metadata) {
this.metadata = metadata;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setDurableWrites(boolean durableWrites) {
this.durableWrites = durableWrites;
return this;
}
public Builder setStrategyClass(String strategyClass) {
this.strategyClass = strategyClass;
return this;
}
public Builder setStrategyOptions(Map<String, String> strategyOptions) {
this.strategyOptions = strategyOptions;
return this;
}
public Builder mergeFrom(Metadata metadata, Row row) {
setMetadata(metadata);
setName(row.getString("keyspace_name"));
setDurableWrites(row.getBool("durable_writes"));
setStrategyClass(row.getString("strategy_class"));
setStrategyOptions(MetadataService.convertAsMap(row.getString("strategy_options"), String.class, String.class));
return this;
}
public Builder mergeFrom(KeyspaceMetadata keyspace) {
setMetadata(keyspace.metadata);
setName(keyspace.name);
setDurableWrites(keyspace.durableWrites);
setStrategyClass(keyspace.getStrategyClass());
setStrategyOptions(keyspace.getStrategyOptions());
return this;
}
public KeyspaceMetadata build() {
return new KeyspaceMetadata(this);
}
}
public static Builder newBuilder() {
return new Builder();
}
public KeyspaceMetadata(Builder builder) {
metadata = builder.metadata;
name = builder.name;
durableWrites = builder.durableWrites;
strategyClass = builder.strategyClass;
strategyOptions = builder.strategyOptions;
replicationStrategy = ReplicationStrategy.getReplicationStrategy(this);
}
@JsonIgnore
public Metadata getMetadata() {
return metadata;
}
@JsonIgnore
public String getCluster() {
return metadata.getClusterName();
}
@JsonProperty("keyspace_name")
public String getName() {
return name;
}
public boolean isDurableWrites() {
return durableWrites;
}
public String getStrategyClass() {
return strategyClass;
}
public Map<String, String> getStrategyOptions() {
return strategyOptions;
}
@JsonIgnore
public ReplicationStrategy getReplicationStrategy() {
return replicationStrategy;
}
@JsonIgnore
public List<TableMetadata> getTables() {
return metadata.getTables(name);
}
@JsonIgnore
public boolean hasTable(String table) {
return metadata.hasTable(name, table);
}
@JsonIgnore
public TableMetadata getTable(String table) {
return metadata.getTable(name, table);
}
}