private static void list(PathChildrenCache cache) {
   if (cache.getCurrentData().size() == 0) {
     System.out.println("* empty *");
   } else {
     for (ChildData data : cache.getCurrentData()) {
       System.out.println(data.getPath() + " = " + new String(data.getData()));
     }
   }
 }
 @Override
 public Object getProperty(String name) {
   String fullPath = this.getContext() + "/" + name.replace(".", "/");
   byte[] bytes = null;
   ChildData data = cache.getCurrentData(fullPath);
   if (data != null) {
     bytes = data.getData();
   }
   if (bytes == null) return null;
   return new String(bytes, Charset.forName("UTF-8"));
 }
  protected void findKeys(List<String> keys, String path) {
    log.trace("enter findKeysCached for path: " + path);
    Map<String, ChildData> children = cache.getCurrentChildren(path);

    if (children == null) return;
    for (Map.Entry<String, ChildData> entry : children.entrySet()) {
      ChildData child = entry.getValue();
      if (child.getData() == null || child.getData().length == 0) {
        findKeys(keys, child.getPath());
      } else {
        keys.add(sanitizeKey(child.getPath()));
      }
    }
    log.trace("leaving findKeysCached for path: " + path);
  }
  protected void treeCacheEvent(PathChildrenCacheEvent event) {

    ChildData childData = event.getData();
    if (childData == null) {
      return;
    }
    String path = childData.getPath();
    PathChildrenCacheEvent.Type type = event.getType();
    byte[] data = childData.getData();
    if (data == null || data.length == 0 || path == null) {
      return;
    }
    if (path.startsWith(zkPath)) {
      path = path.substring(zkPath.length());
    }

    // Lets just use the group name as the service path.
    path = Strings.splitAndTrimAsList(path, "/").get(0);

    boolean remove = false;
    switch (type) {
      case CHILD_ADDED:
      case CHILD_UPDATED:
        break;
      case CHILD_REMOVED:
        remove = true;
        break;
      default:
        return;
    }
    ServiceDTO dto = null;
    try {
      dto = mapper.readValue(data, ServiceDTO.class);
      expandPropertyResolvers(dto);
      if (remove) {
        LOG.info("Removed gateway service: " + path + ": " + new String(data, "UTF-8"));
        serviceMap.serviceRemoved(path, dto);
      } else {
        LOG.info("Updated gateway service: " + path + ": " + new String(data, "UTF-8"));
        serviceMap.serviceUpdated(path, dto);
      }
    } catch (IOException e) {
      LOG.warn("Failed to parse the JSON: " + new String(data) + ". Reason: " + e, e);
    } catch (URISyntaxException e) {
      LOG.warn("Failed to update URI for dto: " + dto + ", .Reason: " + e, e);
    }
  }
 private void dumpDirectly(final String path, final List<String> result) {
   for (String each : coordinatorRegistryCenter.getChildrenKeys(path)) {
     String zkPath = path + "/" + each;
     String zkValue = coordinatorRegistryCenter.get(zkPath);
     if (null == zkValue) {
       zkValue = "";
     }
     TreeCache treeCache = (TreeCache) coordinatorRegistryCenter.getRawCache("/" + jobName);
     ChildData treeCacheData = treeCache.getCurrentData(zkPath);
     String treeCachePath = null == treeCacheData ? "" : treeCacheData.getPath();
     String treeCacheValue = null == treeCacheData ? "" : new String(treeCacheData.getData());
     if (zkValue.equals(treeCacheValue) && zkPath.equals(treeCachePath)) {
       result.add(Joiner.on(" | ").join(zkPath, zkValue));
     } else {
       result.add(Joiner.on(" | ").join(zkPath, zkValue, treeCachePath, treeCacheValue));
     }
     dumpDirectly(zkPath, result);
   }
 }
 HostAndPort readAddressOf(String domainName) {
   ChildData data = cores.getCurrentData(pathOf(domainName));
   return (data == null) ? null : toHostAndPort(data.getData());
 }