package org.jactr.tools.grapher.core.probe;
/*
* default logging
*/
import java.util.concurrent.Executor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.event.IParameterEvent;
import org.jactr.core.production.IProduction;
import org.jactr.core.production.event.IProductionListener;
import org.jactr.core.production.event.ProductionListenerAdaptor;
import org.jactr.core.production.six.ISubsymbolicProduction6;
import org.jactr.core.utils.parameter.IParameterized;
public class ProductionProbe extends AbstractParameterizedProbe<IProduction>
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(ProductionProbe.class);
private IProductionListener _listener;
public ProductionProbe(String name, IProduction production)
{
super(name, production);
}
@Override
public void install(IProduction parameterized, Executor executor)
{
if (isPolling()) return;
_listener = new ProductionListenerAdaptor() {
@Override
public void parameterChanged(IParameterEvent pe)
{
set(pe.getParameterName(), pe.getNewParameterValue());
}
};
parameterized.addListener(_listener, executor);
}
@Override
protected AbstractParameterizedProbe<IProduction> newInstance(
IProduction parameterized)
{
return new ProductionProbe(parameterized.getSymbolicProduction().getName(),
parameterized);
}
@Override
protected IParameterized asParameterized(IProduction parameterizedObject)
{
return parameterizedObject.getSubsymbolicProduction();
}
/**
* special handling for ExpectedUtility since it may be nan until learned. if
* nan, use utility instead
*/
@Override
protected void set(String parameter, Object value)
{
if (ISubsymbolicProduction6.EXPECTED_UTILITY_PARAM
.equalsIgnoreCase(parameter))
if (value instanceof Number
&& Double.isNaN(((Number) value).doubleValue())
|| "NaN".equals(value))
{
super.set(parameter, asParameterized(_parameterized).getParameter(
ISubsymbolicProduction6.UTILITY_PARAM));
return;
}
super.set(parameter, value);
}
}