package org.jactr.core.chunk.link;
/*
* default logging
*/
import java.util.Collection;
import java.util.Collections;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.chunk.IChunk;
import org.jactr.core.utils.parameter.ParameterHandler;
public class AbstractAssociativeLink implements IAssociativeLink
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(AbstractAssociativeLink.class);
private final IChunk _iChunk;
private final IChunk _jChunk;
private double _strength;
public AbstractAssociativeLink(IChunk jChunk, IChunk iChunk, double strength)
{
_iChunk = iChunk;
_jChunk = jChunk;
_strength = strength;
}
public IChunk getIChunk()
{
return _iChunk;
}
public IChunk getJChunk()
{
return _jChunk;
}
public double getStrength()
{
return _strength;
}
public void setStrength(double strength)
{
_strength = strength;
}
public void copy(IAssociativeLink link) throws IllegalArgumentException
{
if (!_jChunk.equals(link.getJChunk()) || !_iChunk.equals(link.getIChunk()))
throw new IllegalArgumentException("Both i and j chunks must match to copy link parameters");
setStrength(link.getStrength());
}
public String getParameter(String key)
{
if(STRENGTH_PARAM.equalsIgnoreCase(key))
return Double.toString(getStrength());
return null;
}
public Collection<String> getPossibleParameters()
{
return Collections.singleton(STRENGTH_PARAM);
}
public Collection<String> getSetableParameters()
{
return getPossibleParameters();
}
public void setParameter(String key, String value)
{
if(STRENGTH_PARAM.equalsIgnoreCase(key))
setStrength(ParameterHandler.numberInstance().coerce(value).doubleValue());
else
if (LOGGER.isWarnEnabled()) LOGGER.warn(String.format("No clue how to set %s=%s",key,value));
}
}