in curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java [149:193]
private void internalChildEvent(TreeCacheEvent event) {
switch (event.getType()) {
case NODE_ADDED:
case NODE_UPDATED: {
ZPath path = ZPath.parse(event.getData().getPath());
byte[] bytes = event.getData().getData();
if ((bytes != null) && (bytes.length > 0)) // otherwise it's probably just a parent node being created
{
T model = serializer.deserialize(bytes);
entries.put(path, new Entry<>(event.getData().getStat(), model));
ModeledCacheListener.Type type = (event.getType() == TreeCacheEvent.Type.NODE_ADDED)
? ModeledCacheListener.Type.NODE_ADDED
: ModeledCacheListener.Type.NODE_UPDATED;
accept(type, path, event.getData().getStat(), model);
}
break;
}
case NODE_REMOVED: {
ZPath path = ZPath.parse(event.getData().getPath());
Entry<T> entry = entries.remove(path);
T model = null;
if (entry != null) {
model = entry.model;
} else if (event.getData().getData() != null) {
model = serializer.deserialize(event.getData().getData());
}
if (model != null) {
Stat stat = (entry != null) ? entry.stat : event.getData().getStat();
accept(ModeledCacheListener.Type.NODE_REMOVED, path, stat, model);
}
break;
}
case INITIALIZED: {
listenerContainer.forEach(ModeledCacheListener::initialized);
break;
}
default:
// ignore
break;
}
}