+ public static class Builder {
+ private String name;
+ private String nameSpace;
+ private ShardStrategy shardStrategy;
+ private final Map<String, ShardConfig> shardConfigs = new HashMap<>();
+
+ private Builder(String name) {
+ this.name = name;
+ }
+
+ private Builder(ModuleConfig moduleConfig) {
+ this.name = moduleConfig.getName();
+ this.nameSpace = moduleConfig.getNamespace();
+ this.shardStrategy = moduleConfig.getShardStrategy();
+ for (ShardConfig shardConfig : moduleConfig.getShardConfigs()) {
+ shardConfigs.put(shardConfig.getName(), shardConfig);
+ }
+ }
+
+ public Builder name(String newName) {
+ this.name = newName;
+ return this;
+ }
+
+ public Builder nameSpace(String newNameSpace) {
+ this.nameSpace = newNameSpace;
+ return this;
+ }
+
+ public Builder shardStrategy(ShardStrategy newShardStrategy) {
+ this.shardStrategy = newShardStrategy;
+ return this;
+ }
+
+ public Builder shardConfig(String shardName, Collection<MemberName> replicas) {
+ shardConfigs.put(shardName, new ShardConfig(shardName, replicas));
+ return this;
+ }
+
+ public ModuleConfig build() {
+ return new ModuleConfig(Preconditions.checkNotNull(name), nameSpace, shardStrategy,
+ ImmutableMap.copyOf(shardConfigs));
+ }