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; } }