public static Configurator build(Config config) {
Config configurationUpdateServer = config.getConfig("configurationUpdateServer");
if (configurationUpdateServer.getBoolean("enabled") == false) {
return new NullConfigurator();
}
CuratorFramework client = new ZooKeeperClientFactory(config.getConfig("zookeeper")).newClient();
client.start();
ZooKeeperWriteProvider zkWriter = new ZooKeeperWriteProvider(new ThriftMarshaller(), client);
ZooKeeperReadProvider zkReader = new ZooKeeperReadProvider(new ThriftUnmarshaller(), client);
Config configurationManager = config.getConfig("configurationManager");
Ruleset rules = new Ruleset(configurationManager);
rules.read(zkReader);
ZooKeeperUpdateHandler zkUpdater = new ZooKeeperUpdateHandler(zkWriter, rules);
ZooKeeperValidator zkValidator = new ZooKeeperValidator(zkReader, rules, configurationManager);
Duration writeInterval = configurationUpdateServer.getDuration("writeInterval");
InetSocketAddress serverAddress =
new InetSocketAddress(
configurationUpdateServer.getString("bindIp"),
configurationUpdateServer.getInt("bindPort"));
Configurator server =
new Configurator(zkUpdater, writeInterval, serverAddress, rules, zkValidator);
return server;
}
}