2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore;
11 import com.typesafe.config.Config;
12 import com.typesafe.config.ConfigFactory;
13 import com.typesafe.config.ConfigObject;
15 import java.util.ArrayList;
16 import java.util.List;
18 public class ConfigurationImpl implements Configuration {
19 private final List<ModuleShard> moduleShards = new ArrayList<>();
20 private final List<Module> modules = new ArrayList<>();
23 public ConfigurationImpl(String moduleShardsConfigPath,
24 String modulesConfigPath){
25 Config moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath);
26 Config modulesConfig = ConfigFactory.load(modulesConfigPath);
28 readModuleShards(moduleShardsConfig);
30 readModules(modulesConfig);
33 public List<String> getMemberShardNames(String memberName){
35 List<String> shards = new ArrayList();
36 for(ModuleShard ms : moduleShards){
37 for(Shard s : ms.getShards()){
38 for(String m : s.getReplicas()){
39 if(memberName.equals(m)){
40 shards.add(s.getName());
50 private void readModules(Config modulesConfig) {
51 List<? extends ConfigObject> modulesConfigObjectList =
52 modulesConfig.getObjectList("modules");
54 for(ConfigObject o : modulesConfigObjectList){
55 ConfigObjectWrapper w = new ConfigObjectWrapper(o);
56 modules.add(new Module(w.stringValue("name"), w.stringValue(
57 "namespace"), w.stringValue("sharding-strategy")));
61 private void readModuleShards(Config moduleShardsConfig) {
62 List<? extends ConfigObject> moduleShardsConfigObjectList =
63 moduleShardsConfig.getObjectList("module-shards");
65 for(ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList){
67 String moduleName = moduleShardConfigObject.get("name").unwrapped().toString();
69 List<? extends ConfigObject> shardsConfigObjectList =
70 moduleShardConfigObject.toConfig().getObjectList("shards");
72 List<Shard> shards = new ArrayList<>();
74 for(ConfigObject shard : shardsConfigObjectList){
75 String shardName = shard.get("name").unwrapped().toString();
76 List<String> replicas = shard.toConfig().getStringList("replicas");
77 shards.add(new Shard(shardName, replicas));
80 this.moduleShards.add(new ModuleShard(moduleName, shards));
85 public static class ModuleShard {
86 private final String moduleName;
87 private final List<Shard> shards;
89 public ModuleShard(String moduleName, List<Shard> shards) {
90 this.moduleName = moduleName;
94 public String getModuleName() {
98 public List<Shard> getShards() {
103 public static class Shard {
104 private final String name;
105 private final List<String> replicas;
107 Shard(String name, List<String> replicas) {
109 this.replicas = replicas;
112 public String getName() {
116 public List<String> getReplicas() {
121 public static class Module {
123 private final String name;
124 private final String nameSpace;
125 private final String shardingStrategy;
127 Module(String name, String nameSpace, String shardingStrategy) {
129 this.nameSpace = nameSpace;
130 this.shardingStrategy = shardingStrategy;
133 public String getName() {
137 public String getNameSpace() {
141 public String getShardingStrategy() {
142 return shardingStrategy;
147 private static class ConfigObjectWrapper{
149 private final ConfigObject configObject;
151 ConfigObjectWrapper(ConfigObject configObject){
152 this.configObject = configObject;
155 public String stringValue(String name){
156 return configObject.get(name).unwrapped().toString();