package org.infinispan.jcache.embedded; import javax.cache.configuration.CompleteConfiguration; import javax.cache.configuration.Configuration; import javax.cache.configuration.Factory; import javax.cache.configuration.MutableConfiguration; import javax.cache.integration.CacheLoader; import javax.cache.integration.CacheWriter; import org.infinispan.configuration.cache.ConfigurationBuilder; /** * ConfigurationAdapter takes {@link javax.cache.configuration.Configuration} and creates * equivalent instance of {@link org.infinispan.configuration.cache.Configuration} * * @author Vladimir Blagojevic * @author Galder ZamarreƱo * @since 5.3 */ public class ConfigurationAdapter<K, V> { private MutableConfiguration<K, V> c; private ConfigurationAdapter(MutableConfiguration<K, V> configuration) { this.c = configuration; } public MutableConfiguration<K, V> getConfiguration() { return c; } public org.infinispan.configuration.cache.Configuration build() { ConfigurationBuilder cb = new ConfigurationBuilder(); if (c.isStoreByValue()) cb.storeAsBinary().enable(); Factory<CacheLoader<K,V>> cacheLoaderFactory = c.getCacheLoaderFactory(); if (cacheLoaderFactory != null) { // User-defined cache loader will be plugged once cache has started cb.persistence().addStore(JStoreAdapterConfigurationBuilder.class); } Factory<CacheWriter<? super K, ? super V>> cacheWriterFactory = c.getCacheWriterFactory(); if (cacheWriterFactory != null) { // User-defined cache writer will be plugged once cache has started cb.persistence().addStore(JCacheWriterAdapterConfigurationBuilder.class); } if (c.isStatisticsEnabled()) cb.jmxStatistics().enable(); return cb.build(); } public static <K, V> ConfigurationAdapter<K, V> create(Configuration<K, V> c) { // A configuration copy as required by the spec if (c instanceof CompleteConfiguration) { return new ConfigurationAdapter<K, V>( new MutableConfiguration<K, V>((CompleteConfiguration<K, V>) c)); } else { //support use of Basic Configuration MutableConfiguration<K, V> mutableConfiguration = new MutableConfiguration<K, V>(); mutableConfiguration.setStoreByValue(c.isStoreByValue()); mutableConfiguration.setTypes(c.getKeyType(), c.getValueType()); return new ConfigurationAdapter<K, V>( new MutableConfiguration<K, V>(mutableConfiguration)); } } public static <K, V> ConfigurationAdapter<K, V> create() { return new ConfigurationAdapter<K, V>(new MutableConfiguration<K, V>()); } }