bdi-network-resilience

Logic Refactoring

9/12/2014 3:00:33 PM

Changes

network-resilience/src/br/ufrgs/inf/bdinetr/domain/logic/FlowPreposition.java 88(+0 -88)

network-resilience/src/br/ufrgs/inf/bdinetr/domain/logic/IpPreposition.java 136(+0 -136)

network-resilience/src/br/ufrgs/inf/bdinetr/domain/logic/LinkProposition.java 94(+0 -94)

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java
index 61384ba..87aa18a 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java
@@ -37,12 +37,12 @@ import bdi4jade.reasoning.OptionGenerationFunction;
 import br.ufrgs.inf.bdinetr.domain.AnomalyDetection;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.Link;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Anomalous;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Benign;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.OverUsageCause;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Restricted;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.RegularUsage;
+import br.ufrgs.inf.bdinetr.domain.Role;
+import br.ufrgs.inf.bdinetr.domain.predicate.Anomalous;
+import br.ufrgs.inf.bdinetr.domain.predicate.Benign;
+import br.ufrgs.inf.bdinetr.domain.predicate.OverUsageCause;
+import br.ufrgs.inf.bdinetr.domain.predicate.RegularUsage;
+import br.ufrgs.inf.bdinetr.domain.predicate.Restricted;
 
 /**
  * @author Ingrid Nunes
@@ -64,8 +64,10 @@ public class AnomalyDetectionCapability extends RouterAgentCapability implements
 				belief(new OverUsageCause(outlier, link), true);
 			}
 
-			// Exists ip.(OverUsageCause(ip, link) AND not(Restricted(ip)) --> not RegularUsage(link)
-			// nExists ip.(OverUsageCause(ip, link) AND not(Restricted(ip)) --> RegularUsage(link)
+			// Exists ip.(OverUsageCause(ip, link) AND not(Restricted(ip)) -->
+			// not RegularUsage(link)
+			// nExists ip.(OverUsageCause(ip, link) AND not(Restricted(ip)) -->
+			// RegularUsage(link)
 			boolean exists = false;
 			Set<Belief<?, ?>> overUsageCauseBeliefs = getBeliefBase()
 					.getBeliefsByType(OverUsageCause.class);
@@ -73,11 +75,11 @@ public class AnomalyDetectionCapability extends RouterAgentCapability implements
 				PropositionalBelief<OverUsageCause> overUsageCause = (PropositionalBelief<OverUsageCause>) belief;
 				assert overUsageCause.getValue();
 
-				if (link.equals(overUsageCause.getName().getLink())) {
+				if (link.equals(overUsageCause.getName().getSecond())) {
 					PropositionalBelief<Restricted> restricted = (PropositionalBelief<Restricted>) getBeliefBase()
 							.getBelief(
 									new Restricted(overUsageCause.getName()
-											.getIp()));
+											.getFirst()));
 					if (restricted == null || !restricted.getValue()) {
 						exists = true;
 						break;
@@ -89,7 +91,7 @@ public class AnomalyDetectionCapability extends RouterAgentCapability implements
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(RegularUsage regularUsage) {
-			this.link = regularUsage.getLink();
+			this.link = regularUsage.getConcept();
 		}
 	}
 
@@ -112,27 +114,29 @@ public class AnomalyDetectionCapability extends RouterAgentCapability implements
 
 	@Override
 	public void generateGoals(GoalUpdateSet goalUpdateSet) {
-		// Anomalous(ip) AND not Restricted(ip) --> goal(Restricted(ip)) AND goal(?belief(Anomalous(ip))
+		// Anomalous(ip) AND not Restricted(ip) --> goal(Restricted(ip)) AND
+		// goal(?belief(Anomalous(ip))
 		Set<Belief<?, ?>> anomalousIpBeliefs = getBeliefBase()
 				.getBeliefsByType(Anomalous.class);
 		for (Belief<?, ?> belief : anomalousIpBeliefs) {
 			PropositionalBelief<Anomalous> anomalous = (PropositionalBelief<Anomalous>) belief;
 			if (anomalous.getValue()) {
 				PropositionalBelief<Restricted> restricted = (PropositionalBelief<Restricted>) getBeliefBase()
-						.getBelief(new Restricted(anomalous.getName().getIp()));
+						.getBelief(
+								new Restricted(anomalous.getName().getConcept()));
 				if (restricted == null || !restricted.getValue()) {
 					goalUpdateSet.generateGoal(createGoal(new Restricted(
-							anomalous.getName().getIp()), true));
+							anomalous.getName().getConcept()), true));
 					goalUpdateSet.generateGoal(createGoal(new Benign(anomalous
-							.getName().getIp())));
+							.getName().getConcept())));
 				}
 			}
 		}
 	}
 
 	@Override
-	public RoleType getRole() {
-		return RoleType.ANOMALY_DETECTION;
+	public Role getRole() {
+		return Role.ANOMALY_DETECTION;
 	}
 
 	@Override
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java
index 31b1d95..328f859 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java
@@ -42,11 +42,11 @@ import br.ufrgs.inf.bdinetr.agent.RouterAgent.RootCapability.ExportFlows;
 import br.ufrgs.inf.bdinetr.domain.Classifier;
 import br.ufrgs.inf.bdinetr.domain.Flow;
 import br.ufrgs.inf.bdinetr.domain.Ip;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.logic.FlowPreposition.Threat;
-import br.ufrgs.inf.bdinetr.domain.logic.FlowPreposition.ThreatResponded;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Anomalous;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Benign;
+import br.ufrgs.inf.bdinetr.domain.Role;
+import br.ufrgs.inf.bdinetr.domain.predicate.Anomalous;
+import br.ufrgs.inf.bdinetr.domain.predicate.Benign;
+import br.ufrgs.inf.bdinetr.domain.predicate.Threat;
+import br.ufrgs.inf.bdinetr.domain.predicate.ThreatResponded;
 
 /**
  * @author Ingrid Nunes
@@ -86,7 +86,8 @@ public class ClassifierCapability extends RouterAgentCapability implements
 							PropositionalBelief<Threat> threat = (PropositionalBelief<Threat>) belief;
 							assert threat.getValue();
 
-							if (ip.equals(threat.getName().getFlow().getDstIp())) {
+							if (ip.equals(threat.getName().getConcept()
+									.getDstIp())) {
 								exists = true;
 								break;
 							}
@@ -109,7 +110,7 @@ public class ClassifierCapability extends RouterAgentCapability implements
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(Benign benign) {
-			this.ip = benign.getIp();
+			this.ip = benign.getConcept();
 		}
 	}
 
@@ -131,7 +132,8 @@ public class ClassifierCapability extends RouterAgentCapability implements
 			public boolean isContextApplicable(bdi4jade.goal.Goal goal) {
 				BeliefPresentGoal<Benign> bg = (BeliefPresentGoal<Benign>) goal;
 				PropositionalBelief<Anomalous> anomalous = (PropositionalBelief<Anomalous>) getBeliefBase()
-						.getBelief(new Anomalous(bg.getBeliefName().getIp()));
+						.getBelief(
+								new Anomalous(bg.getBeliefName().getConcept()));
 				return (anomalous != null && anomalous.getValue());
 			};
 		};
@@ -146,14 +148,14 @@ public class ClassifierCapability extends RouterAgentCapability implements
 			PropositionalBelief<Threat> threat = (PropositionalBelief<Threat>) belief;
 			if (threat.getValue()) {
 				goalUpdateSet.generateGoal(createGoal(new ThreatResponded(
-						threat.getName().getFlow()), true));
+						threat.getName().getConcept()), true));
 			}
 		}
 	}
 
 	@Override
-	public RoleType getRole() {
-		return RoleType.CLASSIFIER;
+	public Role getRole() {
+		return Role.CLASSIFIER;
 	}
 
 	@Override
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java
index 5641666..8407de6 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java
@@ -10,7 +10,7 @@ import bdi4jade.plan.planbody.AbstractPlanBody;
 import br.ufrgs.inf.bdinetr.agent.RouterAgent.RootCapability.ExportFlows;
 import br.ufrgs.inf.bdinetr.domain.FlowExporter;
 import br.ufrgs.inf.bdinetr.domain.Ip;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
+import br.ufrgs.inf.bdinetr.domain.Role;
 
 public class FlowExporterCapability extends RouterAgentCapability {
 
@@ -47,7 +47,7 @@ public class FlowExporterCapability extends RouterAgentCapability {
 	}
 
 	@Override
-	public RoleType getRole() {
-		return RoleType.FLOW_EXPORTER;
+	public Role getRole() {
+		return Role.FLOW_EXPORTER;
 	}
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
index 7bfb469..e7d0c4d 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
@@ -34,10 +34,10 @@ import bdi4jade.reasoning.OptionGenerationFunction;
 import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
 import br.ufrgs.inf.bdinetr.domain.Observer;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.AttackPrevented;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.OverUsage;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.RegularUsage;
+import br.ufrgs.inf.bdinetr.domain.Role;
+import br.ufrgs.inf.bdinetr.domain.predicate.AttackPrevented;
+import br.ufrgs.inf.bdinetr.domain.predicate.OverUsage;
+import br.ufrgs.inf.bdinetr.domain.predicate.RegularUsage;
 
 /**
  * @author Ingrid Nunes
@@ -70,7 +70,8 @@ public class LinkMonitorCapability extends RouterAgentCapability implements
 
 	@Override
 	public void generateGoals(GoalUpdateSet goalUpdateSet) {
-		// OverUsage(link) AND not AttackPrevented(link) --> goal(AttackPrevented(link)) AND goal(belief(?RegularUsage(link)))
+		// OverUsage(link) AND not AttackPrevented(link) -->
+		// goal(AttackPrevented(link)) AND goal(belief(?RegularUsage(link)))
 		Set<Belief<?, ?>> overUsageBeliefs = getBeliefBase().getBeliefsByType(
 				OverUsage.class);
 		for (Belief<?, ?> belief : overUsageBeliefs) {
@@ -79,20 +80,20 @@ public class LinkMonitorCapability extends RouterAgentCapability implements
 				PropositionalBelief<AttackPrevented> attackPrevented = (PropositionalBelief<AttackPrevented>) getBeliefBase()
 						.getBelief(
 								new AttackPrevented(overUsage.getName()
-										.getLink()));
+										.getConcept()));
 				if (attackPrevented == null || !attackPrevented.getValue()) {
 					goalUpdateSet.generateGoal(createGoal(new AttackPrevented(
-							overUsage.getName().getLink()), Boolean.TRUE));
+							overUsage.getName().getConcept()), Boolean.TRUE));
 					goalUpdateSet.generateGoal(createGoal(new RegularUsage(
-							overUsage.getName().getLink())));
+							overUsage.getName().getConcept())));
 				}
 			}
 		}
 	}
 
 	@Override
-	public RoleType getRole() {
-		return RoleType.LINK_MONITOR;
+	public Role getRole() {
+		return Role.LINK_MONITOR;
 	}
 
 	@Override
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java
index 6fa2259..9e0c6a3 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java
@@ -42,20 +42,20 @@ import br.ufrgs.inf.bdinetr.agent.RouterAgent.RootCapability;
 import br.ufrgs.inf.bdinetr.domain.Flow;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.Link;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.PReSETRouter;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter;
-import br.ufrgs.inf.bdinetr.domain.logic.FlowPreposition.FlowRateLimited;
-import br.ufrgs.inf.bdinetr.domain.logic.FlowPreposition.Threat;
-import br.ufrgs.inf.bdinetr.domain.logic.FlowPreposition.ThreatResponded;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Anomalous;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Benign;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.OverUsageCause;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.RateLimited;
-import br.ufrgs.inf.bdinetr.domain.logic.IpPreposition.Restricted;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.AttackPrevented;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.FullyOperational;
-import br.ufrgs.inf.bdinetr.domain.logic.LinkProposition.RegularUsage;
+import br.ufrgs.inf.bdinetr.domain.Role;
+import br.ufrgs.inf.bdinetr.domain.Router;
+import br.ufrgs.inf.bdinetr.domain.predicate.Anomalous;
+import br.ufrgs.inf.bdinetr.domain.predicate.AttackPrevented;
+import br.ufrgs.inf.bdinetr.domain.predicate.Benign;
+import br.ufrgs.inf.bdinetr.domain.predicate.FlowRateLimited;
+import br.ufrgs.inf.bdinetr.domain.predicate.FullyOperational;
+import br.ufrgs.inf.bdinetr.domain.predicate.OverUsageCause;
+import br.ufrgs.inf.bdinetr.domain.predicate.RateLimited;
+import br.ufrgs.inf.bdinetr.domain.predicate.RegularUsage;
+import br.ufrgs.inf.bdinetr.domain.predicate.Restricted;
+import br.ufrgs.inf.bdinetr.domain.predicate.Threat;
+import br.ufrgs.inf.bdinetr.domain.predicate.ThreatResponded;
 
 /**
  * @author Ingrid Nunes
@@ -75,7 +75,8 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 			belief(new ThreatResponded(flow), true);
 			belief(new Threat(flow), null);
 
-			// nExists flow'.(Threat(flow') AND dst(flow) = dst(flow')) --> Benign(dst(flow))
+			// nExists flow'.(Threat(flow') AND dst(flow) = dst(flow')) -->
+			// Benign(dst(flow))
 			boolean exists = false;
 			Set<Belief<?, ?>> threatBeliefs = getBeliefBase().getBeliefsByType(
 					Threat.class);
@@ -83,7 +84,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 				PropositionalBelief<Threat> threat = (PropositionalBelief<Threat>) belief;
 				assert threat.getValue();
 				if (flow.getDstIp().equals(
-						threat.getName().getFlow().getDstIp())) {
+						threat.getName().getConcept().getDstIp())) {
 					exists = true;
 					break;
 				}
@@ -95,7 +96,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(ThreatResponded threatResponded) {
-			this.flow = threatResponded.getFlow();
+			this.flow = threatResponded.getConcept();
 		}
 	}
 
@@ -103,7 +104,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 		private static final long serialVersionUID = -3493377510830902961L;
 
 		@bdi4jade.annotation.Belief(name = RootCapability.ROUTER_BELIEF)
-		private Belief<String, PReSETRouter> device;
+		private Belief<String, Router> device;
 		private Ip ip;
 
 		@Override
@@ -120,7 +121,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 			while (it.hasNext()) {
 				PropositionalBelief<OverUsageCause> overUsageCause = (PropositionalBelief<OverUsageCause>) it
 						.next();
-				if (ip.equals(overUsageCause.getName().getIp())) {
+				if (ip.equals(overUsageCause.getName().getFirst())) {
 					assert overUsageCause.getValue();
 					causedByIp.add(overUsageCause.getName());
 					it.remove();
@@ -128,28 +129,29 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 				}
 			}
 
-			// nExists ip'.(was OverUsageCause(ip, link) AND OverUsageCause(ip', link)) --> RegularUsage(link))
+			// nExists ip'.(was OverUsageCause(ip, link) AND OverUsageCause(ip',
+			// link)) --> RegularUsage(link))
 			for (OverUsageCause overUsageCause : causedByIp) {
 				boolean exists = false;
 				for (Belief<?, ?> belief : overUsageCauseBeliefs) {
 					PropositionalBelief<OverUsageCause> otherOverUsageCause = (PropositionalBelief<OverUsageCause>) belief;
-					if (overUsageCause.getLink().equals(
-							otherOverUsageCause.getName().getLink())) {
-						assert !overUsageCause.getIp().equals(
-								otherOverUsageCause.getName().getIp());
+					if (overUsageCause.getSecond().equals(
+							otherOverUsageCause.getName().getSecond())) {
+						assert !overUsageCause.getFirst().equals(
+								otherOverUsageCause.getName().getFirst());
 						exists = true;
 						break;
 					}
 				}
 				if (!exists) {
-					belief(new RegularUsage(overUsageCause.getLink()), true);
+					belief(new RegularUsage(overUsageCause.getSecond()), true);
 				}
 			}
 		}
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(Restricted restricted) {
-			this.ip = restricted.getIp();
+			this.ip = restricted.getConcept();
 		}
 	}
 
@@ -167,7 +169,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(AttackPrevented attackPrevented) {
-			this.link = attackPrevented.getLink();
+			this.link = attackPrevented.getConcept();
 		}
 	}
 
@@ -175,7 +177,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 		private static final long serialVersionUID = -3493377510830902961L;
 
 		@bdi4jade.annotation.Belief(name = RootCapability.ROUTER_BELIEF)
-		private Belief<String, PReSETRouter> device;
+		private Belief<String, Router> device;
 		private Ip ip;
 
 		@Override
@@ -188,7 +190,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(Restricted restricted) {
-			this.ip = restricted.getIp();
+			this.ip = restricted.getConcept();
 		}
 	}
 
@@ -206,7 +208,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 
 		@Parameter(direction = Direction.IN)
 		public void setBeliefName(FullyOperational fullyOperational) {
-			this.link = fullyOperational.getLink();
+			this.link = fullyOperational.getConcept();
 		}
 	}
 
@@ -240,7 +242,7 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 			public boolean isContextApplicable(Goal goal) {
 				BeliefGoal<ThreatResponded> bg = (BeliefGoal<ThreatResponded>) goal;
 				PropositionalBelief<Threat> threat = (PropositionalBelief<Threat>) getBeliefBase()
-						.getBelief(new Threat(bg.getBeliefName().getFlow()));
+						.getBelief(new Threat(bg.getBeliefName().getConcept()));
 				return (threat != null && threat.getValue());
 			};
 		};
@@ -250,7 +252,8 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 			public boolean isContextApplicable(Goal goal) {
 				BeliefGoal<Restricted> bg = (BeliefGoal<Restricted>) goal;
 				PropositionalBelief<Anomalous> anomalous = (PropositionalBelief<Anomalous>) getBeliefBase()
-						.getBelief(new Anomalous(bg.getBeliefName().getIp()));
+						.getBelief(
+								new Anomalous(bg.getBeliefName().getConcept()));
 				return (anomalous != null && anomalous.getValue());
 			};
 		};
@@ -264,9 +267,10 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 			public boolean isContextApplicable(Goal goal) {
 				BeliefGoal<Restricted> bg = (BeliefGoal<Restricted>) goal;
 				PropositionalBelief<Benign> benign = (PropositionalBelief<Benign>) getBeliefBase()
-						.getBelief(new Benign(bg.getBeliefName().getIp()));
+						.getBelief(new Benign(bg.getBeliefName().getConcept()));
 				PropositionalBelief<RateLimited> rateLimited = (PropositionalBelief<RateLimited>) getBeliefBase()
-						.getBelief(new RateLimited(bg.getBeliefName().getIp()));
+						.getBelief(
+								new RateLimited(bg.getBeliefName().getConcept()));
 				return (benign != null && benign.getValue())
 						&& (rateLimited != null && rateLimited.getValue());
 			};
@@ -279,7 +283,8 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 				BeliefGoal<FullyOperational> bg = (BeliefGoal<FullyOperational>) goal;
 				PropositionalBelief<RegularUsage> regularUsage = (PropositionalBelief<RegularUsage>) getBeliefBase()
 						.getBelief(
-								new RegularUsage(bg.getBeliefName().getLink()));
+								new RegularUsage(bg.getBeliefName()
+										.getConcept()));
 				return (regularUsage != null && regularUsage.getValue());
 			};
 		};
@@ -295,10 +300,10 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 				PropositionalBelief<RegularUsage> regularUsage = (PropositionalBelief<RegularUsage>) getBeliefBase()
 						.getBelief(
 								new RegularUsage(fullyOperational.getName()
-										.getLink()));
+										.getConcept()));
 				if (regularUsage != null && regularUsage.getValue()) {
 					goalUpdateSet.generateGoal(createGoal(new FullyOperational(
-							fullyOperational.getName().getLink()), true));
+							fullyOperational.getName().getConcept()), true));
 				}
 
 			}
@@ -310,18 +315,19 @@ public class RateLimiterCapability extends RouterAgentCapability implements
 			PropositionalBelief<Restricted> restricted = (PropositionalBelief<Restricted>) belief;
 			if (restricted.getValue()) {
 				PropositionalBelief<Benign> benign = (PropositionalBelief<Benign>) getBeliefBase()
-						.getBelief(new Benign(restricted.getName().getIp()));
+						.getBelief(
+								new Benign(restricted.getName().getConcept()));
 				if (benign != null && benign.getValue()) {
 					goalUpdateSet.generateGoal(createGoal(new Restricted(
-							restricted.getName().getIp()), false));
+							restricted.getName().getConcept()), false));
 				}
 			}
 		}
 	}
 
 	@Override
-	public RoleType getRole() {
-		return RoleType.RATE_LIMITER;
+	public Role getRole() {
+		return Role.RATE_LIMITER;
 	}
 
 	@Override
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java
index bc2d6fe..6d556df 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java
@@ -32,7 +32,7 @@ import bdi4jade.belief.Belief;
 import bdi4jade.goal.BeliefGoal;
 import bdi4jade.plan.Plan.EndState;
 import bdi4jade.plan.planbody.BeliefGoalPlanBody;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
+import br.ufrgs.inf.bdinetr.domain.Role;
 
 /**
  * @author Ingrid Nunes
@@ -64,7 +64,7 @@ public class RequestBeliefGoalPlanBody extends BeliefGoalPlanBody {
 				// FIXME send request to specific role
 				TopicManagementHelper topicHelper = (TopicManagementHelper) myAgent
 						.getHelper(TopicManagementHelper.SERVICE_NAME);
-				for (RoleType role : RoleType.values()) {
+				for (Role role : Role.values()) {
 					msg.addReceiver(topicHelper.createTopic(role.name()));
 				}
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java
index 747d09f..a8f2cb3 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java
@@ -48,9 +48,9 @@ import br.ufrgs.inf.bdinetr.domain.Classifier;
 import br.ufrgs.inf.bdinetr.domain.FlowExporter;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.PReSETRouter;
+import br.ufrgs.inf.bdinetr.domain.Router;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter;
+import br.ufrgs.inf.bdinetr.domain.Role;
 
 /**
  * @author Ingrid Nunes
@@ -86,9 +86,9 @@ public class RouterAgent extends SingleCapabilityAgent implements
 		@bdi4jade.annotation.Plan
 		private final Plan respondBeliefGoalPlan;
 		@bdi4jade.annotation.Belief
-		private final Belief<String, PReSETRouter> router;
+		private final Belief<String, Router> router;
 
-		public RootCapability(PReSETRouter router) {
+		public RootCapability(Router router) {
 			this.router = new TransientBelief<>(ROUTER_BELIEF, router);
 			this.requestBeliefGoalPlan = new DefaultPlan(BeliefGoal.class,
 					RequestBeliefGoalPlanBody.class);
@@ -113,32 +113,32 @@ public class RouterAgent extends SingleCapabilityAgent implements
 
 	private static final long serialVersionUID = 6534875498063013722L;
 
-	public RouterAgent(PReSETRouter router) {
+	public RouterAgent(Router router) {
 		super(new RootCapability(router));
-		if (router.hasRole(RoleType.LINK_MONITOR)) {
+		if (router.hasRole(Role.LINK_MONITOR)) {
 			this.getCapability().addPartCapability(
 					new LinkMonitorCapability((LinkMonitor) router
-							.getRole(RoleType.LINK_MONITOR)));
+							.getRole(Role.LINK_MONITOR)));
 		}
-		if (router.hasRole(RoleType.ANOMALY_DETECTION)) {
+		if (router.hasRole(Role.ANOMALY_DETECTION)) {
 			this.getCapability().addPartCapability(
 					new AnomalyDetectionCapability((AnomalyDetection) router
-							.getRole(RoleType.ANOMALY_DETECTION)));
+							.getRole(Role.ANOMALY_DETECTION)));
 		}
-		if (router.hasRole(RoleType.RATE_LIMITER)) {
+		if (router.hasRole(Role.RATE_LIMITER)) {
 			this.getCapability().addPartCapability(
 					new RateLimiterCapability((RateLimiter) router
-							.getRole(RoleType.RATE_LIMITER)));
+							.getRole(Role.RATE_LIMITER)));
 		}
-		if (router.hasRole(RoleType.CLASSIFIER)) {
+		if (router.hasRole(Role.CLASSIFIER)) {
 			this.getCapability().addPartCapability(
 					new ClassifierCapability((Classifier) router
-							.getRole(RoleType.CLASSIFIER)));
+							.getRole(Role.CLASSIFIER)));
 		}
-		if (router.hasRole(RoleType.FLOW_EXPORTER)) {
+		if (router.hasRole(Role.FLOW_EXPORTER)) {
 			this.getCapability().addPartCapability(
 					new FlowExporterCapability((FlowExporter) router
-							.getRole(RoleType.FLOW_EXPORTER)));
+							.getRole(Role.FLOW_EXPORTER)));
 		}
 		setPlanSelectionStrategy(this);
 	}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgentCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgentCapability.java
index 0f841e1..7a8bff0 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgentCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgentCapability.java
@@ -26,7 +26,7 @@ import bdi4jade.core.Capability;
 import bdi4jade.goal.BeliefPresentGoal;
 import bdi4jade.goal.Goal;
 import bdi4jade.goal.PropositionalBeliefValueGoal;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
+import br.ufrgs.inf.bdinetr.domain.Role;
 
 /**
  * @author Ingrid Nunes
@@ -58,7 +58,7 @@ public abstract class RouterAgentCapability extends Capability {
 		return new PropositionalBeliefValueGoal(proposition, value);
 	}
 
-	public abstract RoleType getRole();
+	public abstract Role getRole();
 
 	protected void goal(Object proposition) {
 		getMyAgent().addGoal(this, createGoal(proposition));
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index 28e0704..bb5099b 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -56,8 +56,8 @@ import org.apache.log4j.PropertyConfigurator;
 import br.ufrgs.inf.bdinetr.agent.RouterAgent;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.Link;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.PReSETRouter;
+import br.ufrgs.inf.bdinetr.domain.Router;
+import br.ufrgs.inf.bdinetr.domain.Role;
 
 /**
  * @author Ingrid Nunes
@@ -71,13 +71,14 @@ public class BDINetRApp {
 		PropertyConfigurator.configure(BDINetRApp.class
 				.getResource("log4j.properties"));
 
-		Set<PReSETRouter> routers = new HashSet<>();
-		routers.add(new PReSETRouter(new Ip("RouterLM"), RoleType.LINK_MONITOR
+		Set<Router> routers = new HashSet<>();
+		routers.add(new Router(new Ip("RouterLM"), Role.LINK_MONITOR
 				.getId()));
-		routers.add(new PReSETRouter(new Ip("RouterRLCA"),
-				RoleType.RATE_LIMITER.getId() | RoleType.FLOW_EXPORTER.getId()
-						| RoleType.CLASSIFIER.getId()
-						| RoleType.ANOMALY_DETECTION.getId()));
+		routers.add(new Router(new Ip("RouterRLCA"), Role.RATE_LIMITER
+				.getId()
+				| Role.FLOW_EXPORTER.getId()
+				| Role.CLASSIFIER.getId()
+				| Role.ANOMALY_DETECTION.getId()));
 
 		Link affectedLink = new Link("AFFECTED_LINK");
 
@@ -92,7 +93,7 @@ public class BDINetRApp {
 		NETWORK = new Network(routers, links, affectedLinks);
 
 		AGENTS = new HashMap<>();
-		for (PReSETRouter router : NETWORK.getRouters()) {
+		for (Router router : NETWORK.getRouters()) {
 			AGENTS.put(router.getIp(), new RouterAgent(router));
 		}
 	}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/AnomalyDetection.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/AnomalyDetection.java
index 0bf40c1..b7ec1a0 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/AnomalyDetection.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/AnomalyDetection.java
@@ -35,9 +35,9 @@ import java.util.Set;
  * 
  * @author Ingrid Nunes
  */
-public class AnomalyDetection extends PReSETRole {
+public class AnomalyDetection extends RouterComponent {
 
-	public AnomalyDetection(PReSETRouter router) {
+	public AnomalyDetection(Router router) {
 		super(router);
 	}
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java
index 095f129..b602c9e 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java
@@ -32,9 +32,9 @@ import java.util.Set;
  * 
  * @author Ingrid Nunes
  */
-public class Classifier extends PReSETRole {
+public class Classifier extends RouterComponent {
 
-	public Classifier(PReSETRouter router) {
+	public Classifier(Router router) {
 		super(router);
 	}
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Flow.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Flow.java
index 1b2acff..b7e8b0a 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Flow.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Flow.java
@@ -29,6 +29,8 @@ import jade.content.ContentElement;
  */
 public class Flow implements ContentElement, Concept {
 
+	private static final long serialVersionUID = 9016750269033135868L;
+
 	private Ip dstIp;
 	private int dstPort;
 	private String protocol;
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java
index bce88dc..9bfebea 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java
@@ -26,9 +26,9 @@ package br.ufrgs.inf.bdinetr.domain;
  * 
  * @author Ingrid Nunes
  */
-public class FlowExporter extends PReSETRole {
+public class FlowExporter extends RouterComponent {
 
-	public FlowExporter(PReSETRouter router) {
+	public FlowExporter(Router router) {
 		super(router);
 	}
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Ip.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Ip.java
index 3ed6632..493bbf1 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Ip.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Ip.java
@@ -29,6 +29,8 @@ import jade.content.ContentElement;
  */
 public class Ip implements ContentElement, Concept {
 
+	private static final long serialVersionUID = -6397439243662425210L;
+
 	private final String address;
 
 	public Ip(String address) {
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Link.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Link.java
index 15d1269..82dfe08 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Link.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Link.java
@@ -29,6 +29,8 @@ import jade.content.ContentElement;
  */
 public class Link implements ContentElement, Concept {
 
+	private static final long serialVersionUID = 8547078610455643585L;
+
 	private final String id;
 
 	public Link(String id) {
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/LinkMonitor.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/LinkMonitor.java
index c28c4b8..c58dd26 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/LinkMonitor.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/LinkMonitor.java
@@ -34,11 +34,11 @@ import java.util.Set;
  * 
  * @author Ingrid Nunes
  */
-public class LinkMonitor extends PReSETRole {
+public class LinkMonitor extends RouterComponent {
 
 	private final Map<Link, Boolean> overUsageLinks;
 
-	public LinkMonitor(PReSETRouter router) {
+	public LinkMonitor(Router router) {
 		super(router);
 		this.overUsageLinks = new HashMap<>();
 	}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Observer.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Observer.java
index 80b87a4..8cd5f1c 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Observer.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Observer.java
@@ -1,5 +1,29 @@
+//----------------------------------------------------------------------------
+// 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 br.ufrgs.inf.bdinetr.domain;
 
+/**
+ * @author Ingrid Nunes
+ */
 public interface Observer {
 
 	public void update(Object o, Object arg);
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Anomalous.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Anomalous.java
new file mode 100644
index 0000000..ef275a0
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Anomalous.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Ip;
+
+public class Anomalous extends UnaryPredicate<Ip> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public Anomalous(Ip ip) {
+		super(ip);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/AttackPrevented.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/AttackPrevented.java
new file mode 100644
index 0000000..cfe874f
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/AttackPrevented.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Link;
+
+public class AttackPrevented extends UnaryPredicate<Link> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public AttackPrevented(Link link) {
+		super(link);
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Benign.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Benign.java
new file mode 100644
index 0000000..cc953bf
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Benign.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Ip;
+
+public class Benign extends UnaryPredicate<Ip> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public Benign(Ip ip) {
+		super(ip);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/BinaryPredicate.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/BinaryPredicate.java
new file mode 100644
index 0000000..ec71524
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/BinaryPredicate.java
@@ -0,0 +1,54 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import jade.content.Concept;
+import jade.content.ContentElement;
+
+public abstract class BinaryPredicate<T, U> implements ContentElement, Concept {
+
+	private static final long serialVersionUID = -1506723105103606268L;
+
+	protected T first;
+	protected U second;
+
+	public BinaryPredicate(T first, U second) {
+		this.first = first;
+		this.second = second;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj != null && this.getClass().equals(obj.getClass())) {
+			BinaryPredicate<?, ?> p = (BinaryPredicate<?, ?>) obj;
+			return this.first.equals(p.first) && this.second.equals(p.second);
+		}
+		return false;
+	}
+
+	public T getFirst() {
+		return first;
+	}
+
+	public U getSecond() {
+		return second;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((this.getClass() == null) ? 0 : this.getClass().hashCode());
+		result = prime * result + ((first == null) ? 0 : first.hashCode());
+		result = prime * result + ((second == null) ? 0 : second.hashCode());
+		return result;
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		sb.append(this.getClass().getSimpleName());
+		sb.append("(").append(first).append(",").append(second).append(")");
+		return sb.toString();
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/FlowRateLimited.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/FlowRateLimited.java
new file mode 100644
index 0000000..cf47227
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/FlowRateLimited.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Flow;
+
+public class FlowRateLimited extends UnaryPredicate<Flow> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public FlowRateLimited(Flow flow) {
+		super(flow);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/FullyOperational.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/FullyOperational.java
new file mode 100644
index 0000000..32955af
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/FullyOperational.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Link;
+
+public class FullyOperational extends UnaryPredicate<Link> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public FullyOperational(Link link) {
+		super(link);
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/OverUsage.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/OverUsage.java
new file mode 100644
index 0000000..90cafff
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/OverUsage.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Link;
+
+public class OverUsage extends UnaryPredicate<Link> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public OverUsage(Link link) {
+		super(link);
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/OverUsageCause.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/OverUsageCause.java
new file mode 100644
index 0000000..a731ab4
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/OverUsageCause.java
@@ -0,0 +1,14 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Ip;
+import br.ufrgs.inf.bdinetr.domain.Link;
+
+public class OverUsageCause extends BinaryPredicate<Ip, Link> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public OverUsageCause(Ip ip, Link link) {
+		super(ip, link);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/RateLimited.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/RateLimited.java
new file mode 100644
index 0000000..89e87b2
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/RateLimited.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Ip;
+
+public class RateLimited extends UnaryPredicate<Ip> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public RateLimited(Ip ip) {
+		super(ip);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/RegularUsage.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/RegularUsage.java
new file mode 100644
index 0000000..2cabc67
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/RegularUsage.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Link;
+
+public class RegularUsage extends UnaryPredicate<Link> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public RegularUsage(Link link) {
+		super(link);
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Restricted.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Restricted.java
new file mode 100644
index 0000000..9bf374c
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Restricted.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Ip;
+
+public class Restricted extends UnaryPredicate<Ip> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public Restricted(Ip ip) {
+		super(ip);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Threat.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Threat.java
new file mode 100644
index 0000000..8aa89f8
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/Threat.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Flow;
+
+public class Threat extends UnaryPredicate<Flow> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public Threat(Flow flow) {
+		super(flow);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/ThreatResponded.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/ThreatResponded.java
new file mode 100644
index 0000000..1ab6a13
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/ThreatResponded.java
@@ -0,0 +1,13 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import br.ufrgs.inf.bdinetr.domain.Flow;
+
+public class ThreatResponded extends UnaryPredicate<Flow> {
+
+	private static final long serialVersionUID = -5495943806870470494L;
+
+	public ThreatResponded(Flow flow) {
+		super(flow);
+	}
+
+}
\ No newline at end of file
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/UnaryPredicate.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/UnaryPredicate.java
new file mode 100644
index 0000000..1934275
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/predicate/UnaryPredicate.java
@@ -0,0 +1,47 @@
+package br.ufrgs.inf.bdinetr.domain.predicate;
+
+import jade.content.Concept;
+import jade.content.ContentElement;
+
+public abstract class UnaryPredicate<T> implements ContentElement, Concept {
+
+	private static final long serialVersionUID = -1506723105103606268L;
+
+	protected T concept;
+
+	public UnaryPredicate(T concept) {
+		this.concept = concept;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj != null && this.getClass().equals(obj.getClass())) {
+			UnaryPredicate<?> p = (UnaryPredicate<?>) obj;
+			return this.concept.equals(p.concept);
+		}
+		return false;
+	}
+
+	public T getConcept() {
+		return concept;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((this.getClass() == null) ? 0 : this.getClass().hashCode());
+		result = prime * result + ((concept == null) ? 0 : concept.hashCode());
+		return result;
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		sb.append(this.getClass().getSimpleName());
+		sb.append("(").append(concept).append(")");
+		return sb.toString();
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
index a53d39a..ae88ded 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
@@ -36,7 +36,7 @@ import java.util.Map;
  * 
  * @author Ingrid Nunes
  */
-public class RateLimiter extends PReSETRole {
+public class RateLimiter extends RouterComponent {
 
 	public class LimitLinkEvent {
 		private Link link;
@@ -54,7 +54,7 @@ public class RateLimiter extends PReSETRole {
 	private final Map<Ip, Double> rateLimitedIps;
 	private final Map<Link, Double> rateLimitedLinks;
 
-	public RateLimiter(PReSETRouter router) {
+	public RateLimiter(Router router) {
 		super(router);
 		this.rateLimitedLinks = new HashMap<>();
 		this.rateLimitedIps = new HashMap<>();
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Role.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Role.java
new file mode 100644
index 0000000..f90a7ed
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Role.java
@@ -0,0 +1,43 @@
+//----------------------------------------------------------------------------
+// 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 br.ufrgs.inf.bdinetr.domain;
+
+public enum Role {
+
+	ANOMALY_DETECTION(1), CLASSIFIER(2), FLOW_EXPORTER(4), LINK_MONITOR(8), RATE_LIMITER(
+			16);
+
+	private final int id;
+
+	private Role(int id) {
+		this.id = id;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public boolean isPresent(int roles) {
+		return (roles & id) != 0;
+	}
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java b/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
index cbc564f..97be9ee 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
@@ -29,10 +29,10 @@ import org.apache.commons.logging.LogFactory;
 import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
 import br.ufrgs.inf.bdinetr.domain.Observer;
-import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
-import br.ufrgs.inf.bdinetr.domain.PReSETRouter;
+import br.ufrgs.inf.bdinetr.domain.Router;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter.LimitLinkEvent;
+import br.ufrgs.inf.bdinetr.domain.Role;
 
 /**
  * @author Ingrid Nunes
@@ -42,18 +42,18 @@ public class Network implements Observer {
 	private final Set<Link> affectedLinks;
 	private final Set<Link> links;
 	private final Log log;
-	private final Set<PReSETRouter> routers;
+	private final Set<Router> routers;
 
-	public Network(Set<PReSETRouter> routers, Set<Link> links,
+	public Network(Set<Router> routers, Set<Link> links,
 			Set<Link> affectedLinks) {
 		this.log = LogFactory.getLog(this.getClass());
 		this.routers = routers;
 		this.links = links;
 		this.affectedLinks = affectedLinks;
 
-		for (PReSETRouter router : routers) {
-			if (router.hasRole(RoleType.RATE_LIMITER)) {
-				((RateLimiter) router.getRole(RoleType.RATE_LIMITER))
+		for (Router router : routers) {
+			if (router.hasRole(Role.RATE_LIMITER)) {
+				((RateLimiter) router.getRole(Role.RATE_LIMITER))
 						.attachObserver(this);
 			}
 		}
@@ -63,7 +63,7 @@ public class Network implements Observer {
 		this.links.add(link);
 	}
 
-	public void addRouter(PReSETRouter router) {
+	public void addRouter(Router router) {
 		this.routers.add(router);
 	}
 
@@ -71,7 +71,7 @@ public class Network implements Observer {
 		return links;
 	}
 
-	public Set<PReSETRouter> getRouters() {
+	public Set<Router> getRouters() {
 		return routers;
 	}
 
@@ -82,10 +82,10 @@ public class Network implements Observer {
 	public void run() {
 		log.info("Updating link usage");
 		for (Link link : affectedLinks) {
-			for (PReSETRouter router : routers) {
-				if (router.hasRole(RoleType.LINK_MONITOR)) {
+			for (Router router : routers) {
+				if (router.hasRole(Role.LINK_MONITOR)) {
 					LinkMonitor lm = (LinkMonitor) router
-							.getRole(RoleType.LINK_MONITOR);
+							.getRole(Role.LINK_MONITOR);
 					lm.setOverUsage(link, true);
 				}
 			}
@@ -96,10 +96,10 @@ public class Network implements Observer {
 	public void update(Object o, Object arg) {
 		if (arg instanceof LimitLinkEvent) {
 			LimitLinkEvent event = (LimitLinkEvent) arg;
-			for (PReSETRouter router : routers) {
-				if (router.hasRole(RoleType.LINK_MONITOR)) {
+			for (Router router : routers) {
+				if (router.hasRole(Role.LINK_MONITOR)) {
 					LinkMonitor lm = (LinkMonitor) router
-							.getRole(RoleType.LINK_MONITOR);
+							.getRole(Role.LINK_MONITOR);
 					if (lm.isOverUsage(event.getLink())) {
 						lm.setOverUsage(event.getLink(), false);
 					}