/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.datastore.infinispan.persistencestrategy.kind.impl; import java.util.Map; import org.hibernate.ogm.datastore.infinispan.persistencestrategy.impl.KeyProvider; import org.hibernate.ogm.model.key.spi.AssociationKey; import org.hibernate.ogm.model.key.spi.EntityKey; import org.hibernate.ogm.model.key.spi.EntityKeyMetadata; import org.hibernate.ogm.model.key.spi.IdSourceKey; import org.infinispan.distexec.mapreduce.Collector; import org.infinispan.distexec.mapreduce.Mapper; /** * Key provider which stores all keys as is in ISPN. * * @author Emmanuel Bernard <emmanuel@hibernate.org> */ public class OnePerKindKeyProvider implements KeyProvider<EntityKey, AssociationKey, IdSourceKey> { @Override public EntityKey getEntityCacheKey(EntityKey key) { return key; } @Override public AssociationKey getAssociationCacheKey(AssociationKey key) { return key; } @Override public IdSourceKey getIdSourceCacheKey(IdSourceKey key) { return key; } @Override public TupleMapper getMapper(EntityKeyMetadata... entityKeyMetadatas) { return new TupleMapper( entityKeyMetadatas ); } private static class TupleMapper implements Mapper<EntityKey, Map<String, Object>, EntityKey, Map<String, Object>> { private final EntityKeyMetadata[] entityKeyMetadatas; public TupleMapper(EntityKeyMetadata... entityKeyMetadatas) { this.entityKeyMetadatas = entityKeyMetadatas; } @Override public void map(EntityKey key, Map<String, Object> value, Collector<EntityKey, Map<String, Object>> collector) { for ( EntityKeyMetadata entityKeyMetadata : entityKeyMetadatas ) { if ( key.getTable().equals( entityKeyMetadata.getTable() ) ) { collector.emit( key, value ); } } } } }