package voldemort.store;
import java.util.HashMap;
import java.util.List;
import voldemort.client.RoutingTier;
import voldemort.serialization.SerializerDefinition;
import voldemort.store.slop.strategy.HintedHandoffStrategyType;
import voldemort.utils.Utils;
/**
* A simple builder class to avoid having 10k constructor parameters in store
* definitions
*
*
*/
public class StoreDefinitionBuilder {
private String name = null;
private String type = null;
private String description = null;
private SerializerDefinition keySerializer = null;
private SerializerDefinition valueSerializer = null;
private SerializerDefinition transformsSerializer = null;
private RoutingTier routingPolicy = null;
private int replicationFactor = -1;
private Integer preferredWrites = null;
private int requiredWrites = -1;
private Integer preferredReads = null;
private int requiredReads = -1;
private Integer retentionPeriodDays = null;
private Integer retentionScanThrottleRate = null;
private Integer retentionFrequencyDays = null;
private String routingStrategyType = null;
private String viewOf = null;
private HashMap<Integer, Integer> zoneReplicationFactor = null;
private Integer zoneCountReads;
private Integer zoneCountWrites;
private String view = null;
private String serializerFactory = null;
private HintedHandoffStrategyType hintedHandoffStrategy = null;
private Integer hintPrefListSize = null;
private List<String> owners = null;
private long memoryFootprintMB = 0;
public String getName() {
return Utils.notNull(name);
}
public StoreDefinitionBuilder setName(String name) {
this.name = Utils.notNull(name);
return this;
}
public String getType() {
return Utils.notNull(type);
}
public StoreDefinitionBuilder setType(String type) {
this.type = Utils.notNull(type);
return this;
}
public String getDescription() {
return description;
}
public StoreDefinitionBuilder setDescription(String description) {
this.description = description;
return this;
}
public SerializerDefinition getKeySerializer() {
return Utils.notNull(keySerializer);
}
public StoreDefinitionBuilder setKeySerializer(SerializerDefinition keySerializer) {
this.keySerializer = Utils.notNull(keySerializer);
return this;
}
public SerializerDefinition getValueSerializer() {
return Utils.notNull(valueSerializer);
}
public StoreDefinitionBuilder setValueSerializer(SerializerDefinition valueSerializer) {
this.valueSerializer = Utils.notNull(valueSerializer);
return this;
}
public SerializerDefinition getTransformsSerializer() {
return this.transformsSerializer;
}
public StoreDefinitionBuilder setTransformsSerializer(SerializerDefinition transformsSerializer) {
this.transformsSerializer = transformsSerializer;
return this;
}
public RoutingTier getRoutingPolicy() {
return Utils.notNull(routingPolicy);
}
public StoreDefinitionBuilder setRoutingPolicy(RoutingTier routingPolicy) {
this.routingPolicy = Utils.notNull(routingPolicy);
return this;
}
public int getReplicationFactor() {
return Utils.inRange(replicationFactor, 1, Integer.MAX_VALUE);
}
public StoreDefinitionBuilder setReplicationFactor(int replicationFactor) {
this.replicationFactor = Utils.inRange(replicationFactor, 1, Integer.MAX_VALUE);
return this;
}
public boolean hasPreferredWrites() {
return preferredWrites != null;
}
public Integer getPreferredWrites() {
return preferredWrites;
}
public StoreDefinitionBuilder setPreferredWrites(Integer preferredWrites) {
this.preferredWrites = preferredWrites;
return this;
}
public int getRequiredWrites() {
return requiredWrites;
}
public StoreDefinitionBuilder setRequiredWrites(int requiredWrites) {
this.requiredWrites = Utils.inRange(requiredWrites, 0, Integer.MAX_VALUE);
return this;
}
public boolean hasPreferredReads() {
return preferredReads != null;
}
public Integer getPreferredReads() {
return preferredReads;
}
public StoreDefinitionBuilder setPreferredReads(Integer preferredReads) {
this.preferredReads = preferredReads;
return this;
}
public int getRequiredReads() {
return requiredReads;
}
public StoreDefinitionBuilder setRequiredReads(int requiredReads) {
this.requiredReads = Utils.inRange(requiredReads, 0, Integer.MAX_VALUE);
return this;
}
public Integer getRetentionPeriodDays() {
return retentionPeriodDays;
}
public StoreDefinitionBuilder setRetentionPeriodDays(Integer retentionPeriodDays) {
this.retentionPeriodDays = retentionPeriodDays;
return this;
}
public boolean hasRetentionScanThrottleRate() {
return this.retentionScanThrottleRate != null;
}
public Integer getRetentionScanThrottleRate() {
return retentionScanThrottleRate;
}
public StoreDefinitionBuilder setRetentionScanThrottleRate(Integer retentionScanThrottleRate) {
this.retentionScanThrottleRate = retentionScanThrottleRate;
return this;
}
public Integer getRetentionFrequencyDays() {
return this.retentionFrequencyDays;
}
public StoreDefinitionBuilder setRetentionFrequencyDays(Integer retentionFreqDays) {
this.retentionFrequencyDays = retentionFreqDays;
return this;
}
public String getRoutingStrategyType() {
return routingStrategyType;
}
public StoreDefinitionBuilder setRoutingStrategyType(String routingStrategyType) {
this.routingStrategyType = Utils.notNull(routingStrategyType);
return this;
}
public boolean isView() {
return viewOf != null;
}
public String getViewOf() {
return viewOf;
}
public StoreDefinitionBuilder setViewOf(String viewOf) {
this.viewOf = Utils.notNull(viewOf);
return this;
}
public String getView() {
return view;
}
public StoreDefinitionBuilder setView(String valueTransformation) {
this.view = valueTransformation;
return this;
}
public String getSerializerFactory() {
return this.serializerFactory;
}
public StoreDefinitionBuilder setSerializerFactory(String factory) {
this.serializerFactory = factory;
return this;
}
public HashMap<Integer, Integer> getZoneReplicationFactor() {
return zoneReplicationFactor;
}
public StoreDefinitionBuilder setZoneReplicationFactor(HashMap<Integer, Integer> zoneReplicationFactor) {
this.zoneReplicationFactor = zoneReplicationFactor;
return this;
}
public Integer getZoneCountReads() {
return zoneCountReads;
}
public StoreDefinitionBuilder setZoneCountReads(Integer zoneCountReads) {
this.zoneCountReads = zoneCountReads;
return this;
}
public Integer getZoneCountWrites() {
return zoneCountWrites;
}
public StoreDefinitionBuilder setZoneCountWrites(Integer zoneCountWrites) {
this.zoneCountWrites = zoneCountWrites;
return this;
}
public HintedHandoffStrategyType getHintedHandoffStrategy() {
return hintedHandoffStrategy;
}
public StoreDefinitionBuilder setHintedHandoffStrategy(HintedHandoffStrategyType hintedHandoffStrategy) {
this.hintedHandoffStrategy = hintedHandoffStrategy;
return this;
}
public Integer getHintPrefListSize() {
return hintPrefListSize;
}
public StoreDefinitionBuilder setHintPrefListSize(Integer hintPrefListSize) {
this.hintPrefListSize = hintPrefListSize;
return this;
}
public List<String> getOwners() {
return owners;
}
public StoreDefinitionBuilder setOwners(List<String> owners) {
this.owners = owners;
return this;
}
public long getMemoryFootprintMB() {
return memoryFootprintMB;
}
public StoreDefinitionBuilder setMemoryFootprintMB(long memoryFootprintMB) {
this.memoryFootprintMB = memoryFootprintMB;
return this;
}
public StoreDefinition build() {
StoreDefinition storeDef = new StoreDefinition(this.getName(),
this.getType(),
this.getDescription(),
this.getKeySerializer(),
this.getValueSerializer(),
this.getTransformsSerializer(),
this.getRoutingPolicy(),
this.getRoutingStrategyType(),
this.getReplicationFactor(),
this.getPreferredReads(),
this.getRequiredReads(),
this.getPreferredWrites(),
this.getRequiredWrites(),
this.getViewOf(),
this.getView(),
this.getZoneReplicationFactor(),
this.getZoneCountReads(),
this.getZoneCountWrites(),
this.getRetentionPeriodDays(),
this.getRetentionScanThrottleRate(),
this.getRetentionFrequencyDays(),
this.getSerializerFactory(),
this.getHintedHandoffStrategy(),
this.getHintPrefListSize(),
this.getOwners(),
this.getMemoryFootprintMB());
storeDef.checkParameterLegality();
return storeDef;
}
}