package com.neverwinterdp.registry.zk; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import com.neverwinterdp.registry.event.NodeEvent; import com.neverwinterdp.registry.event.NodeWatcher; public class ZKNodeWatcher implements Watcher { private String basePath ; private NodeWatcher nodeWatcher; public ZKNodeWatcher(String basePath, NodeWatcher nodeWatcher) { this.basePath = basePath ; this.nodeWatcher = nodeWatcher; } public void process(WatchedEvent event) { event.getState(); NodeEvent nEvent = new NodeEvent(realPath(event.getPath()), eventType(event)) ; nodeWatcher.onEvent(nEvent); } private String realPath(String path) { if(path.length() == basePath.length()) return "/" ; return path.substring(basePath.length()) ; } private NodeEvent.Type eventType(WatchedEvent event) { if(event.getType() == Watcher.Event.EventType.NodeCreated) return NodeEvent.Type.CREATE ; else if(event.getType() == Watcher.Event.EventType.NodeDataChanged) return NodeEvent.Type.MODIFY ; else if(event.getType() == Watcher.Event.EventType.NodeDeleted) return NodeEvent.Type.DELETE ; else if(event.getType() == Watcher.Event.EventType.NodeChildrenChanged) return NodeEvent.Type.CHILDREN_CHANGED ; return NodeEvent.Type.OTHER ; } }