private DataAwareEntryEvent createDataAwareEntryEvent(
     EntryEventData entryEventData, Member member) {
   return new DataAwareEntryEvent(
       member,
       entryEventData.getEventType(),
       entryEventData.getMapName(),
       entryEventData.getDataKey(),
       entryEventData.getDataNewValue(),
       entryEventData.getDataOldValue(),
       entryEventData.getDataMergingValue(),
       nodeEngine.getSerializationService());
 }
  @Override
  public void dispatchEvent(Object event, Object listener) {
    if ((event instanceof EntryEventData)) {
      EntryEventData entryEventData = (EntryEventData) event;
      Member member = getMember(entryEventData);
      EntryEvent entryEvent = createDataAwareEntryEvent(entryEventData, member);
      EntryListener entryListener = (EntryListener) listener;
      switch (entryEvent.getEventType()) {
        case ADDED:
          entryListener.entryAdded(entryEvent);
          break;
        case EVICTED:
          entryListener.entryEvicted(entryEvent);
          break;
        case UPDATED:
          entryListener.entryUpdated(entryEvent);
          break;
        case REMOVED:
          entryListener.entryRemoved(entryEvent);
          break;
        default:
          throw new IllegalArgumentException(
              "event type " + entryEvent.getEventType() + " not supported");
      }

      String mapName = ((EntryEventData) event).getMapName();
      Boolean statisticsEnabled = statisticsMap.get(mapName);
      if (statisticsEnabled == null) {
        ReplicatedMapConfig mapConfig = config.findReplicatedMapConfig(mapName);
        statisticsEnabled = mapConfig.isStatisticsEnabled();
        statisticsMap.put(mapName, statisticsEnabled);
      }
      if (statisticsEnabled) {
        int partitionId =
            nodeEngine.getPartitionService().getPartitionId(entryEventData.getDataKey());
        ReplicatedRecordStore recordStore =
            replicatedMapService.getPartitionContainer(partitionId).getRecordStore(mapName);
        if (recordStore instanceof AbstractReplicatedRecordStore) {
          LocalReplicatedMapStatsImpl stats =
              ((AbstractReplicatedRecordStore) recordStore).getStats();
          stats.incrementReceivedEvents();
        }
      }
    } else if (event instanceof MapEventData) {
      MapEventData mapEventData = (MapEventData) event;
      Member member = getMember(mapEventData);
      MapEvent mapEvent =
          new MapEvent(
              mapEventData.getMapName(),
              member,
              mapEventData.getEventType(),
              mapEventData.getNumberOfEntries());
      EntryListener entryListener = (EntryListener) listener;
      EntryEventType type = EntryEventType.getByType(mapEventData.getEventType());
      switch (type) {
        case CLEAR_ALL:
          entryListener.mapCleared(mapEvent);
          break;
        default:
          throw new IllegalArgumentException("event type " + type + " not supported");
      }
    }
  }