Improve LocalProxyTransaction.doExists()
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / config / ModuleConfig.java
index b54946774d2a4bc7cd266bf93370a91f5ccf0d77..ccd7dd66065ef32b8b824a764e6cbb061c5b5db6 100644 (file)
@@ -7,11 +7,15 @@
  */
 package org.opendaylight.controller.cluster.datastore.config;
 
-import com.google.common.collect.ImmutableSet;
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.collect.ImmutableMap;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.controller.cluster.access.concepts.MemberName;
 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
 
 /**
@@ -19,63 +23,93 @@ import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy
  *
  * @author Thomas Pantelis
  */
-public class ModuleConfig {
+public final class ModuleConfig {
     private final String name;
-    private String nameSpace;
-    private ShardStrategy shardStrategy;
-    private final Map<String, ShardConfig> shardConfigs = new HashMap<>();
-
-    public ModuleConfig(final String name) {
-        this.name = name;
-    }
+    private final String namespace;
+    private final ShardStrategy shardStrategy;
+    private final Map<String, ShardConfig> shardConfigs;
 
-    public ModuleConfig(ModuleConfig moduleConfig) {
-        this.name = moduleConfig.getName();
-        this.nameSpace = moduleConfig.getNameSpace();
-        this.shardStrategy = moduleConfig.getShardStrategy();
-        for (ShardConfig shardConfig : moduleConfig.getShardConfigs()) {
-            shardConfigs.put(shardConfig.getName(), new ShardConfig(shardConfig.getName(),
-                ImmutableSet.copyOf(shardConfig.getReplicas())));
-        }
+    ModuleConfig(final String name, final String namespace, final ShardStrategy shardStrategy,
+            final Map<String, ShardConfig> shardConfigs) {
+        this.name = requireNonNull(name);
+        this.namespace = namespace;
+        this.shardStrategy = shardStrategy;
+        this.shardConfigs = shardConfigs;
     }
 
-    public String getName() {
+    public @NonNull String getName() {
         return name;
     }
 
-    public String getNameSpace() {
-        return nameSpace;
+    public @Nullable String getNamespace() {
+        return namespace;
     }
 
-    public ShardStrategy getShardStrategy() {
+    public @Nullable ShardStrategy getShardStrategy() {
         return shardStrategy;
     }
 
-    public ShardConfig getShardConfig(String name) {
-        return shardConfigs.get(name);
+    public @Nullable ShardConfig getShardConfig(final String forName) {
+        return shardConfigs.get(forName);
     }
 
-    public Collection<ShardConfig> getShardConfigs() {
+    public @NonNull Collection<ShardConfig> getShardConfigs() {
         return shardConfigs.values();
     }
 
-    public Collection<String> getShardNames() {
+    public @NonNull Collection<String> getShardNames() {
         return shardConfigs.keySet();
     }
 
-    public void addShardConfig(String name, Set<String> replicas) {
-        shardConfigs.put(name, new ShardConfig(name, replicas));
+    public static Builder builder(final String name) {
+        return new Builder(name);
     }
 
-    public void setNameSpace(String nameSpace) {
-        this.nameSpace = nameSpace;
+    public static Builder builder(final ModuleConfig moduleConfig) {
+        return new Builder(moduleConfig);
     }
 
-    public void setShardStrategy(ShardStrategy shardStrategy) {
-        this.shardStrategy = shardStrategy;
-    }
+    public static final class Builder {
+        private String name;
+        private String nameSpace;
+        private ShardStrategy shardStrategy;
+        private final Map<String, ShardConfig> shardConfigs = new HashMap<>();
+
+        Builder(final String name) {
+            this.name = name;
+        }
+
+        private Builder(final 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(final String newName) {
+            this.name = newName;
+            return this;
+        }
+
+        public Builder nameSpace(final String newNameSpace) {
+            this.nameSpace = newNameSpace;
+            return this;
+        }
 
-    public ShardConfig removeShardConfig(String name) {
-        return shardConfigs.remove(name);
+        public Builder shardStrategy(final ShardStrategy newShardStrategy) {
+            this.shardStrategy = newShardStrategy;
+            return this;
+        }
+
+        public Builder shardConfig(final String shardName, final Collection<MemberName> replicas) {
+            shardConfigs.put(shardName, new ShardConfig(shardName, replicas));
+            return this;
+        }
+
+        public ModuleConfig build() {
+            return new ModuleConfig(name, nameSpace, shardStrategy, ImmutableMap.copyOf(shardConfigs));
+        }
     }
 }