Fix warnings/javadocs in sal-distributed-datastore
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / config / FileModuleShardConfigProvider.java
1 /*
2  * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.datastore.config;
9
10 import com.typesafe.config.Config;
11 import com.typesafe.config.ConfigFactory;
12 import com.typesafe.config.ConfigObject;
13 import java.io.File;
14 import java.util.HashMap;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.stream.Collectors;
18 import org.opendaylight.controller.cluster.access.concepts.MemberName;
19 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategyFactory;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 /**
24  * Implementation of ModuleShardConfigProvider that reads the module and shard configuration from files.
25  *
26  * @author Thomas Pantelis
27  */
28 public class FileModuleShardConfigProvider implements ModuleShardConfigProvider {
29     private static final Logger LOG = LoggerFactory.getLogger(FileModuleShardConfigProvider.class);
30
31     private final String moduleShardsConfigPath;
32     private final String modulesConfigPath;
33
34     public FileModuleShardConfigProvider(String moduleShardsConfigPath, String modulesConfigPath) {
35         this.moduleShardsConfigPath = moduleShardsConfigPath;
36         this.modulesConfigPath = modulesConfigPath;
37     }
38
39     @Override
40     public Map<String, ModuleConfig.Builder> retrieveModuleConfigs(Configuration configuration) {
41         File moduleShardsFile = new File("./configuration/initial/" + moduleShardsConfigPath);
42         File modulesFile = new File("./configuration/initial/" + modulesConfigPath);
43
44         Config moduleShardsConfig = null;
45         if (moduleShardsFile.exists()) {
46             LOG.info("module shards config file exists - reading config from it");
47             moduleShardsConfig = ConfigFactory.parseFile(moduleShardsFile);
48         } else {
49             LOG.warn("module shards configuration read from resource");
50             moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath);
51         }
52
53         Config modulesConfig = null;
54         if (modulesFile.exists()) {
55             LOG.info("modules config file exists - reading config from it");
56             modulesConfig = ConfigFactory.parseFile(modulesFile);
57         } else {
58             LOG.warn("modules configuration read from resource");
59             modulesConfig = ConfigFactory.load(modulesConfigPath);
60         }
61
62         Map<String, ModuleConfig.Builder> moduleConfigMap = readModuleShardsConfig(moduleShardsConfig);
63         readModulesConfig(modulesConfig, moduleConfigMap, configuration);
64
65         return moduleConfigMap;
66     }
67
68     private static void readModulesConfig(final Config modulesConfig, Map<String, ModuleConfig.Builder> moduleConfigMap,
69             Configuration configuration) {
70         List<? extends ConfigObject> modulesConfigObjectList = modulesConfig.getObjectList("modules");
71
72         for (ConfigObject o : modulesConfigObjectList) {
73             ConfigObjectWrapper wrapper = new ConfigObjectWrapper(o);
74
75             String moduleName = wrapper.stringValue("name");
76             ModuleConfig.Builder builder = moduleConfigMap.get(moduleName);
77             if (builder == null) {
78                 builder = ModuleConfig.builder(moduleName);
79                 moduleConfigMap.put(moduleName, builder);
80             }
81
82             builder.nameSpace(wrapper.stringValue("namespace"));
83             builder.shardStrategy(ShardStrategyFactory.newShardStrategyInstance(moduleName,
84                     wrapper.stringValue("shard-strategy"), configuration));
85         }
86     }
87
88     private static Map<String, ModuleConfig.Builder> readModuleShardsConfig(final Config moduleShardsConfig) {
89         List<? extends ConfigObject> moduleShardsConfigObjectList =
90             moduleShardsConfig.getObjectList("module-shards");
91
92         Map<String, ModuleConfig.Builder> moduleConfigMap = new HashMap<>();
93         for (ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList) {
94             String moduleName = moduleShardConfigObject.get("name").unwrapped().toString();
95             ModuleConfig.Builder builder = ModuleConfig.builder(moduleName);
96
97             List<? extends ConfigObject> shardsConfigObjectList =
98                 moduleShardConfigObject.toConfig().getObjectList("shards");
99
100             for (ConfigObject shard : shardsConfigObjectList) {
101                 String shardName = shard.get("name").unwrapped().toString();
102                 List<MemberName> replicas = shard.toConfig().getStringList("replicas").stream()
103                         .map(MemberName::forName).collect(Collectors.toList());
104                 builder.shardConfig(shardName, replicas);
105             }
106
107             moduleConfigMap.put(moduleName, builder);
108         }
109
110         return moduleConfigMap;
111     }
112
113     private static class ConfigObjectWrapper {
114
115         private final ConfigObject configObject;
116
117         ConfigObjectWrapper(final ConfigObject configObject) {
118             this.configObject = configObject;
119         }
120
121         public String stringValue(final String name) {
122             return configObject.get(name).unwrapped().toString();
123         }
124     }
125 }