bdi4jade

Belief changes

4/8/2014 8:53:20 PM

Details

diff --git a/bdi-jade/src/bdi4jade/belief/AbstractBelief.java b/bdi-jade/src/bdi4jade/belief/AbstractBelief.java
index b8a8202..85cc5d8 100644
--- a/bdi-jade/src/bdi4jade/belief/AbstractBelief.java
+++ b/bdi-jade/src/bdi4jade/belief/AbstractBelief.java
@@ -26,8 +26,9 @@ import java.security.InvalidParameterException;
 import java.util.HashSet;
 import java.util.Set;
 
-import bdi4jade.core.BeliefBase;
 import bdi4jade.core.MetadataElementImpl;
+import bdi4jade.event.BeliefEvent;
+import bdi4jade.event.BeliefEvent.Action;
 
 /**
  * @author ingrid
@@ -121,6 +122,12 @@ public abstract class AbstractBelief<T> extends MetadataElementImpl implements
 		return this.name.hashCode();
 	}
 
+	protected void notifyBeliefBases(BeliefEvent beliefEvent) {
+		for (BeliefBase beliefBase : beliefBases) {
+			beliefBase.notifyBeliefChanged(beliefEvent);
+		}
+	}
+
 	/**
 	 * Removes a belief base that does not contain this belief anymore. The
 	 * agent whose capability does not contain this belief in the belief base
@@ -139,7 +146,11 @@ public abstract class AbstractBelief<T> extends MetadataElementImpl implements
 	 * @param value
 	 *            the new value.
 	 */
-	public abstract void setValue(T value);
+	public final void setValue(T value) {
+		Object oldValue = getValue();
+		updateValue(value);
+		notifyBeliefBases(new BeliefEvent(this, Action.BELIEF_UPDATED, oldValue));
+	}
 
 	/**
 	 * @see java.lang.Object#toString()
@@ -150,4 +161,6 @@ public abstract class AbstractBelief<T> extends MetadataElementImpl implements
 				.toString();
 	}
 
+	protected abstract void updateValue(T value);
+
 }
diff --git a/bdi-jade/src/bdi4jade/belief/AbstractBeliefSet.java b/bdi-jade/src/bdi4jade/belief/AbstractBeliefSet.java
new file mode 100644
index 0000000..953ccad
--- /dev/null
+++ b/bdi-jade/src/bdi4jade/belief/AbstractBeliefSet.java
@@ -0,0 +1,89 @@
+//----------------------------------------------------------------------------
+// Copyright (C) 2011  Ingrid Nunes
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// 
+// To contact the authors:
+// http://inf.ufrgs.br/~ingridnunes/bdi4jade/
+//
+//----------------------------------------------------------------------------
+
+package bdi4jade.belief;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import bdi4jade.event.BeliefEvent;
+import bdi4jade.event.BeliefEvent.Action;
+
+/**
+ * @author ingrid
+ * 
+ */
+public abstract class AbstractBeliefSet<T> extends AbstractBelief<Set<T>>
+		implements BeliefSet<T> {
+
+	private static final long serialVersionUID = 8345025506647930L;
+
+	/**
+	 * Creates a new transient belief set with the provided name.
+	 * 
+	 * @param name
+	 *            the name of this belief set.
+	 */
+	public AbstractBeliefSet(String name) {
+		super(name, new HashSet<T>());
+	}
+
+	/**
+	 * Creates a transient belief set.
+	 * 
+	 * @param name
+	 *            the name of the belief set.
+	 * @param values
+	 *            the initial values of this belief set.
+	 */
+	public AbstractBeliefSet(String name, Set<T> values) {
+		super(name, values);
+	}
+
+	protected abstract void addSetValue(T value);
+
+	/**
+	 * @see bdi4jade.belief.BeliefSet#addValue(java.lang.Object)
+	 */
+	@Override
+	public final void addValue(T value) {
+		if (!hasValue(value)) {
+			addSetValue(value);
+			notifyBeliefBases(new BeliefEvent(this, Action.BELIEF_ADDED, value));
+		}
+	}
+
+	protected abstract boolean removeSetValue(T value);
+
+	/**
+	 * @see bdi4jade.belief.BeliefSet#removeValue(java.lang.Object)
+	 */
+	@Override
+	public final boolean removeValue(T value) {
+		boolean removed = removeSetValue(value);
+		if (removed) {
+			notifyBeliefBases(new BeliefEvent(this, Action.BELIEF_ADDED, value));
+		}
+		return removed;
+	}
+
+}
\ No newline at end of file
diff --git a/bdi-jade/src/bdi4jade/belief/Belief.java b/bdi-jade/src/bdi4jade/belief/Belief.java
index 422c7e4..ecf353a 100644
--- a/bdi-jade/src/bdi4jade/belief/Belief.java
+++ b/bdi-jade/src/bdi4jade/belief/Belief.java
@@ -27,7 +27,6 @@ import jade.content.Concept;
 import java.io.Serializable;
 import java.util.Set;
 
-import bdi4jade.core.BeliefBase;
 import bdi4jade.core.MetadataElement;
 
 /**
diff --git a/bdi-jade/src/bdi4jade/belief/PersistentBelief.java b/bdi-jade/src/bdi4jade/belief/PersistentBelief.java
index b712f04..6eea7dd 100644
--- a/bdi-jade/src/bdi4jade/belief/PersistentBelief.java
+++ b/bdi-jade/src/bdi4jade/belief/PersistentBelief.java
@@ -54,7 +54,7 @@ public class PersistentBelief<T> extends AbstractBelief<T> {
 	/**
 	 * @see bdi4jade.belief.Belief#setValue(java.lang.Object)
 	 */
-	public void setValue(T value) {
+	protected void updateValue(T value) {
 		// XXX PersistentBelief.setValue(T value)
 	}
 
diff --git a/bdi-jade/src/bdi4jade/belief/TransientBelief.java b/bdi-jade/src/bdi4jade/belief/TransientBelief.java
index 9ce8411..123319d 100644
--- a/bdi-jade/src/bdi4jade/belief/TransientBelief.java
+++ b/bdi-jade/src/bdi4jade/belief/TransientBelief.java
@@ -66,9 +66,10 @@ public class TransientBelief<T> extends AbstractBelief<T> {
 	}
 
 	/**
-	 * @see bdi4jade.belief.Belief#setValue(java.lang.Object)
+	 * @see bdi4jade.belief.AbstractBelief#updateValue(java.lang.Object)
 	 */
-	public void setValue(T value) {
+	@Override
+	protected void updateValue(T value) {
 		this.value = value;
 	}
 
diff --git a/bdi-jade/src/bdi4jade/belief/TransientBeliefSet.java b/bdi-jade/src/bdi4jade/belief/TransientBeliefSet.java
index 87046eb..02ccb14 100644
--- a/bdi-jade/src/bdi4jade/belief/TransientBeliefSet.java
+++ b/bdi-jade/src/bdi4jade/belief/TransientBeliefSet.java
@@ -33,11 +33,13 @@ import java.util.Set;
  * 
  * @author ingrid
  */
-public class TransientBeliefSet<T> extends TransientBelief<Set<T>> implements
+public class TransientBeliefSet<T> extends AbstractBeliefSet<T> implements
 		BeliefSet<T> {
 
 	private static final long serialVersionUID = 8345025506647930L;
 
+	private Set<T> value;
+
 	/**
 	 * Creates a new transient belief set with the provided name.
 	 * 
@@ -64,11 +66,19 @@ public class TransientBeliefSet<T> extends TransientBelief<Set<T>> implements
 	 * @see bdi4jade.belief.BeliefSet#addValue(java.lang.Object)
 	 */
 	@Override
-	public void addValue(T value) {
+	protected void addSetValue(T value) {
 		this.value.add(value);
 	}
 
 	/**
+	 * @see bdi4jade.belief.AbstractBelief#getValue()
+	 */
+	@Override
+	public Set<T> getValue() {
+		return value;
+	}
+
+	/**
 	 * @see bdi4jade.belief.BeliefSet#hasValue(java.lang.Object)
 	 */
 	@Override
@@ -88,8 +98,16 @@ public class TransientBeliefSet<T> extends TransientBelief<Set<T>> implements
 	 * @see bdi4jade.belief.BeliefSet#removeValue(java.lang.Object)
 	 */
 	@Override
-	public boolean removeValue(T value) {
+	protected boolean removeSetValue(T value) {
 		return this.value.remove(value);
 	}
 
+	/**
+	 * @see bdi4jade.belief.AbstractBelief#updateValue(java.lang.Object)
+	 */
+	@Override
+	protected void updateValue(Set<T> value) {
+		this.value = value;
+	}
+
 }
\ No newline at end of file
diff --git a/bdi-jade/src/bdi4jade/core/Capability.java b/bdi-jade/src/bdi4jade/core/Capability.java
index 589f497..8d50baf 100644
--- a/bdi-jade/src/bdi4jade/core/Capability.java
+++ b/bdi-jade/src/bdi4jade/core/Capability.java
@@ -31,6 +31,9 @@ import java.util.Set;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import bdi4jade.belief.BeliefBase;
+import bdi4jade.plan.PlanLibrary;
+
 /**
  * This capability represents a component that aggregates the mental attitudes
  * defined by the BDI architecture. It has a belief base with the associated
diff --git a/bdi-jade/src/bdi4jade/event/BeliefEvent.java b/bdi-jade/src/bdi4jade/event/BeliefEvent.java
index 92bc836..f819e6d 100644
--- a/bdi-jade/src/bdi4jade/event/BeliefEvent.java
+++ b/bdi-jade/src/bdi4jade/event/BeliefEvent.java
@@ -39,7 +39,7 @@ public class BeliefEvent implements AgentAction {
 	 * @author ingrid
 	 */
 	public enum Action {
-		BELIEF_ADDED, BELIEF_REMOVED, BELIEF_UPDATED
+		BELIEF_ADDED, BELIEF_REMOVED, BELIEF_SET_VALUE_ADDED, BELIEF_SET_VALUE_REMOVED, BELIEF_UPDATED
 	}
 
 	private static final long serialVersionUID = 1749139390567331926L;
diff --git a/bdi-jade/src/bdi4jade/plan/AbstractPlan.java b/bdi-jade/src/bdi4jade/plan/AbstractPlan.java
index 3ecf93e..fb0c5cf 100644
--- a/bdi-jade/src/bdi4jade/plan/AbstractPlan.java
+++ b/bdi-jade/src/bdi4jade/plan/AbstractPlan.java
@@ -29,7 +29,6 @@ import java.util.HashSet;
 import java.util.Set;
 
 import bdi4jade.core.MetadataElementImpl;
-import bdi4jade.core.PlanLibrary;
 import bdi4jade.exception.PlanInstantiationException;
 import bdi4jade.goal.Goal;
 import bdi4jade.message.MessageGoal;
diff --git a/bdi-jade/src/bdi4jade/plan/AbstractPlanBody.java b/bdi-jade/src/bdi4jade/plan/AbstractPlanBody.java
index 0105c1f..a00beff 100644
--- a/bdi-jade/src/bdi4jade/plan/AbstractPlanBody.java
+++ b/bdi-jade/src/bdi4jade/plan/AbstractPlanBody.java
@@ -29,7 +29,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.core.Intention;
 import bdi4jade.event.GoalEvent;
 import bdi4jade.event.GoalFinishedEvent;
diff --git a/bdi-jade/src/bdi4jade/plan/FSMPlanBody.java b/bdi-jade/src/bdi4jade/plan/FSMPlanBody.java
index 0aa9529..9db7bcd 100644
--- a/bdi-jade/src/bdi4jade/plan/FSMPlanBody.java
+++ b/bdi-jade/src/bdi4jade/plan/FSMPlanBody.java
@@ -23,7 +23,7 @@
 package bdi4jade.plan;
 
 import jade.core.behaviours.FSMBehaviour;
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.core.Intention;
 import bdi4jade.event.GoalEvent;
 import bdi4jade.event.GoalFinishedEvent;
diff --git a/bdi-jade/src/bdi4jade/plan/ParallelActionPlanBody.java b/bdi-jade/src/bdi4jade/plan/ParallelActionPlanBody.java
index 3cd622a..effe1d3 100644
--- a/bdi-jade/src/bdi4jade/plan/ParallelActionPlanBody.java
+++ b/bdi-jade/src/bdi4jade/plan/ParallelActionPlanBody.java
@@ -22,7 +22,7 @@
 
 package bdi4jade.plan;
 
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.core.Intention;
 import bdi4jade.event.GoalEvent;
 import bdi4jade.event.GoalFinishedEvent;
diff --git a/bdi-jade/src/bdi4jade/plan/Plan.java b/bdi-jade/src/bdi4jade/plan/Plan.java
index 849b1fd..e28dba9 100644
--- a/bdi-jade/src/bdi4jade/plan/Plan.java
+++ b/bdi-jade/src/bdi4jade/plan/Plan.java
@@ -24,7 +24,6 @@ package bdi4jade.plan;
 
 import jade.lang.acl.ACLMessage;
 import bdi4jade.core.MetadataElement;
-import bdi4jade.core.PlanLibrary;
 import bdi4jade.exception.PlanInstantiationException;
 import bdi4jade.goal.Goal;
 import bdi4jade.message.MessageGoal;
diff --git a/bdi-jade/src/bdi4jade/plan/PlanBody.java b/bdi-jade/src/bdi4jade/plan/PlanBody.java
index 6d36b8c..eefe2bc 100644
--- a/bdi-jade/src/bdi4jade/plan/PlanBody.java
+++ b/bdi-jade/src/bdi4jade/plan/PlanBody.java
@@ -23,7 +23,7 @@
 package bdi4jade.plan;
 
 import jade.core.behaviours.Behaviour;
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.core.Intention;
 import bdi4jade.event.GoalFinishedEvent;
 import bdi4jade.event.GoalListener;
diff --git a/bdi-jade/src/bdi4jade/plan/SequentialActionPlanBody.java b/bdi-jade/src/bdi4jade/plan/SequentialActionPlanBody.java
index a1d4f54..71da478 100644
--- a/bdi-jade/src/bdi4jade/plan/SequentialActionPlanBody.java
+++ b/bdi-jade/src/bdi4jade/plan/SequentialActionPlanBody.java
@@ -22,7 +22,7 @@
 
 package bdi4jade.plan;
 
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.core.Intention;
 import bdi4jade.event.GoalEvent;
 import bdi4jade.event.GoalFinishedEvent;
diff --git a/bdi-jade/src/bdi4jade/util/goal/BeliefGoal.java b/bdi-jade/src/bdi4jade/util/goal/BeliefGoal.java
index 7c57187..83cd683 100644
--- a/bdi-jade/src/bdi4jade/util/goal/BeliefGoal.java
+++ b/bdi-jade/src/bdi4jade/util/goal/BeliefGoal.java
@@ -22,7 +22,7 @@
 
 package bdi4jade.util.goal;
 
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.goal.Goal;
 
 /**
diff --git a/bdi-jade/src/bdi4jade/util/goal/BeliefSetValueGoal.java b/bdi-jade/src/bdi4jade/util/goal/BeliefSetValueGoal.java
index 70a04df..30f22e9 100644
--- a/bdi-jade/src/bdi4jade/util/goal/BeliefSetValueGoal.java
+++ b/bdi-jade/src/bdi4jade/util/goal/BeliefSetValueGoal.java
@@ -22,8 +22,8 @@
 
 package bdi4jade.util.goal;
 
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.belief.BeliefSet;
-import bdi4jade.core.BeliefBase;
 
 /**
  * This class represents the goal of an agent believe in a belief that contains
diff --git a/bdi-jade/src/bdi4jade/util/goal/BeliefValueGoal.java b/bdi-jade/src/bdi4jade/util/goal/BeliefValueGoal.java
index 29dfe06..6fd449c 100644
--- a/bdi-jade/src/bdi4jade/util/goal/BeliefValueGoal.java
+++ b/bdi-jade/src/bdi4jade/util/goal/BeliefValueGoal.java
@@ -23,7 +23,7 @@
 package bdi4jade.util.goal;
 
 import bdi4jade.belief.Belief;
-import bdi4jade.core.BeliefBase;
+import bdi4jade.belief.BeliefBase;
 
 /**
  * @author ingrid
diff --git a/bdi-jade/src/bdi4jade/util/reasoning/DefaultBeliefRevisionStrategy.java b/bdi-jade/src/bdi4jade/util/reasoning/DefaultBeliefRevisionStrategy.java
index bbedc83..263641d 100644
--- a/bdi-jade/src/bdi4jade/util/reasoning/DefaultBeliefRevisionStrategy.java
+++ b/bdi-jade/src/bdi4jade/util/reasoning/DefaultBeliefRevisionStrategy.java
@@ -22,8 +22,8 @@
 
 package bdi4jade.util.reasoning;
 
+import bdi4jade.belief.BeliefBase;
 import bdi4jade.core.BDIAgent;
-import bdi4jade.core.BeliefBase;
 import bdi4jade.core.Capability;
 import bdi4jade.reasoning.BeliefRevisionStrategy;
 
diff --git a/bdi-jade-test/src/bdi4jade/examples/BDIAgent1.java b/bdi-jade-test/src/bdi4jade/examples/BDIAgent1.java
index ccff86b..1ea5245 100644
--- a/bdi-jade-test/src/bdi4jade/examples/BDIAgent1.java
+++ b/bdi-jade-test/src/bdi4jade/examples/BDIAgent1.java
@@ -23,7 +23,7 @@
 package bdi4jade.examples;
 
 import bdi4jade.core.BDIAgent;
-import bdi4jade.examples.compositegoal.CompositeGoalCapability;
+import bdi4jade.examples.ping.PingPongCapability;
 
 /**
  * @author ingrid
@@ -36,12 +36,11 @@ public class BDIAgent1 extends BDIAgent {
 
 	@Override
 	protected void init() {
-		// this.addCapability(new BlocksWorldCapability());
+		this.addCapability(new PingPongCapability(BDIAgent1.MY_NAME,
+				BDIAgent2.MY_NAME));
 		// this.addCapability(new PlanFailedCapability());
 		// this.addCapability(new SubgoalCapability());
-		// this.addCapability(new PingPongCapability(BDIAgent1.MY_NAME,
-		// BDIAgent2.MY_NAME));
-		this.addCapability(new CompositeGoalCapability(true));
+		// this.addCapability(new CompositeGoalCapability(true));
 		// this.addCapability(new CompositeGoalCapability(false));
 	}
 }