package edu.uw.zookeeper.data; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.Watcher.Event.KeeperState; import edu.uw.zookeeper.protocol.Message; import edu.uw.zookeeper.protocol.ProtocolResponseMessage; import edu.uw.zookeeper.protocol.proto.IWatcherEvent; import edu.uw.zookeeper.protocol.proto.OpCodeXid; public abstract class WatchEvent { public static WatchEvent fromRecord(IWatcherEvent record) { return of( EventType.fromInt(record.getType()), KeeperState.fromInt(record.getState()), (ZNodePath) ZNodeLabelVector.fromString(record.getPath())); } public static WatchEvent of(EventType eventType, KeeperState keeperState, ZNodePath path) { if (eventType == EventType.None) { return KeeperWatchEvent.of(keeperState); } else { return NodeWatchEvent.of(path, eventType); } } public Message.ServerResponse<IWatcherEvent> toMessage() { return ProtocolResponseMessage.of( OpCodeXid.NOTIFICATION.xid(), OpCodeXid.NOTIFICATION_ZXID, new IWatcherEvent( getEventType().getIntValue(), getKeeperState().getIntValue(), getPath().toString())); } public abstract KeeperState getKeeperState(); public abstract EventType getEventType(); public abstract ZNodePath getPath(); }