bdi4jade

New belief types.

10/9/2015 7:48:56 PM

Details

diff --git a/bdi-jade/src/bdi4jade/belief/AttributeBelief.java b/bdi-jade/src/bdi4jade/belief/AttributeBelief.java
new file mode 100644
index 0000000..783f01b
--- /dev/null
+++ b/bdi-jade/src/bdi4jade/belief/AttributeBelief.java
@@ -0,0 +1,96 @@
+//----------------------------------------------------------------------------
+// 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/prosoft/bdi4jade/
+//
+//----------------------------------------------------------------------------
+
+package bdi4jade.belief;
+
+import java.lang.reflect.Field;
+
+import bdi4jade.core.Capability;
+
+/**
+ * This class extends the {@link AbstractBelief} class and represents a belief
+ * stored in an attribute of a capability.
+ * 
+ * @author Ingrid Nunes
+ * 
+ * @param <V>
+ *            the type of the belief value.
+ */
+public class AttributeBelief<V> extends AbstractBelief<String, V> {
+
+	private static final long serialVersionUID = 6600374179600475835L;
+
+	private final Field field;
+	private final Capability object;
+
+	/**
+	 * Initializes an attribute belief with the field that represents the belief
+	 * and the capability it belongs to.
+	 * 
+	 * @param object
+	 *            the capability to which this belief belongs to.
+	 * @param field
+	 *            the field that represents this belief.
+	 */
+	public AttributeBelief(Capability object, Field field) {
+		super(field.getName());
+		this.object = object;
+		this.field = field;
+	}
+
+	/**
+	 * Gets the value from the field that represents this belief.
+	 * 
+	 * @see bdi4jade.belief.Belief#getValue()
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public V getValue() {
+		field.setAccessible(true);
+		V value = null;
+		try {
+			value = (V) field.get(object);
+		} catch (IllegalAccessException iae) {
+
+		}
+		field.setAccessible(false);
+		return value;
+	}
+
+	/**
+	 * Sets the value given as parameter in the field that represents this
+	 * belief.
+	 * 
+	 * @see bdi4jade.belief.AbstractBelief#updateValue(java.lang.Object)
+	 */
+	@Override
+	protected void updateValue(V value) {
+		field.setAccessible(true);
+		try {
+			field.set(object, value);
+		} catch (IllegalAccessException iae) {
+
+		}
+		field.setAccessible(false);
+	}
+
+}
diff --git a/bdi-jade/src/bdi4jade/belief/NamedBelief.java b/bdi-jade/src/bdi4jade/belief/NamedBelief.java
new file mode 100644
index 0000000..640b570
--- /dev/null
+++ b/bdi-jade/src/bdi4jade/belief/NamedBelief.java
@@ -0,0 +1,69 @@
+//----------------------------------------------------------------------------
+// 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/prosoft/bdi4jade/
+//
+//----------------------------------------------------------------------------
+
+package bdi4jade.belief;
+
+/**
+ * This class extends the {@link TransientBelief} class and represents a
+ * transient belief with a name given by a string.
+ * 
+ * @author Ingrid Nunes
+ * 
+ * @param <V>
+ *            the type of the belief value.
+ */
+public class NamedBelief<V> extends TransientBelief<String, V> {
+
+	private static final long serialVersionUID = -1803100612413928203L;
+
+	/**
+	 * The default constructor. It should be only used if persistence frameworks
+	 * are used.
+	 */
+	public NamedBelief() {
+
+	}
+
+	/**
+	 * Initializes a named belief with its name.
+	 * 
+	 * @param name
+	 *            the belief name.
+	 */
+	public NamedBelief(String name) {
+		super(name);
+	}
+
+	/**
+	 * Initializes a named belief with its name and a initial value.
+	 * 
+	 * @param name
+	 *            the belief name.
+	 * @param value
+	 *            the initial belief value.
+	 */
+	public NamedBelief(String name, V value) {
+		super(name);
+		this.value = value;
+	}
+
+}
diff --git a/bdi-jade/src/bdi4jade/core/Capability.java b/bdi-jade/src/bdi4jade/core/Capability.java
index ded3501..85dd5de 100644
--- a/bdi-jade/src/bdi4jade/core/Capability.java
+++ b/bdi-jade/src/bdi4jade/core/Capability.java
@@ -38,8 +38,10 @@ import java.util.Set;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import bdi4jade.belief.AttributeBelief;
 import bdi4jade.belief.Belief;
 import bdi4jade.belief.BeliefBase;
+import bdi4jade.belief.NamedBelief;
 import bdi4jade.belief.TransientBelief;
 import bdi4jade.belief.TransientBeliefSet;
 import bdi4jade.goal.Goal;
@@ -222,18 +224,21 @@ public class Capability implements Serializable {
 						Belief<?, ?> belief = (Belief<?, ?>) field.get(this);
 						this.getBeliefBase().addBelief(belief);
 					} else {
-						throw new ClassCastException("Field " + field.getName()
-								+ " should be a Belief");
+						this.getBeliefBase().addBelief(
+								new AttributeBelief(this, field));
 					}
 				} else if (field
 						.isAnnotationPresent(bdi4jade.annotation.TransientBelief.class)) {
 					bdi4jade.annotation.TransientBelief annotation = field
 							.getAnnotation(bdi4jade.annotation.TransientBelief.class);
-					String name = "".equals(annotation.name()) ? field
-							.getName() : annotation.name();
 					Object value = field.get(this);
-					this.getBeliefBase().addBelief(
-							new TransientBelief(name, value));
+					if ("".equals(annotation.name())) {
+						this.getBeliefBase().addBelief(
+								new NamedBelief(field.getName(), value));
+					} else {
+						this.getBeliefBase().addBelief(
+								new TransientBelief(annotation.name(), value));
+					}
 				} else if (field
 						.isAnnotationPresent(bdi4jade.annotation.TransientBeliefSet.class)) {
 					bdi4jade.annotation.TransientBeliefSet annotation = field