bdi4jade

Bug Fix

3/6/2018 10:35:28 PM

Details

.gitignore 2(+2 -0)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3abf6de
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.txt
+*.log
diff --git a/bdi-jade/src/bdi4jade/core/Capability.java b/bdi-jade/src/bdi4jade/core/Capability.java
index 6fc40d2..49ee873 100644
--- a/bdi-jade/src/bdi4jade/core/Capability.java
+++ b/bdi-jade/src/bdi4jade/core/Capability.java
@@ -565,7 +565,7 @@ public class Capability implements Serializable {
 		return id;
 	}
 
-	final Collection<Intention> getIntentions() {
+	public final Collection<Intention> getIntentions() {
 		return intentions;
 	}
 
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java b/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java
index dc8cc7f..c36b6d5 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java
@@ -88,7 +88,7 @@ public class RemediationOptionGenerationFunction extends RevertingOptionGenerati
 
 				// Here a new goal achievement metadata is created
 				if (this.capability instanceof RevertingCapability) {
-					for (Intention intention : this.capability.getMyAgent().getIntentions()) {
+					for (Intention intention : this.capability.getIntentions()) {
 						if (intention.getGoal().equals(goal)) {
 							((RevertingCapability) this.capability)
 									.createGoalAchievementMetadata((PredicateGoal<?>) goal, intention);
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java b/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java
index b3dcd79..d41ba8f 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java
@@ -6,8 +6,6 @@ import bdi4jade.annotation.Belief;
 import bdi4jade.belief.PredicateBelief;
 import bdi4jade.belief.TransientPredicate;
 import bdi4jade.core.BDIAgent;
-import bdi4jade.core.Capability;
-import bdi4jade.core.GoalUpdateSet;
 import bdi4jade.examples.undo.domain.CO;
 import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.Abnormal;
@@ -29,7 +27,6 @@ import bdi4jade.examples.undo.plan.request.RequestDeviceUnlockPlanBody;
 import bdi4jade.extension.remediation.RemediationCapability;
 import bdi4jade.extension.remediation.graph.CauseEffectRelationship;
 import bdi4jade.extension.remediation.logics.Fact;
-import bdi4jade.extension.remediation.reasoning.RemediationOptionGenerationFunction;
 import bdi4jade.goal.GoalTemplateFactory;
 import bdi4jade.goal.PredicateGoal;
 import bdi4jade.plan.DefaultPlan;
@@ -93,8 +90,8 @@ public class ManagementCapability extends RemediationCapability {
 	@bdi4jade.annotation.Plan
 	private Plan requestDeviceClosePlan;
 
-	public ManagementCapability(BDIAgent agent, String alarmAgent, String detectorAgent, String doorsAgent, String fansAgent,
-			String lightsAgent, String valveAgent, String windowsAgent) {
+	public ManagementCapability(BDIAgent agent, String alarmAgent, String detectorAgent, String doorsAgent,
+			String fansAgent, String lightsAgent, String valveAgent, String windowsAgent) {
 		super(agent);
 		this.alarmAgent = alarmAgent;
 		this.detectorAgent = detectorAgent;
@@ -105,8 +102,7 @@ public class ManagementCapability extends RemediationCapability {
 		this.windowsAgent = windowsAgent;
 
 		setBeliefRevisionStrategy(new MyBeliefRevisionStrategy());
-		setOptionGenerationFunction(new MyOptionGenerationFunction(this));
-		
+
 		initializeBeliefs();
 		initializeCauseEffectKnowledgeModel();
 		initializePlans();
@@ -182,6 +178,8 @@ public class ManagementCapability extends RemediationCapability {
 				if (notificationMsg.getContent().equals(NotifyAbnormalCOPlanBody.ABNORMAL_CO)) {
 					abnormalCO.setValue(true);
 					leakingWaterHeater.setValue(true);
+					this.capability.getMyAgent().addGoal(this.capability,
+							new PredicateGoal<Abnormal>(new Abnormal(CO.getInstance()), false));
 				} else {
 					abnormalCO.setValue(false);
 				}
@@ -189,20 +187,4 @@ public class ManagementCapability extends RemediationCapability {
 		}
 
 	}
-	
-	class MyOptionGenerationFunction extends RemediationOptionGenerationFunction {
-
-		public MyOptionGenerationFunction(Capability capability) {
-			super(ManagementCapability.this);
-		}
-	
-		@Override
-		public void generateGoals(GoalUpdateSet goalUpdateSet) {
-			if (abnormalCO.getValue()) {
-				goalUpdateSet.generateGoal(new PredicateGoal<Abnormal>(new Abnormal(CO.getInstance()), false));
-			}
-			
-			super.generateGoals(goalUpdateSet);
-		}
-	}
 }
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java
index 480e777..c679773 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java
@@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
 import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
 import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.Open;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
@@ -34,23 +35,24 @@ public class RequestDeviceClosePlanBody extends RevertingPlanBody {
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> valveAgent;
 	@bdi4jade.annotation.Belief
-	private PredicateBelief<Open> valveOpen;
-	@bdi4jade.annotation.Belief
 	private Belief<String, String> windowsAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<Open> windowsOpen;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		PredicateGoal<Open> goal = (PredicateGoal<Open>) this.getGoal();
 		if (goal.getBeliefName().getVariable().equals(House.VALVE)) {
+			TransientPredicate<Open> valveOpen = (TransientPredicate<Open>) this.getCapability().getBeliefBase()
+					.getBelief(new Open(House.VALVE));
 			manageRequest(MSG_VALVE_CONTENT, valveAgent.getValue(), valveOpen);
 		}
 		if (goal.getBeliefName().getVariable().equals(House.WINDOWS)) {
+			TransientPredicate<Open> windowsOpen = (TransientPredicate<Open>) this.getCapability().getBeliefBase()
+					.getBelief(new Open(House.WINDOWS));
 			manageRequest(MSG_WINDOWS_CONTENT, windowsAgent.getValue(), windowsOpen);
-		}		
+		}
 	}
-	
+
 	private void manageRequest(String msgContent, String agentName, PredicateBelief<Open> belief) {
 		if (!sent) {
 			sendRequest(msgContent, agentName);
@@ -58,7 +60,7 @@ public class RequestDeviceClosePlanBody extends RevertingPlanBody {
 			receiveMessage(belief);
 		}
 	}
-	
+
 	private void sendRequest(String msgContent, String agentName) {
 		ACLMessage msg = new ACLMessage(ACLMessage.REQUEST);
 		msg.setContent(msgContent);
@@ -70,7 +72,7 @@ public class RequestDeviceClosePlanBody extends RevertingPlanBody {
 		this.sent = true;
 		log.info("Request sent to agent " + agentName + "!");
 	}
-	
+
 	private void receiveMessage(PredicateBelief<Open> belief) {
 		ACLMessage reply = myAgent.receive(mt);
 		if (reply != null) {
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java
index ea9709b..0f8bdbe 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java
@@ -26,7 +26,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
-import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
+import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.Locked;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
 import bdi4jade.extension.undo.RevertingPlanBody;
@@ -52,9 +53,8 @@ public class RequestDeviceLockPlanBody extends RevertingPlanBody {
 
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> doorsAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<Locked> doorsUnlock;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		if (!sent) {
@@ -71,6 +71,8 @@ public class RequestDeviceLockPlanBody extends RevertingPlanBody {
 			ACLMessage reply = myAgent.receive(mt);
 			if (reply != null) {
 				if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
+					TransientPredicate<Locked> doorsUnlock = (TransientPredicate<Locked>) this.getCapability()
+							.getBeliefBase().getBelief(new Locked(House.DOORS));
 					doorsUnlock.setValue(false, this.getGoal());
 					log.info(reply.getSender() + ": " + reply.getContent());
 					setEndState(EndState.SUCCESSFUL);
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java
index c518830..6bdddc1 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java
@@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
 import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
 import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.On;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
@@ -22,7 +23,7 @@ import jade.lang.acl.MessageTemplate;
 public class RequestDeviceOffPlanBody extends RevertingPlanBody {
 
 	private static final long serialVersionUID = -3091070375458975704L;
-	
+
 	private static final Log log = LogFactory.getLog(RequestDeviceOffPlanBody.class);
 
 	public static final String MSG_FANS_CONTENT = "FANS_OFF";
@@ -31,27 +32,27 @@ public class RequestDeviceOffPlanBody extends RevertingPlanBody {
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> fansAgent;
 	@bdi4jade.annotation.Belief
-	private PredicateBelief<On> fansOn;
-
-	@bdi4jade.annotation.Belief
 	private Belief<String, String> lightsAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<On> lightsOn;
-	
+
 	private MessageTemplate mt;
 	private boolean sent = false;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		PredicateGoal<On> goal = (PredicateGoal<On>) this.getGoal();
 		if (goal.getBeliefName().getVariable().equals(House.FANS)) {
+			TransientPredicate<On> fansOn = (TransientPredicate<On>) this.getCapability().getBeliefBase()
+					.getBelief(new On(House.FANS));
 			manageRequest(MSG_FANS_CONTENT, fansAgent.getValue(), fansOn);
 		}
 		if (goal.getBeliefName().getVariable().equals(House.LIGHTS)) {
+			TransientPredicate<On> lightsOn = (TransientPredicate<On>) this.getCapability().getBeliefBase()
+					.getBelief(new On(House.LIGHTS));
 			manageRequest(MSG_LIGHTS_CONTENT, lightsAgent.getValue(), lightsOn);
-		}		
+		}
 	}
-	
+
 	private void manageRequest(String msgContent, String agentName, PredicateBelief<On> belief) {
 		if (!sent) {
 			sendRequest(msgContent, agentName);
@@ -59,13 +60,13 @@ public class RequestDeviceOffPlanBody extends RevertingPlanBody {
 			receiveMessage(belief);
 		}
 	}
-	
+
 	@Override
 	public int onEnd() {
 		this.sent = false;
 		return super.onEnd();
 	}
-	
+
 	private void receiveMessage(PredicateBelief<On> belief) {
 		ACLMessage reply = myAgent.receive(mt);
 		if (reply != null) {
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java
index f8eaedd..67342c1 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java
@@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
 import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
 import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.On;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
@@ -20,9 +21,9 @@ import jade.lang.acl.MessageTemplate;
  *
  */
 public class RequestDeviceOnPlanBody extends RevertingPlanBody {
-	
+
 	private static final long serialVersionUID = 6823219775966702413L;
-	
+
 	private static final Log log = LogFactory.getLog(RequestDeviceOnPlanBody.class);
 
 	public static final String MSG_FANS_CONTENT = "FANS_ON";
@@ -31,27 +32,27 @@ public class RequestDeviceOnPlanBody extends RevertingPlanBody {
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> fansAgent;
 	@bdi4jade.annotation.Belief
-	private PredicateBelief<On> fansOn;
-	
-	@bdi4jade.annotation.Belief
 	private Belief<String, String> lightsAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<On> lightsOn;
-	
+
 	private MessageTemplate mt;
 	private boolean sent = false;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		PredicateGoal<On> goal = (PredicateGoal<On>) this.getGoal();
 		if (goal.getBeliefName().getVariable().equals(House.FANS)) {
+			TransientPredicate<On> fansOn = (TransientPredicate<On>) this.getCapability().getBeliefBase()
+					.getBelief(new On(House.FANS));
 			manageRequest(MSG_FANS_CONTENT, fansAgent.getValue(), fansOn);
 		}
 		if (goal.getBeliefName().getVariable().equals(House.LIGHTS)) {
+			TransientPredicate<On> lightsOn = (TransientPredicate<On>) this.getCapability().getBeliefBase()
+					.getBelief(new On(House.LIGHTS));
 			manageRequest(MSG_LIGHTS_CONTENT, lightsAgent.getValue(), lightsOn);
-		}		
+		}
 	}
-	
+
 	private void manageRequest(String msgContent, String agentName, PredicateBelief<On> belief) {
 		if (!sent) {
 			sendRequest(msgContent, agentName);
@@ -59,13 +60,13 @@ public class RequestDeviceOnPlanBody extends RevertingPlanBody {
 			receiveMessage(belief);
 		}
 	}
-	
+
 	@Override
 	public int onEnd() {
 		this.sent = false;
 		return super.onEnd();
 	}
-	
+
 	private void receiveMessage(PredicateBelief<On> belief) {
 		ACLMessage reply = myAgent.receive(mt);
 		if (reply != null) {
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java
index 1f953d5..c3d27d6 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java
@@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
 import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
 import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.Open;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
@@ -34,23 +35,24 @@ public class RequestDeviceOpenPlanBody extends RevertingPlanBody {
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> valveAgent;
 	@bdi4jade.annotation.Belief
-	private PredicateBelief<Open> valveOpen;
-	@bdi4jade.annotation.Belief
 	private Belief<String, String> windowsAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<Open> windowsOpen;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		PredicateGoal<Open> goal = (PredicateGoal<Open>) this.getGoal();
 		if (goal.getBeliefName().getVariable().equals(House.VALVE)) {
+			TransientPredicate<Open> valveOpen = (TransientPredicate<Open>) this.getCapability().getBeliefBase()
+					.getBelief(new Open(House.VALVE));
 			manageRequest(MSG_VALVE_CONTENT, valveAgent.getValue(), valveOpen);
 		}
 		if (goal.getBeliefName().getVariable().equals(House.WINDOWS)) {
+			TransientPredicate<Open> windowsOpen = (TransientPredicate<Open>) this.getCapability().getBeliefBase()
+					.getBelief(new Open(House.WINDOWS));
 			manageRequest(MSG_WINDOWS_CONTENT, windowsAgent.getValue(), windowsOpen);
-		}		
+		}
 	}
-	
+
 	private void manageRequest(String msgContent, String agentName, PredicateBelief<Open> belief) {
 		if (!sent) {
 			sendRequest(msgContent, agentName);
@@ -58,7 +60,7 @@ public class RequestDeviceOpenPlanBody extends RevertingPlanBody {
 			receiveMessage(belief);
 		}
 	}
-	
+
 	private void sendRequest(String msgContent, String agentName) {
 		ACLMessage msg = new ACLMessage(ACLMessage.REQUEST);
 		msg.setContent(msgContent);
@@ -70,7 +72,7 @@ public class RequestDeviceOpenPlanBody extends RevertingPlanBody {
 		this.sent = true;
 		log.info("Request sent to agent " + agentName + "!");
 	}
-	
+
 	private void receiveMessage(PredicateBelief<Open> belief) {
 		ACLMessage reply = myAgent.receive(mt);
 		if (reply != null) {
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java
index de8fb12..1518590 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java
@@ -26,7 +26,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
-import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
+import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.TakeOff;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
 import bdi4jade.extension.undo.RevertingPlanBody;
@@ -52,9 +53,8 @@ public class RequestDeviceShutdownPlanBody extends RevertingPlanBody {
 
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> alarmAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<TakeOff> alarmTakeOff;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		if (!sent) {
@@ -71,6 +71,8 @@ public class RequestDeviceShutdownPlanBody extends RevertingPlanBody {
 			ACLMessage reply = myAgent.receive(mt);
 			if (reply != null) {
 				if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
+					TransientPredicate<TakeOff> alarmTakeOff = (TransientPredicate<TakeOff>) this.getCapability()
+							.getBeliefBase().getBelief(new TakeOff(House.ALARM));
 					alarmTakeOff.setValue(false, this.getGoal());
 					log.info(reply.getSender() + ": " + reply.getContent());
 					setEndState(EndState.SUCCESSFUL);
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java
index db8c8e0..ad259fe 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java
@@ -5,6 +5,8 @@ import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
 import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
+import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.TakeOff;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
 import bdi4jade.extension.undo.RevertingPlanBody;
@@ -18,7 +20,7 @@ import jade.lang.acl.MessageTemplate;
  *
  */
 public class RequestDeviceTakeOffPlanBody extends RevertingPlanBody {
-	
+
 	private static final long serialVersionUID = 8041605409336004689L;
 
 	private static final Log log = LogFactory.getLog(RequestDeviceTakeOffPlanBody.class);
@@ -33,6 +35,7 @@ public class RequestDeviceTakeOffPlanBody extends RevertingPlanBody {
 	@bdi4jade.annotation.Belief
 	private PredicateBelief<TakeOff> alarmTakeOff;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		if (!sent) {
@@ -49,6 +52,8 @@ public class RequestDeviceTakeOffPlanBody extends RevertingPlanBody {
 			ACLMessage reply = myAgent.receive(mt);
 			if (reply != null) {
 				if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
+					TransientPredicate<TakeOff> alarmTakeOff = (TransientPredicate<TakeOff>) this.getCapability()
+							.getBeliefBase().getBelief(new TakeOff(House.ALARM));
 					alarmTakeOff.setValue(true, this.getGoal());
 					log.info(reply.getSender() + ": " + reply.getContent());
 					setEndState(EndState.SUCCESSFUL);
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java
index 8678254..835a5ad 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java
@@ -4,7 +4,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import bdi4jade.belief.Belief;
-import bdi4jade.belief.PredicateBelief;
+import bdi4jade.belief.TransientPredicate;
+import bdi4jade.examples.undo.domain.House;
 import bdi4jade.examples.undo.domain.predicate.Locked;
 import bdi4jade.examples.undo.plan.AnswerRequestPlanBody;
 import bdi4jade.extension.undo.RevertingPlanBody;
@@ -30,9 +31,8 @@ public class RequestDeviceUnlockPlanBody extends RevertingPlanBody {
 
 	@bdi4jade.annotation.Belief
 	private Belief<String, String> doorsAgent;
-	@bdi4jade.annotation.Belief
-	private PredicateBelief<Locked> doorsUnlock;
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected void execute() {
 		if (!sent) {
@@ -49,6 +49,8 @@ public class RequestDeviceUnlockPlanBody extends RevertingPlanBody {
 			ACLMessage reply = myAgent.receive(mt);
 			if (reply != null) {
 				if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
+					TransientPredicate<Locked> doorsUnlock = (TransientPredicate<Locked>) this.getCapability()
+							.getBeliefBase().getBelief(new Locked(House.DOORS));
 					doorsUnlock.setValue(true, this.getGoal());
 					log.info(reply.getSender() + ": " + reply.getContent());
 					setEndState(EndState.SUCCESSFUL);
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java b/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java
index e010af9..e76fb6e 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java
@@ -113,42 +113,42 @@ public class Runner {
 		this.alarmAgent = new SmartHomeAgent("ALARM");
 		this.alarmAgent.getCapability().getPlanLibrary()
 				.addPlan(new DefaultPlan(
-						MessageTemplate.and(MessageTemplate.MatchContent(RequestDeviceTakeOffPlanBody.MSG_CONTENT),
+						MessageTemplate.or(MessageTemplate.MatchContent(RequestDeviceTakeOffPlanBody.MSG_CONTENT),
 								MessageTemplate.MatchContent(RequestDeviceShutdownPlanBody.MSG_CONTENT)),
 						AnswerRequestPlanBody.class));
 
 		this.lightsAgent = new SmartHomeAgent("LIGHTS");
 		this.lightsAgent.getCapability().getPlanLibrary()
 				.addPlan(new DefaultPlan(
-						MessageTemplate.and(MessageTemplate.MatchContent(RequestDeviceOnPlanBody.MSG_LIGHTS_CONTENT),
+						MessageTemplate.or(MessageTemplate.MatchContent(RequestDeviceOnPlanBody.MSG_LIGHTS_CONTENT),
 								MessageTemplate.MatchContent(RequestDeviceOffPlanBody.MSG_LIGHTS_CONTENT)),
 						AnswerRequestPlanBody.class));
 
 		this.doorsAgent = new SmartHomeAgent("DOORS");
 		this.doorsAgent.getCapability().getPlanLibrary()
 				.addPlan(new DefaultPlan(
-						MessageTemplate.and(MessageTemplate.MatchContent(RequestDeviceUnlockPlanBody.MSG_CONTENT),
+						MessageTemplate.or(MessageTemplate.MatchContent(RequestDeviceUnlockPlanBody.MSG_CONTENT),
 								MessageTemplate.MatchContent(RequestDeviceLockPlanBody.MSG_CONTENT)),
 						AnswerRequestPlanBody.class));
 
 		this.windowsAgent = new SmartHomeAgent("WINDOWS");
 		this.windowsAgent.getCapability().getPlanLibrary()
 				.addPlan(new DefaultPlan(
-						MessageTemplate.and(MessageTemplate.MatchContent(RequestDeviceOpenPlanBody.MSG_WINDOWS_CONTENT),
+						MessageTemplate.or(MessageTemplate.MatchContent(RequestDeviceOpenPlanBody.MSG_WINDOWS_CONTENT),
 								MessageTemplate.MatchContent(RequestDeviceClosePlanBody.MSG_WINDOWS_CONTENT)),
 						AnswerRequestPlanBody.class));
 
 		this.fansAgent = new SmartHomeAgent("FANS");
 		this.fansAgent.getCapability().getPlanLibrary()
 				.addPlan(new DefaultPlan(
-						MessageTemplate.and(MessageTemplate.MatchContent(RequestDeviceOnPlanBody.MSG_FANS_CONTENT),
+						MessageTemplate.or(MessageTemplate.MatchContent(RequestDeviceOnPlanBody.MSG_FANS_CONTENT),
 								MessageTemplate.MatchContent(RequestDeviceOffPlanBody.MSG_FANS_CONTENT)),
 						AnswerRequestPlanBody.class));
 
 		this.valveAgent = new SmartHomeAgent("VALVE");
 		this.valveAgent.getCapability().getPlanLibrary()
 				.addPlan(new DefaultPlan(
-						MessageTemplate.and(MessageTemplate.MatchContent(RequestDeviceOpenPlanBody.MSG_VALVE_CONTENT),
+						MessageTemplate.or(MessageTemplate.MatchContent(RequestDeviceOpenPlanBody.MSG_VALVE_CONTENT),
 								MessageTemplate.MatchContent(RequestDeviceClosePlanBody.MSG_VALVE_CONTENT)),
 						AnswerRequestPlanBody.class));