package org.infinispan.test.fwk; import static org.infinispan.test.AbstractInfinispanTest.TIME_SERVICE; import org.infinispan.container.InternalEntryFactory; import org.infinispan.container.InternalEntryFactoryImpl; import org.infinispan.container.entries.ImmortalCacheEntry; import org.infinispan.container.entries.ImmortalCacheValue; import org.infinispan.container.entries.InternalCacheEntry; import org.infinispan.container.entries.InternalCacheValue; import org.infinispan.container.entries.MortalCacheValue; import org.infinispan.container.entries.TransientCacheValue; import org.infinispan.container.entries.TransientMortalCacheValue; import org.infinispan.metadata.EmbeddedMetadata; /** * A factory for internal entries for the test suite */ public class TestInternalCacheEntryFactory { private static final InternalEntryFactory FACTORY = new InternalEntryFactoryImpl(); static { ((InternalEntryFactoryImpl) FACTORY).injectTimeService(TIME_SERVICE); } public static InternalCacheEntry create(Object key, Object value) { return new ImmortalCacheEntry(key, value); } public static InternalCacheValue create(Object value) { return new ImmortalCacheValue(value); } public static InternalCacheEntry create(Object key, Object value, long lifespan) { return create(FACTORY, key, value, lifespan); } public static <K,V> InternalCacheEntry<K,V> create(InternalEntryFactory factory, K key, V value, long lifespan) { //noinspection unchecked return factory.create(key, value, null, lifespan, -1); } public static InternalCacheEntry create(Object key, Object value, long lifespan, long maxIdle) { return create(FACTORY, key, value, lifespan, maxIdle); } public static <K,V> InternalCacheEntry<K,V> create(InternalEntryFactory factory, K key, V value, long lifespan, long maxIdle) { //noinspection unchecked return factory.create(key, value, null, lifespan, maxIdle); } public static InternalCacheEntry create(Object key, Object value, long created, long lifespan, long lastUsed, long maxIdle) { return FACTORY.create(key, value, new EmbeddedMetadata.Builder().build(), created, lifespan, lastUsed, maxIdle); } public static InternalCacheValue createValue(Object v, long created, long lifespan, long lastUsed, long maxIdle) { if (lifespan < 0 && maxIdle < 0) return new ImmortalCacheValue(v); if (lifespan > -1 && maxIdle < 0) return new MortalCacheValue(v, created, lifespan); if (lifespan < 0 && maxIdle > -1) return new TransientCacheValue(v, maxIdle, lastUsed); return new TransientMortalCacheValue(v, created, lifespan, maxIdle, lastUsed); } }