package org.jactr.modules.pm.visual.memory.impl.filter;
/*
* default logging
*/
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import javolution.util.FastList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.production.request.ChunkTypeRequest;
import org.jactr.core.slot.IConditionalSlot;
import org.jactr.modules.pm.common.memory.filter.AbstractIndexFilter;
import org.jactr.modules.pm.common.memory.filter.IIndexFilter;
import org.jactr.modules.pm.visual.IVisualModule;
public class ValueVisualLocationFilter extends
AbstractIndexFilter<Object>
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(ValueVisualLocationFilter.class);
private Collection<IConditionalSlot> _conditionals;
public ValueVisualLocationFilter()
{
_conditionals = Collections.EMPTY_LIST;
}
protected ValueVisualLocationFilter(Collection<IConditionalSlot> conditionals)
{
_conditionals = conditionals;
}
@Override
protected Object compute(ChunkTypeRequest request)
{
for (IConditionalSlot cSlot : request.getConditionalSlots())
if (cSlot.getName().equals(IVisualModule.VALUE_SLOT)
&& cSlot.getCondition() == IConditionalSlot.EQUALS)
return cSlot.getValue();
return null;
}
public boolean accept(ChunkTypeRequest template)
{
Object value = get(template);
for (IConditionalSlot cSlot : _conditionals)
if (!cSlot.matchesCondition(value)) return false;
return true;
}
public Comparator<ChunkTypeRequest> getComparator()
{
return null;
}
public IIndexFilter instantiate(ChunkTypeRequest request)
{
FastList<IConditionalSlot> conditionals = FastList.newInstance();
int index = 0;
for (IConditionalSlot cSlot : request.getConditionalSlots())
{
if (conditionals.size() == 0) index++;
if (cSlot.getName().equals(IVisualModule.VALUE_SLOT))
conditionals.add(cSlot);
}
if (conditionals.size() == 0)
{
FastList.recycle(conditionals);
return null;
}
ValueVisualLocationFilter rtn = new ValueVisualLocationFilter(conditionals);
rtn.setWeight(index);
rtn.setPerceptualMemory(getPerceptualMemory());
return rtn;
}
public void normalizeRequest(ChunkTypeRequest request)
{
// TODO Auto-generated method stub
}
}