bdi4jade
Changes
bdi-jade-test/.classpath 14(+14 -0)
bdi-jade-test/.project 17(+17 -0)
bdi-jade-test/APDescription.txt 1(+1 -0)
bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/BlocksWorldCapability.java 140(+140 -0)
bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/AchieveBlocksStacked.java 37(+37 -0)
bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/AchieveOnPlanBody.java 92(+92 -0)
bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/PerformMovePlanBody.java 77(+77 -0)
bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/TopLevelPlanBody.java 81(+81 -0)
bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/CompositeGoalCapability.java 88(+88 -0)
Details
bdi-jade-test/.classpath 14(+14 -0)
diff --git a/bdi-jade-test/.classpath b/bdi-jade-test/.classpath
new file mode 100644
index 0000000..8f37b4a
--- /dev/null
+++ b/bdi-jade-test/.classpath
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/bdi-jade"/>
+ <classpathentry kind="lib" path="/libs/commons-logging/log4j-1.2.15.jar"/>
+ <classpathentry kind="lib" path="/libs/jade/commons-codec-1.3.jar"/>
+ <classpathentry kind="lib" path="/libs/jade/http.jar"/>
+ <classpathentry kind="lib" path="/libs/jade/iiop.jar"/>
+ <classpathentry kind="lib" path="/libs/jade/jade.jar"/>
+ <classpathentry kind="lib" path="/libs/jade/jadeTools.jar"/>
+ <classpathentry kind="lib" path="/libs/commons-logging/commons-logging-1.0.4.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
bdi-jade-test/.project 17(+17 -0)
diff --git a/bdi-jade-test/.project b/bdi-jade-test/.project
new file mode 100644
index 0000000..c8a61fe
--- /dev/null
+++ b/bdi-jade-test/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/bdi-jade-test/.settings/org.eclipse.jdt.core.prefs b/bdi-jade-test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..06e978e
--- /dev/null
+++ b/bdi-jade-test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Jan 25 22:46:55 EST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
bdi-jade-test/APDescription.txt 1(+1 -0)
diff --git a/bdi-jade-test/APDescription.txt b/bdi-jade-test/APDescription.txt
new file mode 100644
index 0000000..5bd441d
--- /dev/null
+++ b/bdi-jade-test/APDescription.txt
@@ -0,0 +1 @@
+( ap-description :name "ingridnunes:1099/JADE" :ap-services (set ( ap-service :name fipa.mts.mtp.http.std :type fipa.mts.mtp.http.std :addresses (sequence http://10.10.10.194:7778/acc))))
diff --git a/bdi-jade-test/MTPs-Main-Container.txt b/bdi-jade-test/MTPs-Main-Container.txt
new file mode 100644
index 0000000..fdd56c1
--- /dev/null
+++ b/bdi-jade-test/MTPs-Main-Container.txt
@@ -0,0 +1 @@
+http://10.10.10.194:7778/acc
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/AgentStarter.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/AgentStarter.java
new file mode 100644
index 0000000..f99b559
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/AgentStarter.java
@@ -0,0 +1,71 @@
+package br.pucrio.inf.les.bdijade.examples;
+
+import jade.BootProfileImpl;
+import jade.core.Agent;
+import jade.core.ProfileImpl;
+import jade.wrapper.AgentContainer;
+import jade.wrapper.AgentController;
+import jade.wrapper.PlatformController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/*
+ * Created on 29/01/2010 11:18:23
+ */
+
+/**
+ * @author ingrid
+ *
+ */
+public class AgentStarter {
+
+ private static final Map<String, Agent> agents;
+
+ static {
+ agents = new HashMap<String, Agent>();
+ agents.put(BDIAgent1.MY_NAME, new BDIAgent1());
+// agents.put(BDIAgent2.MY_NAME, new BDIAgent2());
+ };
+
+ public static void main(String[] args) {
+ new AgentStarter();
+ }
+
+ private ProfileImpl bootProfile;
+ private final Log log;
+
+ private jade.core.Runtime runtime;
+
+ public AgentStarter() {
+ log = LogFactory.getLog(this.getClass());
+
+ List<String> params = new ArrayList<String>();
+ params.add("-gui");
+ params.add("-detect-main:false");
+
+ log.info("Plataform parameters: " + params);
+
+ this.bootProfile = new BootProfileImpl(params.toArray(new String[0]));
+
+ this.runtime = jade.core.Runtime.instance();
+ PlatformController controller = runtime
+ .createMainContainer(bootProfile);
+
+ for (String agentName : agents.keySet()) {
+ try {
+ AgentController ac = ((AgentContainer) controller)
+ .acceptNewAgent(agentName, agents.get(agentName));
+ ac.start();
+ } catch (Exception e) {
+ log.error(e);
+ }
+ }
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/BDIAgent1.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/BDIAgent1.java
new file mode 100644
index 0000000..dfa6608
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/BDIAgent1.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 31/01/2010 11:30:45
+ */
+package br.pucrio.inf.les.bdijade.examples;
+
+import br.pucrio.inf.les.bdijade.core.BDIAgent;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.BlocksWorldCapability;
+import br.pucrio.inf.les.bdijade.examples.compositegoal.CompositeGoalCapability;
+import br.pucrio.inf.les.bdijade.examples.ping.PingPongCapability;
+import br.pucrio.inf.les.bdijade.examples.planfailed.PlanFailedCapability;
+import br.pucrio.inf.les.bdijade.examples.subgoal.SubgoalCapability;
+
+/**
+ * @author ingrid
+ *
+ */
+public class BDIAgent1 extends BDIAgent {
+
+ private static final long serialVersionUID = -8505187840524213951L;
+ public static final String MY_NAME = "AGENT_1";
+
+ @Override
+ protected void init() {
+// this.addCapability(new BlocksWorldCapability());
+// 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(false));
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/BDIAgent2.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/BDIAgent2.java
new file mode 100644
index 0000000..5b2ca0b
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/BDIAgent2.java
@@ -0,0 +1,24 @@
+/*
+ * Created on 31/01/2010 15:49:17
+ */
+package br.pucrio.inf.les.bdijade.examples;
+
+import br.pucrio.inf.les.bdijade.core.BDIAgent;
+import br.pucrio.inf.les.bdijade.examples.ping.PingPongCapability;
+
+/**
+ * @author ingrid
+ *
+ */
+public class BDIAgent2 extends BDIAgent {
+
+ private static final long serialVersionUID = -8505187840524213951L;
+ public static final String MY_NAME = "AGENT_2";
+
+ @Override
+ protected void init() {
+ this.addCapability(new PingPongCapability(BDIAgent2.MY_NAME,
+ BDIAgent1.MY_NAME));
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/BlocksWorldCapability.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/BlocksWorldCapability.java
new file mode 100644
index 0000000..c649a87
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/BlocksWorldCapability.java
@@ -0,0 +1,140 @@
+/*
+ * Created on 26/01/2010 16:40:28
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.belief.Belief;
+import br.pucrio.inf.les.bdijade.belief.BeliefSet;
+import br.pucrio.inf.les.bdijade.belief.TransientBeliefSet;
+import br.pucrio.inf.les.bdijade.core.BeliefBase;
+import br.pucrio.inf.les.bdijade.core.Capability;
+import br.pucrio.inf.les.bdijade.core.PlanLibrary;
+import br.pucrio.inf.les.bdijade.event.GoalEvent;
+import br.pucrio.inf.les.bdijade.event.GoalListener;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Clear;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.On;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Thing;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.goal.AchieveBlocksStacked;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.goal.PerformMove;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.plan.AchieveOnPlanBody;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.plan.ClearPlanBody;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.plan.PerformMovePlanBody;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.plan.TopLevelPlanBody;
+import br.pucrio.inf.les.bdijade.goal.Goal;
+import br.pucrio.inf.les.bdijade.plan.Plan;
+import br.pucrio.inf.les.bdijade.util.goal.BeliefSetValueGoal;
+import br.pucrio.inf.les.bdijade.util.plan.SimplePlan;
+
+/**
+ * @author ingrid
+ *
+ */
+public class BlocksWorldCapability extends Capability implements GoalListener {
+
+ public static final String BELIEF_CLEAR = "clear";
+ public static final String BELIEF_ON = "on";
+
+ private static final Log log = LogFactory
+ .getLog(BlocksWorldCapability.class);
+ private static final long serialVersionUID = -4800805796961540570L;
+
+ private static final On[] target = { new On(Thing.BLOCK_9, Thing.TABLE),
+ new On(Thing.BLOCK_8, Thing.BLOCK_9),
+ new On(Thing.BLOCK_7, Thing.BLOCK_8),
+ new On(Thing.BLOCK_6, Thing.BLOCK_7),
+ new On(Thing.BLOCK_5, Thing.BLOCK_6),
+ new On(Thing.BLOCK_4, Thing.BLOCK_5),
+ new On(Thing.BLOCK_3, Thing.BLOCK_4),
+ new On(Thing.BLOCK_2, Thing.BLOCK_3),
+ new On(Thing.BLOCK_1, Thing.BLOCK_2) };
+
+ private static Set<Belief<?>> getBeliefs() {
+ Set<Belief<?>> beliefs = new HashSet<Belief<?>>();
+
+ BeliefSet<On> on = new TransientBeliefSet<On>(BELIEF_ON);
+ on.addValue(new On(Thing.BLOCK_5, Thing.TABLE));
+ on.addValue(new On(Thing.BLOCK_2, Thing.BLOCK_5));
+ on.addValue(new On(Thing.BLOCK_7, Thing.BLOCK_2));
+ on.addValue(new On(Thing.BLOCK_1, Thing.BLOCK_7));
+ on.addValue(new On(Thing.BLOCK_8, Thing.BLOCK_1));
+ on.addValue(new On(Thing.BLOCK_4, Thing.BLOCK_8));
+ on.addValue(new On(Thing.BLOCK_3, Thing.BLOCK_4));
+ on.addValue(new On(Thing.BLOCK_6, Thing.BLOCK_3));
+ on.addValue(new On(Thing.BLOCK_9, Thing.BLOCK_6));
+ beliefs.add(on);
+
+ BeliefSet<Clear> clear = new TransientBeliefSet<Clear>(BELIEF_CLEAR);
+ clear.addValue(new Clear(Thing.BLOCK_9));
+ clear.addValue(new Clear(Thing.TABLE));
+ beliefs.add(clear);
+
+ return beliefs;
+ }
+
+ private static Set<Plan> getPlans() {
+ Set<Plan> plans = new HashSet<Plan>();
+
+ plans.add(new SimplePlan(BeliefSetValueGoal.class,
+ AchieveOnPlanBody.class) {
+ @Override
+ protected boolean matchesContext(Goal goal) {
+ return BlocksWorldCapability.BELIEF_ON
+ .equals(((BeliefSetValueGoal<?>) goal)
+ .getBeliefSetName());
+ }
+ });
+ plans
+ .add(new SimplePlan(BeliefSetValueGoal.class,
+ ClearPlanBody.class) {
+ @Override
+ protected boolean matchesContext(Goal goal) {
+ return BlocksWorldCapability.BELIEF_CLEAR
+ .equals(((BeliefSetValueGoal<?>) goal)
+ .getBeliefSetName());
+ }
+ });
+ plans.add(new SimplePlan(PerformMove.class, PerformMovePlanBody.class) {
+ @Override
+ @SuppressWarnings("unchecked")
+ protected boolean matchesContext(Goal goal) {
+ if (goal instanceof PerformMove) {
+ PerformMove performMove = (PerformMove) goal;
+ BeliefSet<Clear> set = (BeliefSet<Clear>) getPlanLibrary()
+ .getCapability().getBeliefBase().getBelief(
+ BlocksWorldCapability.BELIEF_CLEAR);
+ return set.hasValue(new Clear(performMove.getThing1()))
+ && set.hasValue(new Clear(performMove.getThing2()));
+ }
+ return false;
+ }
+ });
+ plans.add(new SimplePlan(AchieveBlocksStacked.class,
+ TopLevelPlanBody.class));
+
+ return plans;
+ }
+
+ public BlocksWorldCapability() {
+ super(new BeliefBase(getBeliefs()), new PlanLibrary(getPlans()));
+ }
+
+ @Override
+ public void goalPerformed(GoalEvent event) {
+ if (event.getGoal() instanceof AchieveBlocksStacked) {
+ log.info("Goal achieved!! Removing capability of this agent...");
+ myAgent.removeCapability(this);
+ }
+ }
+
+ @Override
+ protected void setup() {
+ myAgent.addGoal(new AchieveBlocksStacked(target), this);
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Block.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Block.java
new file mode 100644
index 0000000..c7799b6
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Block.java
@@ -0,0 +1,41 @@
+/*
+ * Created on 27/01/2010 16:21:43
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.domain;
+
+/**
+ * @author ingrid
+ *
+ */
+public class Block implements Thing {
+
+ private int id;
+
+ public Block(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Block) {
+ Block b = (Block) obj;
+ return this.id == b.id;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return new Integer(id).hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "Block#" + id;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Clear.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Clear.java
new file mode 100644
index 0000000..9389f57
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Clear.java
@@ -0,0 +1,45 @@
+package br.pucrio.inf.les.bdijade.examples.blocksworld.domain;
+
+/*
+ * Created on 26/01/2010 10:16:20
+ */
+
+/**
+ * @author ingrid
+ *
+ */
+public class Clear {
+
+ private Thing thing;
+
+ public Clear(Thing thing) {
+ this.thing = thing;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Clear) {
+ Clear other = (Clear) obj;
+ return this.thing.equals(other.thing);
+ } else {
+ return false;
+ }
+ }
+
+ public Thing getThing() {
+ return thing;
+ }
+
+ @Override
+ public int hashCode() {
+ return thing.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer("CLEAR");
+ sb.append("_").append(thing);
+ return sb.toString();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/On.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/On.java
new file mode 100644
index 0000000..435b235
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/On.java
@@ -0,0 +1,53 @@
+package br.pucrio.inf.les.bdijade.examples.blocksworld.domain;
+
+/*
+ * Created on 26/01/2010 10:08:37
+ */
+
+/**
+ * @author ingrid
+ *
+ */
+public class On {
+
+ private Thing thing1;
+ private Thing thing2;
+
+ public On(Thing thing1, Thing thing2) {
+ this.thing1 = thing1;
+ this.thing2 = thing2;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof On) {
+ On other = (On) obj;
+ return this.thing1.equals(other.thing1)
+ && this.thing2.equals(other.thing2);
+ } else {
+ return false;
+ }
+ }
+
+ public Thing getThing1() {
+ return thing1;
+ }
+
+ public Thing getThing2() {
+ return thing2;
+ }
+
+ @Override
+ public int hashCode() {
+ return (int) Math.pow(thing1.hashCode(), thing2.hashCode());
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer("ON");
+ sb.append("_").append(thing1);
+ sb.append("_").append(thing2);
+ return sb.toString();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Table.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Table.java
new file mode 100644
index 0000000..3e33114
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Table.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 27/01/2010 16:23:23
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.domain;
+
+/**
+ * @author ingrid
+ *
+ */
+public class Table implements Thing {
+
+ public Table() {
+
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Table) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "Table";
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Thing.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Thing.java
new file mode 100644
index 0000000..6a4e7f7
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/domain/Thing.java
@@ -0,0 +1,26 @@
+package br.pucrio.inf.les.bdijade.examples.blocksworld.domain;
+
+/*
+ * Created on 26/01/2010 10:09:12
+ */
+
+/**
+ * @author ingrid
+ *
+ */
+public interface Thing {
+
+ public static final Table TABLE = new Table();
+ public static final Block BLOCK_1 = new Block(1);
+ public static final Block BLOCK_2 = new Block(2);
+ public static final Block BLOCK_3 = new Block(3);
+ public static final Block BLOCK_4 = new Block(4);
+ public static final Block BLOCK_5 = new Block(5);
+ public static final Block BLOCK_6 = new Block(6);
+ public static final Block BLOCK_7 = new Block(7);
+ public static final Block BLOCK_8 = new Block(8);
+ public static final Block BLOCK_9 = new Block(9);
+ public static final Thing[] THINGS = { TABLE, BLOCK_1, BLOCK_2, BLOCK_3,
+ BLOCK_4, BLOCK_5, BLOCK_6, BLOCK_7, BLOCK_8, BLOCK_9 };
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/AchieveBlocksStacked.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/AchieveBlocksStacked.java
new file mode 100644
index 0000000..e7497ba
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/AchieveBlocksStacked.java
@@ -0,0 +1,37 @@
+package br.pucrio.inf.les.bdijade.examples.blocksworld.goal;
+
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.On;
+import br.pucrio.inf.les.bdijade.goal.Goal;
+
+/*
+ * Created on 26/01/2010 10:55:09
+ */
+
+/**
+ * @author ingrid
+ *
+ */
+public class AchieveBlocksStacked implements Goal {
+
+ private static final long serialVersionUID = -8126833927953226126L;
+
+ private On[] target;
+
+ public AchieveBlocksStacked(On[] target) {
+ this.target = target;
+ }
+
+ public On[] getTarget() {
+ return target;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer("AchieveBlocksStacked: ");
+ for (On on : target) {
+ sb.append(on).append(" ");
+ }
+ return sb.toString();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/PerformMove.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/PerformMove.java
new file mode 100644
index 0000000..c4a4d02
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/goal/PerformMove.java
@@ -0,0 +1,38 @@
+/*
+ * Created on 26/01/2010 11:02:03
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.goal;
+
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Thing;
+import br.pucrio.inf.les.bdijade.goal.Goal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class PerformMove implements Goal {
+
+ private static final long serialVersionUID = 8286023371969088149L;
+
+ private Thing thing1;
+ private Thing thing2;
+
+ public PerformMove(Thing thing1, Thing thing2) {
+ this.thing1 = thing1;
+ this.thing2 = thing2;
+ }
+
+ public Thing getThing1() {
+ return thing1;
+ }
+
+ public Thing getThing2() {
+ return thing2;
+ }
+
+ @Override
+ public String toString() {
+ return "PerformMove: " + thing1 + " to " + thing2;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/AchieveOnPlanBody.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/AchieveOnPlanBody.java
new file mode 100644
index 0000000..61161cc
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/AchieveOnPlanBody.java
@@ -0,0 +1,92 @@
+/*
+ * Created on 26/01/2010 21:17:50
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.plan;
+
+import jade.core.behaviours.Behaviour;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.BlocksWorldCapability;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Clear;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.On;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Thing;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.goal.PerformMove;
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+import br.pucrio.inf.les.bdijade.util.goal.BeliefSetValueGoal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class AchieveOnPlanBody extends Behaviour implements PlanBody {
+ private static final long serialVersionUID = -5919677537834351951L;
+
+ private int counter;
+ private PlanInstance planInstance;
+ private Thing thing1;
+ private Thing thing2;
+
+ public AchieveOnPlanBody() {
+ this.counter = 0;
+ }
+
+ @Override
+ public void action() {
+ switch (counter) {
+ case 0:
+ if (new BeliefSetValueGoal<On>(BlocksWorldCapability.BELIEF_ON,
+ new On(thing1, thing2)).isAchieved(planInstance
+ .getBeliefBase())) {
+ counter = 6;
+ } else {
+ counter = checkClearAndDispatch(thing1) ? 1 : 2;
+ }
+ break;
+ case 2:
+ counter = checkClearAndDispatch(thing2) ? 3 : 4;
+ break;
+ case 4:
+ planInstance.dispatchSubgoalAndListen(new PerformMove(thing1,
+ thing2));
+ counter = 5;
+ case 1:
+ case 3:
+ case 5:
+ if (planInstance.getGoalEvent() != null)
+ counter++;
+ break;
+ }
+ }
+
+ private boolean checkClearAndDispatch(Thing thing) {
+ BeliefSetValueGoal<Clear> clearBelief = new BeliefSetValueGoal<Clear>(
+ BlocksWorldCapability.BELIEF_CLEAR, new Clear(thing1));
+ if (!clearBelief.isAchieved(planInstance.getBeliefBase())) {
+ planInstance.dispatchSubgoalAndListen(clearBelief);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public boolean done() {
+ return counter == 6;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return (counter == 6) ? EndState.SUCCESSFUL : null;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void init(PlanInstance planInstance) {
+ this.planInstance = planInstance;
+ BeliefSetValueGoal<On> achieveOn = (BeliefSetValueGoal<On>) planInstance
+ .getGoal();
+ this.thing1 = achieveOn.getValue().getThing1();
+ this.thing2 = achieveOn.getValue().getThing2();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/ClearPlanBody.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/ClearPlanBody.java
new file mode 100644
index 0000000..2d1d54e
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/ClearPlanBody.java
@@ -0,0 +1,86 @@
+/*
+ * Created on 26/01/2010 21:18:32
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.plan;
+
+import jade.core.behaviours.Behaviour;
+import br.pucrio.inf.les.bdijade.belief.BeliefSet;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.BlocksWorldCapability;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Clear;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.On;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Thing;
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+import br.pucrio.inf.les.bdijade.util.goal.BeliefSetValueGoal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class ClearPlanBody extends Behaviour implements PlanBody {
+ private static final long serialVersionUID = -5919677537834351951L;
+
+ private boolean done;
+ private int index;
+ private Thing thing;
+ private PlanInstance planInstance;
+ private On on;
+ private boolean waiting;
+ private BeliefSet<On> onSet;
+
+ public ClearPlanBody() {
+ this.done = false;
+ this.waiting = false;
+ this.index = 0;
+ }
+
+ @Override
+ public void action() {
+ if (!waiting) {
+ for (; index < Thing.THINGS.length; index++) {
+ Thing t = Thing.THINGS[index];
+ on = new On(t, thing);
+ if (onSet.hasValue(on)) {
+ planInstance
+ .dispatchSubgoalAndListen(new BeliefSetValueGoal<On>(
+ BlocksWorldCapability.BELIEF_ON, new On(t,
+ Thing.TABLE)));
+ waiting = true;
+ break;
+ }
+ }
+ } else if (planInstance.getGoalEvent() != null) {
+ onSet.remove(on);
+ on = null;
+ waiting = false;
+ index++;
+ }
+
+ if (index >= Thing.THINGS.length) {
+ done = true;
+ }
+ }
+
+ @Override
+ public boolean done() {
+ return done;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return done ? EndState.SUCCESSFUL : null;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void init(PlanInstance planInstance) {
+ this.onSet = (BeliefSet<On>) planInstance.getBeliefBase().getBelief(
+ BlocksWorldCapability.BELIEF_ON);
+ this.planInstance = planInstance;
+ BeliefSetValueGoal<Clear> achieveClear = (BeliefSetValueGoal<Clear>) planInstance
+ .getGoal();
+ this.thing = achieveClear.getValue().getThing();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/PerformMovePlanBody.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/PerformMovePlanBody.java
new file mode 100644
index 0000000..a43ba4b
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/PerformMovePlanBody.java
@@ -0,0 +1,77 @@
+/*
+ * Created on 26/01/2010 21:19:08
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.plan;
+
+import jade.core.behaviours.Behaviour;
+import br.pucrio.inf.les.bdijade.belief.BeliefSet;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.BlocksWorldCapability;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Clear;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.On;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.Thing;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.goal.PerformMove;
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class PerformMovePlanBody extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -5919677537834351951L;
+
+ private BeliefSet<Clear> clearSet;
+ private boolean done;
+ private BeliefSet<On> onSet;
+ private Thing thing1;
+ private Thing thing2;
+
+ public PerformMovePlanBody() {
+ this.done = false;
+ }
+
+ @Override
+ public void action() {
+ if (!thing2.equals(Thing.TABLE)) {
+ clearSet.remove(new Clear(thing2));
+ }
+
+ for (Thing thing : Thing.THINGS) {
+ On on = new On(thing1, thing);
+ if (onSet.hasValue(on)) {
+ onSet.remove(on);
+ if (!Thing.TABLE.equals(thing)) {
+ clearSet.addValue(new Clear(thing));
+ }
+ }
+ }
+
+ onSet.addValue(new On(thing1, thing2));
+ this.done = true;
+ }
+
+ @Override
+ public boolean done() {
+ return done;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return done ? EndState.SUCCESSFUL : null;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void init(PlanInstance planInstance) {
+ this.onSet = (BeliefSet<On>) planInstance.getBeliefBase().getBelief(
+ BlocksWorldCapability.BELIEF_ON);
+ this.clearSet = (BeliefSet<Clear>) planInstance.getBeliefBase()
+ .getBelief(BlocksWorldCapability.BELIEF_CLEAR);
+ PerformMove goal = (PerformMove) planInstance.getGoal();
+ this.thing1 = goal.getThing1();
+ this.thing2 = goal.getThing2();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/TopLevelPlanBody.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/TopLevelPlanBody.java
new file mode 100644
index 0000000..c4753ec
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/blocksworld/plan/TopLevelPlanBody.java
@@ -0,0 +1,81 @@
+/*
+ * Created on 26/01/2010 21:19:50
+ */
+package br.pucrio.inf.les.bdijade.examples.blocksworld.plan;
+
+import jade.core.behaviours.Behaviour;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.examples.blocksworld.BlocksWorldCapability;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.domain.On;
+import br.pucrio.inf.les.bdijade.examples.blocksworld.goal.AchieveBlocksStacked;
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+import br.pucrio.inf.les.bdijade.util.goal.BeliefSetValueGoal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class TopLevelPlanBody extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -5919677537834351951L;
+
+ private int counter;
+ private Log log;
+ private PlanInstance planInstance;
+ private On[] target;
+
+ public TopLevelPlanBody() {
+ this.counter = 0;
+ this.log = LogFactory.getLog(this.getClass());
+ }
+
+ @Override
+ public void action() {
+ if (counter != 0) {
+ if ((planInstance.getGoalEvent() == null)) {
+ return;
+ }
+ }
+ if (counter != target.length) {
+ planInstance.dispatchSubgoalAndListen(new BeliefSetValueGoal<On>(
+ BlocksWorldCapability.BELIEF_ON, target[counter]));
+ }
+ counter++;
+ }
+
+ @Override
+ public boolean done() {
+ return counter > target.length;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return (counter > target.length) ? EndState.SUCCESSFUL : null;
+ }
+
+ @Override
+ public void init(PlanInstance planInstance) {
+ this.planInstance = planInstance;
+ this.target = ((AchieveBlocksStacked) planInstance.getGoal())
+ .getTarget();
+ }
+
+ @Override
+ public int onEnd() {
+ log.info("World Model at end is:");
+ log.info(planInstance.getBeliefBase());
+ return super.onEnd();
+ }
+
+ @Override
+ public void onStart() {
+ log.info("World Model at start is:");
+ log.info(planInstance.getBeliefBase());
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/CompositeGoalCapability.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/CompositeGoalCapability.java
new file mode 100644
index 0000000..db9f724
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/CompositeGoalCapability.java
@@ -0,0 +1,88 @@
+/*
+ * Created on 04/02/2010 22:19:42
+ */
+package br.pucrio.inf.les.bdijade.examples.compositegoal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.core.BeliefBase;
+import br.pucrio.inf.les.bdijade.core.Capability;
+import br.pucrio.inf.les.bdijade.core.PlanLibrary;
+import br.pucrio.inf.les.bdijade.event.GoalEvent;
+import br.pucrio.inf.les.bdijade.event.GoalFinishedEvent;
+import br.pucrio.inf.les.bdijade.event.GoalListener;
+import br.pucrio.inf.les.bdijade.goal.Goal;
+import br.pucrio.inf.les.bdijade.plan.Plan;
+import br.pucrio.inf.les.bdijade.util.goal.CompositeGoal;
+import br.pucrio.inf.les.bdijade.util.goal.ParallelGoal;
+import br.pucrio.inf.les.bdijade.util.goal.SequentialGoal;
+import br.pucrio.inf.les.bdijade.util.plan.SimplePlan;
+
+/**
+ * @author ingrid
+ *
+ */
+public class CompositeGoalCapability extends Capability implements GoalListener {
+
+ class MyGoal1 implements Goal {
+ private static final long serialVersionUID = 3405041038738876061L;
+ };
+
+ class MyGoal2 implements Goal {
+ private static final long serialVersionUID = 3405041038738876061L;
+ };
+
+ class MyGoal3 implements Goal {
+ private static final long serialVersionUID = 3405041038738876061L;
+ };
+
+ private static final Log log = LogFactory
+ .getLog(CompositeGoalCapability.class);
+ private static final long serialVersionUID = -4800805796961540570L;
+
+ private static Set<Plan> getPlans() {
+ Set<Plan> plans = new HashSet<Plan>();
+ SimplePlan plan = new SimplePlan(MyPlan.class);
+ plan.addGoal(MyGoal1.class);
+ plan.addGoal(MyGoal2.class);
+ plan.addGoal(MyGoal3.class);
+ plans.add(plan);
+ return plans;
+ }
+
+ private boolean sequential;
+
+ public CompositeGoalCapability(boolean sequential) {
+ super(new BeliefBase(), new PlanLibrary(getPlans()));
+ this.sequential = sequential;
+ }
+
+ @Override
+ public void goalPerformed(GoalEvent event) {
+ if (event instanceof GoalFinishedEvent
+ && event.getGoal() instanceof CompositeGoal) {
+ log.info(event.getGoal() + " Status: "
+ + ((GoalFinishedEvent) event).getStatus());
+ log.info("Goal finished!! Removing capability of this agent...");
+ myAgent.removeCapability(this);
+
+ }
+ }
+
+ @Override
+ protected void setup() {
+ Goal[] goals = { new MyGoal1(), new MyGoal2(), new MyGoal3() };
+ CompositeGoal compositeGoal = null;
+ if (this.sequential) {
+ compositeGoal = new SequentialGoal(goals);
+ } else {
+ compositeGoal = new ParallelGoal(goals);
+ }
+ this.myAgent.addGoal(compositeGoal, this);
+ }
+
+}
\ No newline at end of file
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/MyPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/MyPlan.java
new file mode 100644
index 0000000..52043f9
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/compositegoal/MyPlan.java
@@ -0,0 +1,48 @@
+/*
+ * Created on 04/02/2010 22:21:30
+ */
+package br.pucrio.inf.les.bdijade.examples.compositegoal;
+
+import jade.core.behaviours.Behaviour;
+
+import java.util.Random;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class MyPlan extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -220345270457161508L;
+
+ private EndState endState = null;
+ private PlanInstance planInstance;
+ private Log log = LogFactory.getLog(this.getClass());
+
+ public void action() {
+ long random = new Random().nextLong();
+ log.info("Random: " + random);
+ endState = (random % 3 != 0) ? EndState.SUCCESSFUL : EndState.FAILED;
+ log.info(planInstance.getGoal() + " Plan#"
+ + planInstance.getPlan().getId() + " EndState: " + endState);
+ }
+
+ public boolean done() {
+ return true;
+ }
+
+ public EndState getEndState() {
+ return endState;
+ }
+
+ public void init(PlanInstance planInstance) {
+ this.planInstance = planInstance;
+ }
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/Ping.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/Ping.java
new file mode 100644
index 0000000..fe144c7
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/Ping.java
@@ -0,0 +1,26 @@
+/*
+ * Created on 29/01/2010 00:36:05
+ */
+package br.pucrio.inf.les.bdijade.examples.ping;
+
+import br.pucrio.inf.les.bdijade.goal.Goal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class Ping implements Goal {
+
+ private static final long serialVersionUID = -7733145369836002329L;
+
+ private String agent;
+
+ public Ping(String agent) {
+ this.agent = agent;
+ }
+
+ public String getAgent() {
+ return agent;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PingPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PingPlan.java
new file mode 100644
index 0000000..f91932a
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PingPlan.java
@@ -0,0 +1,87 @@
+/*
+ * Created on 29/01/2010 00:37:31
+ */
+package br.pucrio.inf.les.bdijade.examples.ping;
+
+import jade.core.AID;
+import jade.core.behaviours.Behaviour;
+import jade.lang.acl.ACLMessage;
+import jade.lang.acl.MessageTemplate;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class PingPlan extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -6288758975856575305L;
+
+ private String agent;
+ private boolean done;
+ private Log log;
+ private MessageTemplate mt;
+ private boolean sent;
+ private int times;
+ private int counter;
+
+ @Override
+ public void action() {
+ if (!sent) {
+ ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
+ msg.setContent(PingPongCapability.PING);
+ msg.addReceiver(new AID(agent, false));
+ msg.setConversationId("cin" + System.currentTimeMillis());
+ msg.setReplyWith("inform" + System.currentTimeMillis());
+ myAgent.send(msg);
+ this.mt = MessageTemplate.and(MessageTemplate
+ .MatchConversationId(msg.getConversationId()),
+ MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.sent = true;
+ log.info("Ping sent to agent " + agent + "!");
+ } else {
+ ACLMessage reply = myAgent.receive(mt);
+ if (reply != null) {
+ log.info("Pong received from " + reply.getSender().getName()
+ + "!");
+ log.info("Content: " + reply.getContent());
+ counter++;
+ if (counter == times) {
+ this.done = true;
+ } else {
+ this.sent = false;
+ }
+ } else {
+ block();
+ }
+ }
+ }
+
+ @Override
+ public boolean done() {
+ return done;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return done ? EndState.SUCCESSFUL : null;
+ }
+
+ @Override
+ public void init(PlanInstance planInstance) {
+ this.log = LogFactory.getLog(this.getClass());
+ Ping ping = (Ping) planInstance.getGoal();
+ this.agent = ping.getAgent();
+ this.sent = false;
+ this.done = false;
+ this.counter = 0;
+ this.times = 1;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PingPongCapability.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PingPongCapability.java
new file mode 100644
index 0000000..1f02be7
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PingPongCapability.java
@@ -0,0 +1,48 @@
+/*
+ * Created on 29/01/2010 00:35:39
+ */
+package br.pucrio.inf.les.bdijade.examples.ping;
+
+import jade.lang.acl.MessageTemplate;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import br.pucrio.inf.les.bdijade.core.BeliefBase;
+import br.pucrio.inf.les.bdijade.core.Capability;
+import br.pucrio.inf.les.bdijade.core.PlanLibrary;
+import br.pucrio.inf.les.bdijade.plan.Plan;
+import br.pucrio.inf.les.bdijade.util.plan.SimplePlan;
+
+/**
+ * @author ingrid
+ *
+ */
+public class PingPongCapability extends Capability {
+
+ public static final String PING = "ping";
+ public static final String PONG = "pong";
+
+ private static final long serialVersionUID = -4800805796961540570L;
+
+ private static Set<Plan> getPlans() {
+ Set<Plan> plans = new HashSet<Plan>();
+ plans.add(new SimplePlan(Ping.class, PingPlan.class));
+ plans.add(new SimplePlan(MessageTemplate.MatchContent(PING),
+ PongPlan.class));
+ return plans;
+ }
+
+ private String otherAgent;
+
+ public PingPongCapability(String id, String otherAgent) {
+ super(id, new BeliefBase(), new PlanLibrary(getPlans()));
+ this.otherAgent = otherAgent;
+ }
+
+ @Override
+ protected void setup() {
+ myAgent.addGoal(new Ping(otherAgent));
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PongPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PongPlan.java
new file mode 100644
index 0000000..756c6a8
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/ping/PongPlan.java
@@ -0,0 +1,50 @@
+/*
+ * Created on 29/01/2010 00:42:42
+ */
+package br.pucrio.inf.les.bdijade.examples.ping;
+
+import jade.core.behaviours.OneShotBehaviour;
+import jade.lang.acl.ACLMessage;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.message.MessageGoal;
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class PongPlan extends OneShotBehaviour implements PlanBody {
+
+ private static final long serialVersionUID = -3352874506241004611L;
+
+ private Log log;
+ private ACLMessage pingMsg;
+
+ @Override
+ public void action() {
+ log.info("Ping received from agent " + pingMsg.getSender().getName()
+ + "!");
+ ACLMessage reply = pingMsg.createReply();
+ reply.setContent(PingPongCapability.PONG);
+ this.myAgent.send(reply);
+ log.info("Pong sent to agent" + pingMsg.getSender().getName() + "!");
+ }
+
+ @Override
+ public EndState getEndState() {
+ return EndState.SUCCESSFUL;
+ }
+
+ @Override
+ public void init(PlanInstance planInstance) {
+ this.log = LogFactory.getLog(this.getClass());
+ MessageGoal goal = (MessageGoal) planInstance.getGoal();
+ pingMsg = goal.getMessage();
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/planfailed/MyPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/planfailed/MyPlan.java
new file mode 100644
index 0000000..28d8dc1
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/planfailed/MyPlan.java
@@ -0,0 +1,48 @@
+/*
+ * Created on 28/01/2010 00:22:16
+ */
+package br.pucrio.inf.les.bdijade.examples.planfailed;
+
+import jade.core.behaviours.Behaviour;
+
+import java.util.Random;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class MyPlan extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -220345270457161508L;
+
+ private EndState endState = null;
+ private PlanInstance planInstance;
+ private Log log = LogFactory.getLog(this.getClass());
+
+ public void action() {
+ long random = new Random().nextLong();
+ log.info("Random: " + random);
+ endState = (random % 3 == 0) ? EndState.SUCCESSFUL : EndState.FAILED;
+ log.info(planInstance.getGoal() + " Plan#"
+ + planInstance.getPlan().getId() + " EndState: " + endState);
+ }
+
+ public boolean done() {
+ return true;
+ }
+
+ public EndState getEndState() {
+ return endState;
+ }
+
+ public void init(PlanInstance planInstance) {
+ this.planInstance = planInstance;
+ }
+}
\ No newline at end of file
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/planfailed/PlanFailedCapability.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/planfailed/PlanFailedCapability.java
new file mode 100644
index 0000000..0635395
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/planfailed/PlanFailedCapability.java
@@ -0,0 +1,84 @@
+/*
+ * Created on 28/01/2010 00:09:12
+ */
+package br.pucrio.inf.les.bdijade.examples.planfailed;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.core.BeliefBase;
+import br.pucrio.inf.les.bdijade.core.Capability;
+import br.pucrio.inf.les.bdijade.core.PlanLibrary;
+import br.pucrio.inf.les.bdijade.event.GoalEvent;
+import br.pucrio.inf.les.bdijade.event.GoalFinishedEvent;
+import br.pucrio.inf.les.bdijade.event.GoalListener;
+import br.pucrio.inf.les.bdijade.goal.Goal;
+import br.pucrio.inf.les.bdijade.plan.Plan;
+import br.pucrio.inf.les.bdijade.util.plan.SimplePlan;
+
+/**
+ * @author ingrid
+ *
+ */
+public class PlanFailedCapability extends Capability implements GoalListener {
+
+ class MyGoal implements Goal {
+ private static final long serialVersionUID = 3405041038738876061L;
+
+ private int id;
+
+ public MyGoal(int id) {
+ this.id = id;
+ }
+
+ public String toString() {
+ return "Goal: " + id;
+ }
+ };
+
+ private static final int GOALS = 10;
+ private static final Log log = LogFactory
+ .getLog(PlanFailedCapability.class);
+ private static final long serialVersionUID = -4800805796961540570L;
+
+ private static Set<Plan> getPlans() {
+ Set<Plan> plans = new HashSet<Plan>();
+ plans.add(new SimplePlan("Plan1", MyGoal.class, MyPlan.class));
+ plans.add(new SimplePlan("Plan2", MyGoal.class, MyPlan.class));
+ plans.add(new SimplePlan("Plan3", MyGoal.class, MyPlan.class));
+ return plans;
+ }
+
+ private int counter;
+
+ public PlanFailedCapability() {
+ super(new BeliefBase(), new PlanLibrary(getPlans()));
+ }
+
+ @Override
+ public void goalPerformed(GoalEvent event) {
+ if (event instanceof GoalFinishedEvent
+ && event.getGoal() instanceof MyGoal) {
+ log.info(event.getGoal() + " Status: "
+ + ((GoalFinishedEvent) event).getStatus());
+ counter++;
+ if (counter >= GOALS) {
+ log
+ .info("Goal finished!! Removing capability of this agent...");
+ myAgent.removeCapability(this);
+ }
+ }
+ }
+
+ @Override
+ protected void setup() {
+ this.counter = 0;
+ for (int i = 0; i < GOALS; i++) {
+ myAgent.addGoal(new MyGoal(i), this);
+ }
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/ChildPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/ChildPlan.java
new file mode 100644
index 0000000..82b3913
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/ChildPlan.java
@@ -0,0 +1,47 @@
+/*
+ * Created on 31/01/2010 18:29:38
+ */
+package br.pucrio.inf.les.bdijade.examples.subgoal;
+
+import jade.core.behaviours.CyclicBehaviour;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class ChildPlan extends CyclicBehaviour implements PlanBody {
+
+ private static final long serialVersionUID = -5432560989511973914L;
+
+ private int counter;
+ private Log log = LogFactory.getLog(this.getClass());
+ private PlanInstance planInstance;
+
+ @Override
+ public void action() {
+ if (counter == 0) {
+ this.planInstance.dispatchSubgoal(new Subgoal());
+ }
+ log.info("ChildPlan executing... counter " + counter);
+ counter++;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return null;
+ }
+
+ @Override
+ public void init(PlanInstance planInstance) {
+ this.planInstance = planInstance;
+ this.counter = 0;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/MyPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/MyPlan.java
new file mode 100644
index 0000000..d64308a
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/MyPlan.java
@@ -0,0 +1,47 @@
+/*
+ * Created on 31/01/2010 18:42:05
+ */
+package br.pucrio.inf.les.bdijade.examples.subgoal;
+
+import jade.core.behaviours.Behaviour;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class MyPlan extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -5432560989511973914L;
+
+ private int counter;
+ private Log log = LogFactory.getLog(this.getClass());
+
+ @Override
+ public void action() {
+ log.info("Plan executing... counter " + counter);
+ counter++;
+ }
+
+ @Override
+ public boolean done() {
+ return counter >= 10;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return done() ? EndState.SUCCESSFUL : null;
+ }
+
+ @Override
+ public void init(PlanInstance planInstance) {
+ this.counter = 0;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/ParentPlan.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/ParentPlan.java
new file mode 100644
index 0000000..6274e38
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/ParentPlan.java
@@ -0,0 +1,52 @@
+/*
+ * Created on 31/01/2010 18:25:42
+ */
+package br.pucrio.inf.les.bdijade.examples.subgoal;
+
+import jade.core.behaviours.Behaviour;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import br.pucrio.inf.les.bdijade.plan.PlanBody;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance;
+import br.pucrio.inf.les.bdijade.plan.PlanInstance.EndState;
+
+/**
+ * @author ingrid
+ *
+ */
+public class ParentPlan extends Behaviour implements PlanBody {
+
+ private static final long serialVersionUID = -5432560989511973914L;
+
+ private int counter;
+ private Log log = LogFactory.getLog(this.getClass());
+ private PlanInstance planInstance;
+
+ @Override
+ public void action() {
+ if (counter == 0) {
+ this.planInstance.dispatchSubgoal(new Subgoal());
+ }
+ log.info("ParentPlan executing... counter " + counter);
+ counter++;
+ }
+
+ @Override
+ public boolean done() {
+ return counter >= 10;
+ }
+
+ @Override
+ public EndState getEndState() {
+ return done() ? EndState.FAILED : null;
+ }
+
+ @Override
+ public void init(PlanInstance planInstance) {
+ this.planInstance = planInstance;
+ this.counter = 0;
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/Subgoal.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/Subgoal.java
new file mode 100644
index 0000000..d4cb83b
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/Subgoal.java
@@ -0,0 +1,16 @@
+/*
+ * Created on 31/01/2010 18:33:37
+ */
+package br.pucrio.inf.les.bdijade.examples.subgoal;
+
+import br.pucrio.inf.les.bdijade.goal.Goal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class Subgoal implements Goal {
+
+ private static final long serialVersionUID = 2330672980228870224L;
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/SubgoalCapability.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/SubgoalCapability.java
new file mode 100644
index 0000000..d286446
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/SubgoalCapability.java
@@ -0,0 +1,38 @@
+/*
+ * Created on 31/01/2010 18:32:06
+ */
+package br.pucrio.inf.les.bdijade.examples.subgoal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import br.pucrio.inf.les.bdijade.core.BeliefBase;
+import br.pucrio.inf.les.bdijade.core.Capability;
+import br.pucrio.inf.les.bdijade.core.PlanLibrary;
+import br.pucrio.inf.les.bdijade.plan.Plan;
+import br.pucrio.inf.les.bdijade.util.plan.SimplePlan;
+
+/**
+ * @author ingrid
+ *
+ */
+public class SubgoalCapability extends Capability {
+
+ private static Set<Plan> getPlans() {
+ Set<Plan> plans = new HashSet<Plan>();
+ plans.add(new SimplePlan(TopLevelGoal.class, ParentPlan.class));
+ plans.add(new SimplePlan(TopLevelGoal.class, MyPlan.class));
+ plans.add(new SimplePlan(Subgoal.class, ChildPlan.class));
+ return plans;
+ }
+
+ public SubgoalCapability() {
+ super(new BeliefBase(), new PlanLibrary(getPlans()));
+ }
+
+ @Override
+ protected void setup() {
+ myAgent.addGoal(new TopLevelGoal());
+ }
+
+}
diff --git a/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/TopLevelGoal.java b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/TopLevelGoal.java
new file mode 100644
index 0000000..c612e4c
--- /dev/null
+++ b/bdi-jade-test/src/br/pucrio/inf/les/bdijade/examples/subgoal/TopLevelGoal.java
@@ -0,0 +1,16 @@
+/*
+ * Created on 31/01/2010 18:25:54
+ */
+package br.pucrio.inf.les.bdijade.examples.subgoal;
+
+import br.pucrio.inf.les.bdijade.goal.Goal;
+
+/**
+ * @author ingrid
+ *
+ */
+public class TopLevelGoal implements Goal {
+
+ private static final long serialVersionUID = 2702962164032833240L;
+
+}