package com.plectix.simulator.staticanalysis.influencemap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.plectix.simulator.simulator.KappaSystem;
import com.plectix.simulator.staticanalysis.Rule;
import com.plectix.simulator.staticanalysis.abstracting.AbstractAgent;
import com.plectix.simulator.staticanalysis.contactmap.ContactMap;
import com.plectix.simulator.staticanalysis.observables.Observables;
import com.plectix.simulator.staticanalysis.subviews.base.AbstractionRule;
public abstract class InfluenceMap {
private final Map<Integer, List<InfluenceMapEdge>> activationMap;
private final Map<Integer, List<InfluenceMapEdge>> activationMapObservables;
private final Map<Integer, List<InfluenceMapEdge>> inhibitionMap;
private final Map<Integer, List<InfluenceMapEdge>> inhibitionMapObservables;
private Map<Integer, List<AbstractionRule>> observbableRules;
protected InfluenceMap() {
activationMap = new LinkedHashMap<Integer, List<InfluenceMapEdge>>();
inhibitionMap = new LinkedHashMap<Integer, List<InfluenceMapEdge>>();
activationMapObservables = new LinkedHashMap<Integer, List<InfluenceMapEdge>>();
inhibitionMapObservables = new LinkedHashMap<Integer, List<InfluenceMapEdge>>();
}
public abstract void initInfluenceMap(List<AbstractionRule> rules,
Observables observables, ContactMap contactMap,
Map<String, AbstractAgent> agentNameToAgent);
public final List<Integer> getActivationByRule(Integer ruleId) {
List<Integer> answer = new LinkedList<Integer>();
List<InfluenceMapEdge> list = activationMap.get(ruleId);
if (list == null) {
return null;
}
for (InfluenceMapEdge iE : activationMap.get(ruleId)) {
answer.add(iE.getTargetRule());
}
return answer;
}
public final List<Integer> getInhibitionByRule(Integer ruleId) {
List<Integer> answer = new LinkedList<Integer>();
List<InfluenceMapEdge> list = inhibitionMap.get(ruleId);
if (list == null) {
return null;
}
for (InfluenceMapEdge iE : inhibitionMap.get(ruleId)) {
answer.add(iE.getTargetRule());
}
return answer;
}
public final void fillActivatedInhibitedRules(List<Rule> rules,
KappaSystem kappaSystem, Observables observables) {
for (Rule rule : rules) {
if (activationMap.containsKey(rule.getRuleId()))
for (InfluenceMapEdge edge : activationMap
.get(rule.getRuleId())) {
Rule ruleAdd = kappaSystem.getRuleById(edge.getTargetRule());
rule.addActivatedRule(ruleAdd);
}
if (activationMapObservables.containsKey(rule.getRuleId()))
for (InfluenceMapEdge edge : activationMapObservables.get(rule
.getRuleId())) {
for (AbstractionRule obsRule : observbableRules.get(edge.getTargetRule()))
rule.addActivatedObs(obsRule.getObservableComponent());
}
if (inhibitionMapObservables.containsKey(rule.getRuleId()))
for (InfluenceMapEdge edge : inhibitionMapObservables.get(rule
.getRuleId())) {
for (AbstractionRule obsRule : observbableRules.get(edge.getTargetRule()))
rule.addinhibitedObs(obsRule.getObservableComponent());
}
if (inhibitionMap.containsKey(rule.getRuleId()))
for (InfluenceMapEdge edge : inhibitionMap
.get(rule.getRuleId())) {
Rule ruleAdd = kappaSystem.getRuleById(edge.getTargetRule());
rule.addinhibitedRule(ruleAdd);
}
}
}
public final Map<Integer, List<InfluenceMapEdge>> getActivationMap() {
return activationMap;
}
public final Map<Integer, List<InfluenceMapEdge>> getActivationMapObservables() {
return activationMapObservables;
}
public final Map<Integer, List<InfluenceMapEdge>> getInhibitionMap() {
return inhibitionMap;
}
public final Map<Integer, List<InfluenceMapEdge>> getInhibitionMapObservables() {
return inhibitionMapObservables;
}
protected final Map<Integer, List<AbstractionRule>> getObservbableRules() {
return observbableRules;
}
protected final void setObservbableRules(
Map<Integer, List<AbstractionRule>> observbableRules) {
this.observbableRules = observbableRules;
}
}