package com.plectix.simulator.simulator.initialization; import java.util.Collection; import com.plectix.simulator.interfaces.ConnectedComponentInterface; import com.plectix.simulator.interfaces.ObservableConnectedComponentInterface; import com.plectix.simulator.simulationclasses.solution.SuperSubstance; import com.plectix.simulator.simulator.KappaSystem; import com.plectix.simulator.staticanalysis.Agent; import com.plectix.simulator.staticanalysis.ObservableConnectedComponent; import com.plectix.simulator.staticanalysis.Rule; public final class InjectionsBuilder { private final KappaSystem kappaSystem; public InjectionsBuilder(KappaSystem system) { kappaSystem = system; } private final void walkInjectingComponents(InjectionSettingStrategy strategy, Agent solutionAgent) { for (Rule rule : kappaSystem.getRules()) { for (ConnectedComponentInterface cc : rule.getLeftHandSide()) { if (cc != null) { strategy.process(cc, solutionAgent); } } } for (ObservableConnectedComponentInterface oCC : kappaSystem.getObservables().getConnectedComponentList()) { if (oCC != null) { if (oCC.getMainAutomorphismNumber() == ObservableConnectedComponent.NO_INDEX) { strategy.process(oCC, solutionAgent); } } } } public final void build() { InjectionSettingStrategy strategy = new StraightInjectionSettingStrategy(); for (Agent agent : kappaSystem.getSolution().getStraightStorage().getAgents()) { this.walkInjectingComponents(strategy, agent); } for (SuperSubstance substance : kappaSystem.getSolution().getSuperStorage().getComponents()) { strategy = new SuperInjectionSettingStrategy(substance); for (Agent agent : substance.getComponent().getAgents()) { this.walkInjectingComponents(strategy, agent); } } } public final void build(Collection<Agent> agents) { InjectionSettingStrategy strategy = new StraightInjectionSettingStrategy(); for (Agent agent : agents) { walkInjectingComponents(strategy, agent); } } public final void build(SuperSubstance substance) { InjectionSettingStrategy strategy = new SuperInjectionSettingStrategy(substance); for (Agent agent : substance.getComponent().getAgents()) { walkInjectingComponents(strategy, agent); } } }