@Override
  public void insertOrUpdateAssociation(
      AssociationKey key, Association association, AssociationContext associationContext) {
    Map<SerializableRowKey, Map<String, Object>> associationRows =
        ((SerializableMapAssociationSnapshot) association.getSnapshot()).getUnderlyingMap();

    for (AssociationOperation action : association.getOperations()) {
      switch (action.getType()) {
        case CLEAR:
          associationRows.clear();
        case PUT:
          associationRows.put(
              new SerializableRowKey(action.getKey()),
              MapHelpers.associationRowToMap(action.getValue()));
          break;
        case REMOVE:
          associationRows.remove(new SerializableRowKey(action.getKey()));
          break;
      }
    }

    final Cache<AK> associationCache = getCacheManager().getAssociationCache(key.getMetadata());
    associationCache.put(
        new Element(getKeyProvider().getAssociationCacheKey(key), associationRows));
  }
 @Override
 public void insertOrUpdateTuple(
     EntityKey key, TuplePointer tuplePointer, TupleContext tupleContext) {
   Tuple tuple = tuplePointer.getTuple();
   Map<String, Object> atomicMap = ((InfinispanTupleSnapshot) tuple.getSnapshot()).getAtomicMap();
   MapHelpers.applyTupleOpsOnMap(tuple, atomicMap);
 }
  @Override
  public void insertOrUpdateTuple(EntityKey key, Tuple tuple, TupleContext tupleContext) {
    Cache<EK> entityCache = getCacheManager().getEntityCache(key.getMetadata());

    Map<String, Object> entityRecord = ((MapTupleSnapshot) tuple.getSnapshot()).getMap();

    if (entityRecord.isEmpty()) {
      MapHelpers.applyTupleOpsOnMap(tuple, entityRecord);
      Element previous =
          entityCache.putIfAbsent(
              new Element(getKeyProvider().getEntityCacheKey(key), entityRecord));
      if (previous != null) {
        throw new TupleAlreadyExistsException(key.getMetadata(), tuple);
      }
    } else {
      MapHelpers.applyTupleOpsOnMap(tuple, entityRecord);
      entityCache.put(new Element(getKeyProvider().getEntityCacheKey(key), entityRecord));
    }
  }
 @Override
 public void insertOrUpdateAssociation(
     AssociationKey key, Association association, AssociationContext associationContext) {
   MapHelpers.updateAssociation(association);
 }