/* * Copyright Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ehcache.config; /** * A resource type. * * @param <T> associated {@code ResourcePool} type * * @see ResourcePool */ public interface ResourceType<T extends ResourcePool> { /** * Gets the {@link ResourcePool} type associated with this {@code ResourceType}. * * @return the {@code ResourcePool} type associated with this type */ Class<T> getResourcePoolClass(); /** * Indicates whether this {@code ResourceType} supports persistence. * <p> * Persistence in this context means that a {@link ResourcePool} of this {@code ResourceType} can be configured * so that data stored in it will survive a JVM restart. * * @return {@code true} if it supports persistence, {@code false} otherwise */ boolean isPersistable(); /** * Indicates whether this {@code ResourceType} requires {@link org.ehcache.spi.serialization.Serializer serialization} * support. * * @return {@code true} if serializers are required, {@code false} otherwise */ boolean requiresSerialization(); /** * Indicates the level this resource sits in the tiering system. * <p> * Higher means resource is faster and less abundant, lower means resource is slower but potentially larger. * * @return the resource tier height */ int getTierHeight(); /** * An enumeration of core {@link ResourceType}s in Ehcache. */ enum Core implements ResourceType<SizedResourcePool> { /** * Heap: not persistable, {@link org.ehcache.spi.serialization.Serializer serialization} not required. */ HEAP(false, false, 10000), /** * OffHeap: not persistable, {@link org.ehcache.spi.serialization.Serializer serialization} required. */ OFFHEAP(false, true, 1000), /** * Disk: persistable, {@link org.ehcache.spi.serialization.Serializer serialization} required. */ DISK(true, true, 100); private final boolean persistable; private final boolean requiresSerialization; private final int tierHeight; Core(boolean persistable, final boolean requiresSerialization, int tierHeight) { this.persistable = persistable; this.requiresSerialization = requiresSerialization; this.tierHeight = tierHeight; } @Override public Class<SizedResourcePool> getResourcePoolClass() { return SizedResourcePool.class; } @Override public boolean isPersistable() { return persistable; } @Override public boolean requiresSerialization() { return requiresSerialization; } @Override public int getTierHeight() { return tierHeight; } @Override public String toString() { return name().toLowerCase(); } } }