bdi-network-resilience

New plan

8/28/2014 3:25:34 PM

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/capability/RateLimiterCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/capability/RateLimiterCapability.java
index 64c49a9..1c526ca 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/capability/RateLimiterCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/capability/RateLimiterCapability.java
@@ -30,7 +30,8 @@ import bdi4jade.belief.PropositionalBelief;
 import bdi4jade.belief.TransientPropositionalBelief;
 import bdi4jade.core.Capability;
 import bdi4jade.core.GoalUpdateSet;
-import bdi4jade.goal.BeliefValueGoal;
+import bdi4jade.goal.BeliefGoal;
+import bdi4jade.goal.Goal;
 import bdi4jade.goal.GoalTemplateFactory;
 import bdi4jade.goal.PropositionalBeliefValueGoal;
 import bdi4jade.plan.DefaultPlan;
@@ -41,6 +42,7 @@ import bdi4jade.reasoning.OptionGenerationFunction;
 import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkProposition.AttackPrevented;
 import br.ufrgs.inf.bdinetr.domain.LinkProposition.FullyOperational;
+import br.ufrgs.inf.bdinetr.domain.LinkProposition.OverUsage;
 import br.ufrgs.inf.bdinetr.domain.LinkProposition.RegularUsage;
 
 /**
@@ -110,12 +112,53 @@ public class RateLimiterCapability extends Capability {
 		}
 	}
 
+	public static class RestoreLinkRate extends BeliefGoalPlanBody {
+		private static final long serialVersionUID = -3493377510830902961L;
+
+		private Link link;
+
+		@Override
+		public void execute() {
+			link.setLimitedBandwidth(null);
+			getBeliefBase().addOrUpdateBelief(
+					new TransientPropositionalBelief<FullyOperational>(
+							new FullyOperational(link), Boolean.TRUE));
+			getCapability()
+					.getWholeCapability()
+					.getBeliefBase()
+					.addOrUpdateBelief(
+							new TransientPropositionalBelief<AttackPrevented>(
+									new AttackPrevented(link), null));
+			log.info(getGoal());
+		}
+
+		@Parameter(direction = Direction.IN)
+		public void setBeliefName(FullyOperational fullyOperational) {
+			this.link = fullyOperational.getLink();
+		}
+	}
+
+	@bdi4jade.annotation.Plan
+	private Plan restoreLinkRate = new DefaultPlan(
+			GoalTemplateFactory.hasValueForBeliefOfType(FullyOperational.class,
+					Boolean.TRUE), RestoreLinkRate.class) {
+		public boolean isContextApplicable(Goal goal) {
+			BeliefGoal<FullyOperational> bg = (BeliefGoal<FullyOperational>) goal;
+			PropositionalBelief<RegularUsage> regularUsage = (PropositionalBelief<RegularUsage>) getBeliefBase()
+					.getBelief(new RegularUsage(bg.getBeliefName().getLink()));
+			return (regularUsage != null && regularUsage.getValue());
+		};
+	};
+
 	@bdi4jade.annotation.Plan
 	private Plan limitLinkRate = new DefaultPlan(
 			GoalTemplateFactory.hasValueForBeliefOfType(AttackPrevented.class,
 					Boolean.TRUE), LimitLinkRatePlan.class) {
-		public boolean isContextApplicable(bdi4jade.goal.Goal goal) {
-			return true;
+		public boolean isContextApplicable(Goal goal) {
+			BeliefGoal<AttackPrevented> bg = (BeliefGoal<AttackPrevented>) goal;
+			PropositionalBelief<OverUsage> overUsage = (PropositionalBelief<OverUsage>) getBeliefBase()
+					.getBelief(new OverUsage(bg.getBeliefName().getLink()));
+			return (overUsage != null && overUsage.getValue());
 		};
 	};