001: /**
002: * Copyright 2003-2007 Luck Consulting Pty Ltd
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */package net.sf.ehcache.store;
016:
017: import org.apache.commons.logging.Log;
018: import org.apache.commons.logging.LogFactory;
019:
020: import java.io.Serializable;
021:
022: /**
023: * A typesafe enumeration of eviction policies.
024: * The policy used to evict elements from the {@link net.sf.ehcache.store.MemoryStore}.
025: * This can be one of:
026: * <ol>
027: * <li>LRU - least recently used
028: * <li>LFU - least frequently used
029: * <li>FIFO - first in first out, the oldest element by creation time
030: * </ol>
031: * The default value is LRU
032: *
033: * @author <a href="mailto:gluck@thoughtworks.com">Greg Luck</a>
034: * @version $Id: MemoryStoreEvictionPolicy.java 519 2007-07-27 07:11:45Z gregluck $
035: * @since 1.2
036: */
037: public final class MemoryStoreEvictionPolicy implements Serializable {
038:
039: /**
040: * LRU - least recently used.
041: */
042: public static final MemoryStoreEvictionPolicy LRU = new MemoryStoreEvictionPolicy(
043: "LRU");
044:
045: /**
046: * LFU - least frequently used.
047: */
048:
049: public static final MemoryStoreEvictionPolicy LFU = new MemoryStoreEvictionPolicy(
050: "LFU");
051:
052: /**
053: * FIFO - first in first out, the oldest element by creation time.
054: */
055: public static final MemoryStoreEvictionPolicy FIFO = new MemoryStoreEvictionPolicy(
056: "FIFO");
057:
058: private static final Log LOG = LogFactory
059: .getLog(MemoryStoreEvictionPolicy.class.getName());
060:
061: private final String myName;
062:
063: /**
064: * This class should not be subclassed or have instances created.
065: * @param policy
066: */
067: private MemoryStoreEvictionPolicy(String policy) {
068: myName = policy;
069: }
070:
071: /**
072: * @return a String representation of the policy
073: */
074: public String toString() {
075: return myName;
076: }
077:
078: /**
079: * Converts a string representation of the policy into a policy.
080: *
081: * @param policy either LRU, LFU or FIFO
082: * @return one of the static instances
083: */
084: public static MemoryStoreEvictionPolicy fromString(String policy) {
085: if (policy != null) {
086: if (policy.equalsIgnoreCase("LRU")) {
087: return LRU;
088: } else if (policy.equalsIgnoreCase("LFU")) {
089: return LFU;
090: } else if (policy.equalsIgnoreCase("FIFO")) {
091: return FIFO;
092: }
093: }
094:
095: if (LOG.isWarnEnabled()) {
096: LOG.warn("The memoryStoreEvictionPolicy of " + policy
097: + " cannot be resolved. The policy will be"
098: + " set to LRU");
099: }
100: return LRU;
101: }
102: }
|