package org.jactr.tools.marker;
/*
* default logging
*/
import java.util.Collection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.production.CannotInstantiateException;
import org.jactr.core.production.IInstantiation;
import org.jactr.core.production.VariableBindings;
import org.jactr.core.production.action.DefaultSlotAction;
import org.jactr.core.production.action.IAction;
import org.jactr.core.slot.ISlot;
import org.jactr.tools.marker.impl.DefaultMarker;
/**
* drops an instananeous marker. requires slot values of "name" and "type", with
* a possible "description"
*
* @author harrison
*/
public class PointMarkerAction extends DefaultSlotAction
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(PointMarkerAction.class);
static public final String NAME = "name";
static public final String TYPE = "type";
static public final String DESCRIPTION = "description";
public PointMarkerAction()
{
}
public PointMarkerAction(VariableBindings variableBindings,
Collection<? extends ISlot> slots) throws CannotInstantiateException
{
super(variableBindings, slots);
checkForRequiredSlots(NAME, TYPE);
}
public IAction bind(VariableBindings variableBindings)
throws CannotInstantiateException
{
return new PointMarkerAction(variableBindings, getSlots());
}
@Override
public double fire(IInstantiation instantiation, double firingTime)
{
String markerName = getSlot(NAME).getValue().toString();
String type = getSlot(TYPE).getValue().toString();
DefaultMarker marker = new DefaultMarker(instantiation.getModel(),
markerName, type);
ISlot desc = getSlot(DESCRIPTION);
if (desc != null && desc.getValue() != null)
marker.setDescription(desc.getValue().toString());
marker.instantanious(firingTime);
return 0;
}
}