package com.plectix.simulator.parser.builders; import java.util.List; import com.plectix.simulator.interfaces.ConnectedComponentInterface; import com.plectix.simulator.parser.ParseErrorException; import com.plectix.simulator.parser.ParseErrorMessage; import com.plectix.simulator.parser.abstractmodel.observables.ModelObservables; import com.plectix.simulator.parser.abstractmodel.observables.ObservableComponentLineData; import com.plectix.simulator.parser.abstractmodel.observables.ObservableRuleLineData; import com.plectix.simulator.simulator.KappaSystem; import com.plectix.simulator.simulator.SimulationData; import com.plectix.simulator.staticanalysis.Agent; import com.plectix.simulator.staticanalysis.Rule; import com.plectix.simulator.staticanalysis.observables.Observables; import com.plectix.simulator.util.SpeciesManager; final class ObservablesBuilder { private final Observables existingObservables; private final SubstanceBuilder substanceBuilder; public ObservablesBuilder(SimulationData simulationData) { KappaSystem kappaSystem = simulationData.getKappaSystem(); this.existingObservables = kappaSystem.getObservables(); this.substanceBuilder = new SubstanceBuilder(kappaSystem); } public final Observables build(ModelObservables abstractObservables, List<Rule> rules) throws ParseErrorException{ Observables observables = existingObservables; for (ObservableComponentLineData componentData : abstractObservables.getComponents()) { List<Agent> agentsList = substanceBuilder.buildAgents(componentData.getAgents()); String obsName = componentData.getName(); int id = componentData.getId(); List<ConnectedComponentInterface> listCC = SpeciesManager .formConnectedComponents(agentsList); observables.addConnectedComponents(listCC, obsName, componentData.getLine(), id); } for (ObservableRuleLineData obsRule : abstractObservables.getRuleNames()) { String ruleName = obsRule.getRuleName(); int id = obsRule.getId(); if(!observables.addRulesName(ruleName, id, rules)){ ParseErrorException exeption = new ParseErrorException(obsRule.getKappaFileLine(), ParseErrorMessage.NO_SUCH_RULE); throw exeption; } } return observables; } }