package org.jboss.cache.eviction;
import org.jboss.cache.Fqn;
import org.jboss.cache.aop.AOPInstance;
import org.jboss.cache.aop.TreeCacheAop;
import java.util.Iterator;
import java.util.Set;
public class AopLRUPolicy extends LRUPolicy implements AopEvictionPolicy
{
public AopLRUPolicy() {
super();
}
public void nodeVisited(Fqn fqn)
{
if(isInternalNode(fqn)) return;
Region region = regionManager_.getRegion(fqn.toString());
region.setVisitedNode(fqn);
if(!isAopNode(fqn))
return;
visitChildrenRecursively(region, fqn);
}
protected void visitChildrenRecursively(Region region, Fqn fqn) {
Set set = getChildrenNames(fqn);
int size = (set == null) ? 0: set.size();
if(log_.isTraceEnabled()) {
log_.trace("nodeVisited(): is an aop node. fqn- " +fqn + " size of children is " +size);
}
if(set == null) return; Iterator it = set.iterator();
while(it.hasNext()) {
Object childName = it.next();
Fqn fqnKid = new Fqn(fqn, childName);
visitChildrenRecursively(region, fqnKid);
region.setVisitedNode(fqnKid);
}
}
private boolean isAopNode(Fqn fqn)
{
try {
return (cache_.peek(fqn, AOPInstance.KEY) != null) ? true: false;
} catch (Exception e) {
log_.warn("isAopNode(): cache get operation generated exception " +e);
return false;
}
}
public void nodeAdded(Fqn fqn)
{
if(isInternalNode(fqn)) return;
super.nodeAdded(fqn);
}
public void nodeRemoved(Fqn fqn)
{
if(isInternalNode(fqn)) return;
super.nodeRemoved(fqn);
}
public void nodeModified(Fqn fqn) {
super.nodeModified(fqn);
}
protected EvictionAlgorithm getEvictionAlgorithm() {
return new LRUAlgorithm();
}
protected boolean isInternalNode(Fqn fqn) {
String startStr = (String)fqn.get(0);
if( startStr.equals(TreeCacheAop.JBOSS_INTERNAL.get(0))) return true;
return false;
}
}