ManagementCapability.java

124 lines | 4.902 kB Blame History Raw Download
package bdi4jade.examples.undo;

import bdi4jade.annotation.Belief;
import bdi4jade.belief.PredicateBelief;
import bdi4jade.belief.TransientPredicate;
import bdi4jade.examples.undo.domain.CO;
import bdi4jade.examples.undo.domain.House;
import bdi4jade.examples.undo.domain.predicate.Abnormal;
import bdi4jade.examples.undo.domain.predicate.Leak;
import bdi4jade.examples.undo.domain.predicate.Locked;
import bdi4jade.examples.undo.domain.predicate.On;
import bdi4jade.examples.undo.domain.predicate.Open;
import bdi4jade.examples.undo.domain.predicate.TakeOff;
import bdi4jade.examples.undo.goal.NormalizeCOGoal;
import bdi4jade.examples.undo.plan.EvacuateAndVentilatePlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceClosePlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceLockPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceOffPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceOnPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceOpenPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceShutdownPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceTakeOffPlanBody;
import bdi4jade.examples.undo.plan.request.RequestDeviceUnlockPlanBody;
import bdi4jade.extension.undo.RevertingCapability;
import bdi4jade.goal.GoalTemplateFactory;
import bdi4jade.plan.DefaultPlan;
import bdi4jade.plan.Plan;

/**
 * @author jgfaccin
 *
 */
public class ManagementCapability extends RevertingCapability {

	private static final long serialVersionUID = -1971498055603790248L;

	// Neighbours
	@Belief
	String alarmAgent;
	@Belief
	String doorsAgent;
	@Belief
	String fansAgent;
	@Belief
	String lightsAgent;
	@Belief
	String valveAgent;
	@Belief
	String windowsAgent;

	// Device Predicates
	PredicateBelief<TakeOff> alarmTakeOff = new TransientPredicate<>(new TakeOff(House.ALARM), false);
	PredicateBelief<Locked> doorsUnlock = new TransientPredicate<>(new Locked(House.DOORS), true);
	PredicateBelief<On> fansOn = new TransientPredicate<On>(new On(House.FANS), false);
	PredicateBelief<Leak> leakingWaterHeater = new TransientPredicate<Leak>(new Leak(House.WATER_HEATER), false);
	PredicateBelief<On> lightsOn = new TransientPredicate<>(new On(House.LIGHTS), false);
	PredicateBelief<Open> valveOpen = new TransientPredicate<Open>(new Open(House.VALVE), false);
	PredicateBelief<Open> windowsOpen = new TransientPredicate<Open>(new Open(House.WINDOWS), false);
	PredicateBelief<Abnormal> abnormalCO = new TransientPredicate<Abnormal>(new Abnormal(CO.getInstance()), false);

	// Plans
	@bdi4jade.annotation.Plan
	private Plan evacuateAndVentilatePlan;

	@bdi4jade.annotation.Plan
	private Plan requestDeviceTakeOffPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceShutdownPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceOnPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceOffPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceUnlockPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceLockPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceOpenPlan;
	@bdi4jade.annotation.Plan
	private Plan requestDeviceClosePlan;

	public ManagementCapability(String alarmAgent, String valveAgent, String doorsAgent, String fansAgent,
			String lightsAgent, String windowsAgent) {
		this.alarmAgent = alarmAgent;
		this.valveAgent = valveAgent;
		this.doorsAgent = doorsAgent;
		this.fansAgent = fansAgent;
		this.lightsAgent = lightsAgent;
		this.windowsAgent = windowsAgent;

		initializePlans();
		initializeCauseEffectRelationship();
	}

	private void initializePlans() {

		this.requestDeviceTakeOffPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(TakeOff.class, true), RequestDeviceTakeOffPlanBody.class);
		this.requestDeviceShutdownPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(TakeOff.class, false), RequestDeviceShutdownPlanBody.class);
		
		this.requestDeviceOnPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(On.class, true), RequestDeviceOnPlanBody.class);
		this.requestDeviceOffPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(On.class, false), RequestDeviceOffPlanBody.class);
		
		this.requestDeviceUnlockPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(Locked.class, false), RequestDeviceUnlockPlanBody.class);
		this.requestDeviceLockPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(Locked.class, true), RequestDeviceLockPlanBody.class);
		
		this.requestDeviceOpenPlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(Open.class, true), RequestDeviceOpenPlanBody.class);
		this.requestDeviceClosePlan = new DefaultPlan(
				GoalTemplateFactory.hasBeliefOfTypeWithValue(Open.class, false), RequestDeviceClosePlanBody.class);
		
		this.evacuateAndVentilatePlan = new DefaultPlan(NormalizeCOGoal.class, EvacuateAndVentilatePlanBody.class);
	}

	private void initializeCauseEffectRelationship() {

	}
}