package org.jactr.modules.pm.common.memory.filter;
/*
* default logging
*/
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.production.request.ChunkTypeRequest;
import org.jactr.modules.pm.common.memory.IPerceptualMemory;
public abstract class AbstractIndexFilter<T> implements IIndexFilter
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(AbstractIndexFilter.class);
private int _weight = Integer.MIN_VALUE;
private Map<ChunkTypeRequest, T> _cache;
private IPerceptualMemory _perceptualMemory;
public void setPerceptualMemory(IPerceptualMemory memory)
{
_cache = new HashMap<ChunkTypeRequest, T>();
_perceptualMemory = memory;
}
public IPerceptualMemory getPerceptualMemory()
{
return _perceptualMemory;
}
protected void clearCache()
{
_cache.clear();
}
/**
* Allows you to extract the relevant comparison data from the chunkType
* request and cache it for use during accepting or comparing. If you do not
* need reference data for filtering or sorting, this can return null
*
* @param request
* @return
*/
abstract protected T compute(ChunkTypeRequest request);
/**
* fetch the previously {@link #compute(ChunkTypeRequest)}d value for the
* request from the cache.
*
* @param request
* @return
*/
protected T get(ChunkTypeRequest request)
{
T rtn = null;
if (!_cache.containsKey(request))
{
rtn = compute(request);
_cache.put(request, rtn);
}
else
rtn = _cache.get(request);
return rtn;
}
public int getWeight()
{
return _weight;
}
protected void setWeight(int weight)
{
_weight = weight;
}
public void normalizeRequest(ChunkTypeRequest request)
{
}
}