package org.jactr.modules.pm.motor.buffer.processor; /* * default logging */ import javolution.util.FastList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.core.buffer.IActivationBuffer; import org.jactr.core.buffer.delegate.SimpleRequestDelegate; import org.jactr.core.chunktype.IChunkType; import org.jactr.core.logging.Logger; import org.jactr.core.model.IModel; import org.jactr.core.production.request.ChunkTypeRequest; import org.jactr.core.production.request.IRequest; import org.jactr.core.slot.ISlot; import org.jactr.modules.pm.motor.AbstractMotorModule; import org.jactr.modules.pm.motor.IMotorModule; import org.jactr.modules.pm.motor.command.IMovement; public class MotorRequestDelegate extends SimpleRequestDelegate { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(MotorRequestDelegate.class); static public final String ADJUSTMENT = ":adjustment"; private IMotorModule _module; public MotorRequestDelegate(IChunkType chunkType, IMotorModule motor) { super(chunkType); _module = motor; } public boolean request(IRequest request, IActivationBuffer buffer, double requestTime) { if (isAdjustment((ChunkTypeRequest) request)) { IMovement movement = AbortRequestDelegate.getMovement( (ChunkTypeRequest) request, (AbstractMotorModule) _module); String msg = null; if (movement != null) { msg = String.format("Adjusting %s with %s", movement, request); _module.adjust(movement, (ChunkTypeRequest) request, requestTime); } else msg = String.format( "No executing movement found matching %s, ignoring", request); IModel model = _module.getModel(); if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.MOTOR, msg); } else _module.prepare((ChunkTypeRequest) request, requestTime, false); return true; } /** * request is immediate */ public void clear() { } private boolean isAdjustment(ChunkTypeRequest request) { FastList<ISlot> container = FastList.newInstance(); request.getSlots(container); for (ISlot slot : container) if (slot.getName().equals(ADJUSTMENT)) return true; return false; } }