protected abstract Predicate getPredicate();
@Override
public Object call() {
final ClientEndpoint endpoint = getEndpoint();
final MapService mapService = getService();
EntryListener<Object, Object> listener = new EntryAdapter<Object, Object>() {
@Override
public void onEntryEvent(EntryEvent<Object, Object> event) {
if (endpoint.isAlive()) {
if (!(event instanceof DataAwareEntryEvent)) {
throw new IllegalArgumentException("Expecting: DataAwareEntryEvent, Found: "
+ event.getClass().getSimpleName());
}
DataAwareEntryEvent dataAwareEntryEvent = (DataAwareEntryEvent) event;
Data key = dataAwareEntryEvent.getKeyData();
Data value = dataAwareEntryEvent.getNewValueData();
Data oldValue = dataAwareEntryEvent.getOldValueData();
PortableEntryEvent portableEntryEvent = new PortableEntryEvent(key, value, oldValue,
event.getEventType(), event.getMember().getUuid());
endpoint.sendEvent(portableEntryEvent, getCallId());
}
}
@Override
public void onMapEvent(MapEvent event) {
if (endpoint.isAlive()) {
final EntryEventType type = event.getEventType();
final String uuid = event.getMember().getUuid();
PortableEntryEvent portableEntryEvent =
new PortableEntryEvent(type, uuid, event.getNumberOfEntriesAffected());
endpoint.sendEvent(portableEntryEvent, getCallId());
}
}
};
EventFilter eventFilter;
if (getPredicate() == null) {
eventFilter = new EntryEventFilter(includeValue, key);
} else {
eventFilter = new QueryEventFilter(includeValue, key, getPredicate());
}
String registrationId = mapService.getMapServiceContext().addEventListener(listener, eventFilter, name);
endpoint.setListenerRegistration(MapService.SERVICE_NAME, name, registrationId);
return registrationId;
}