package org.jactr.modules.pm.aural.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.aural.AbstractAuralModule;
import org.jactr.modules.pm.aural.event.AuralModuleEvent;
import org.jactr.modules.pm.common.memory.IPerceptualMemory;
import org.jactr.modules.pm.common.memory.PerceptualSearchResult;
public class AuralSearchDelegate
extends
BasicAsynchronousModuleDelegate<AbstractAuralModule, PerceptualSearchResult>
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(AuralSearchDelegate.class);
public AuralSearchDelegate(AbstractAuralModule module)
{
super(module, null);
}
@Override
protected PerceptualSearchResult processInternal(IRequest request,
double requestTime, Object... parameters)
{
/*
* merely delegate to visual memory
*/
IPerceptualMemory memory = getModule().getPerceptualMemory();
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)
{
AbstractAuralModule 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 audio event 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 AuralModuleEvent(module,
AuralModuleEvent.Type.SEARCHED, location));
}
@Override
protected boolean shouldProcess(IRequest request, Object... parameters)
{
return request instanceof ChunkTypeRequest;
}
}