AnswerRequestPlanBody.java
Home
/
bdi-jade-test /
src /
bdi4jade /
examples /
undo /
plan /
AnswerRequestPlanBody.java
package bdi4jade.examples.undo.plan;
import java.util.Random;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import bdi4jade.annotation.Parameter;
import bdi4jade.annotation.Parameter.Direction;
import bdi4jade.examples.undo.domain.CO;
import bdi4jade.examples.undo.plan.request.RequestDeviceClosePlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceOffPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceOnPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceOpenPlanBody;
import bdi4jade.plan.Plan.EndState;
import bdi4jade.plan.planbody.AbstractPlanBody;
import jade.lang.acl.ACLMessage;
/**
* @author jgfaccin
*
*/
public class AnswerRequestPlanBody extends AbstractPlanBody {
private static final long serialVersionUID = -3625377753974076464L;
private static final Log log = LogFactory.getLog(AnswerRequestPlanBody.class);
public static final String SUCCEEDED = "SUCCEEDED";
private ACLMessage requestMsg;
@Override
public void action() {
try {
log.info("Request received from agent " + requestMsg.getSender().getName() + "!");
ACLMessage reply = requestMsg.createReply();
reply.setContent(SUCCEEDED);
Random random = new Random(System.currentTimeMillis());
Thread.sleep(random.nextInt(10) * 1000);
act(requestMsg);
this.myAgent.send(reply);
log.info("Reply sent to agent " + requestMsg.getSender().getName() + "!");
setEndState(EndState.SUCCESSFUL);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Parameter(direction = Direction.IN)
public void setMessage(ACLMessage requestMsg) {
this.requestMsg = requestMsg;
}
private void act(ACLMessage requestMsg) {
switch (requestMsg.getContent()) {
case RequestDeviceOnPlanBody.MSG_FANS_CONTENT:
CO.getInstance().setFansOn(true);
break;
case RequestDeviceOpenPlanBody.MSG_WINDOWS_CONTENT:
CO.getInstance().setOpenWindows(true);
break;
case RequestDeviceOffPlanBody.MSG_FANS_CONTENT:
CO.getInstance().setFansOn(false);
break;
case RequestDeviceClosePlanBody.MSG_WINDOWS_CONTENT:
CO.getInstance().setOpenWindows(false);
break;
case RequestDeviceClosePlanBody.MSG_VALVE_CONTENT:
CO.getInstance().setLeaking(false);
default:
break;
}
}
}