package org.jactr.modules.pm.visual.delegate;
/*
* default logging
*/
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.chunk.IChunk;
import org.jactr.core.module.asynch.delegate.BasicAsynchronousModuleDelegate;
import org.jactr.core.production.request.ChunkTypeRequest;
import org.jactr.core.production.request.IRequest;
import org.jactr.modules.pm.common.memory.PerceptualSearchResult;
import org.jactr.modules.pm.visual.AbstractVisualModule;
import org.jactr.modules.pm.visual.event.VisualModuleEvent;
import org.jactr.modules.pm.visual.memory.impl.DefaultVisualMemory;
public class VisualSearchDelegate
extends
BasicAsynchronousModuleDelegate<AbstractVisualModule, PerceptualSearchResult>
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(VisualSearchDelegate.class);
public VisualSearchDelegate(AbstractVisualModule module)
{
super(module, null);
}
@Override
protected PerceptualSearchResult processInternal(IRequest request,
double requestTime, Object... parameters)
{
/*
* merely delegate to visual memory
*/
DefaultVisualMemory memory = (DefaultVisualMemory) getModule()
.getVisualMemory();
if (LOGGER.isDebugEnabled())
LOGGER.debug("Requesting visual search " + request + " @ " + requestTime
+ " with " + memory.getPendingUpdates() + " pending updates");
return memory.searchNow((ChunkTypeRequest) request);
}
@Override
protected void processInternalCompleted(IRequest searchPattern,
PerceptualSearchResult result, Object... parameters)
{
AbstractVisualModule module = getModule();
boolean wasStuffRequest = (Boolean) parameters[0];
IChunk location = module.getErrorChunk();
if (result == null)
{
if (LOGGER.isDebugEnabled())
{
String msg = wasStuffRequest ? "Stuff failed to find anything"
: String
.format(
"No valid visual location could be found matching requested %s",
searchPattern);
LOGGER.debug(msg);
}
}
else
{
location = result.getLocation();
if (LOGGER.isDebugEnabled())
{
String msg = "Found " + location + " matching " + searchPattern
+ ". Because of object " + result.getPerceptIdentifier();
LOGGER.debug(msg);
}
}
if (module.hasListeners())
module.dispatch(new VisualModuleEvent(module, location, wasStuffRequest));
}
@Override
protected boolean shouldProcess(IRequest request, Object... parameters)
{
return request instanceof ChunkTypeRequest;
}
}