| /* $Id: BaseDescription.java 988245 2010-08-23 18:39:35Z kwright $ */ |
| |
| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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.apache.manifoldcf.core.cachemanager; |
| |
| import org.apache.manifoldcf.core.interfaces.*; |
| import java.util.*; |
| |
| /** This is the base class for cache object descriptions. |
| * The base class sets up LRU behavior based on parameters |
| * in a configuration file, and also bases expiration on the |
| * same class picture. |
| */ |
| public abstract class BaseDescription implements ICacheDescription |
| { |
| public static final String _rcsid = "@(#)$Id: BaseDescription.java 988245 2010-08-23 18:39:35Z kwright $"; |
| |
| protected ICacheClass cacheClass = null; |
| |
| protected final static int MAX_VALUE = Integer.MAX_VALUE; |
| |
| public BaseDescription(String objectClassName) |
| { |
| if (objectClassName != null) |
| cacheClass = new LocalCacheClass(objectClassName); |
| } |
| |
| public BaseDescription(String objectClassName, IThreadContext threadContext) |
| throws ManifoldCFException |
| { |
| if (objectClassName != null) { |
| cacheClass = new LocalCacheClass(objectClassName, threadContext); |
| } |
| } |
| |
| public BaseDescription(String objectClassName, int maxLRUCount) |
| { |
| if (objectClassName != null) |
| cacheClass = new LocalCacheClass(objectClassName, maxLRUCount); |
| } |
| |
| /** Get the object class for an object. The object class is used to determine |
| * the group of objects treated in the same LRU manner. |
| * @return the newly created object's object class, or null if there is no |
| * such class, and LRU behavior is not desired. |
| */ |
| public ICacheClass getObjectClass() |
| { |
| return cacheClass; |
| } |
| |
| /** Obtain an expiration time for an object, in milliseconds since epoch. |
| * The cache manager will call this method for all objects that are being operated on, |
| * so that their expiration timestamps get properly updated to a new time. |
| * @return a time in milliseconds for the object to expire, or -1 if there is no expiration |
| * desired. |
| */ |
| public long getObjectExpirationTime(long currentTime) |
| { |
| return -1; |
| } |
| |
| /** This is a cache class implementation that gets expiration and LRU info |
| * from .ini variables. |
| */ |
| protected class LocalCacheClass implements ICacheClass |
| { |
| protected String objectClassName; |
| protected Integer maxLRUCount = null; |
| |
| public LocalCacheClass(String objectClassName, IThreadContext threadContext) |
| throws ManifoldCFException |
| { |
| this(objectClassName, new Integer(LockManagerFactory.getIntProperty(threadContext, "cache."+objectClassName+".lrusize", MAX_VALUE))); |
| } |
| |
| public LocalCacheClass(String objectClassName) |
| { |
| this(objectClassName, (Integer)null); |
| } |
| |
| public LocalCacheClass(String objectClassName, Integer maxLRUCount) |
| { |
| this.objectClassName = objectClassName; |
| this.maxLRUCount = maxLRUCount; |
| } |
| |
| /** Get the name of the object class. |
| * This determines the set of objects that are treated in the same |
| * LRU pool. |
| *@return the class name. |
| */ |
| @Override |
| public String getClassName() |
| { |
| return objectClassName; |
| } |
| |
| /** Get the maximum LRU count of the object class. |
| *@return the maximum number of the objects of the particular class |
| * allowed. |
| */ |
| @Override |
| public int getMaxLRUCount() |
| { |
| if (maxLRUCount == null) |
| { |
| return MAX_VALUE; |
| } |
| return maxLRUCount; |
| } |
| } |
| } |