bdi4jade
Changes
bdi-jade/src/bdi4jade/core/Capability.java 17(+11 -6)
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;
+ }
+
+}
bdi-jade/src/bdi4jade/core/Capability.java 17(+11 -6)
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