package com.plectix.simulator.simulator.api;
import com.plectix.simulator.controller.SimulatorInputData;
import com.plectix.simulator.simulator.Simulator;
import com.plectix.simulator.simulator.api.steps.ContactMapComputationOperation;
import com.plectix.simulator.simulator.api.steps.DeadRuleDetectionOperation;
import com.plectix.simulator.simulator.api.steps.InfluenceMapComputationOperation;
import com.plectix.simulator.simulator.api.steps.InjectionBuildingOperation;
import com.plectix.simulator.simulator.api.steps.KappaFileLoadingOperation;
import com.plectix.simulator.simulator.api.steps.LocalViewsComputationOperation;
import com.plectix.simulator.simulator.api.steps.OperationManager;
import com.plectix.simulator.simulator.api.steps.ReportErrorOperation;
import com.plectix.simulator.simulator.api.steps.RuleCompressionOperation;
import com.plectix.simulator.simulator.api.steps.SimulationOperation;
import com.plectix.simulator.simulator.api.steps.SimulatorInitializationOperation;
import com.plectix.simulator.simulator.api.steps.SolutionInitializationOperation;
import com.plectix.simulator.simulator.api.steps.SpeciesEnumerationOperation;
import com.plectix.simulator.simulator.api.steps.StoriesComputationOperation;
import com.plectix.simulator.simulator.api.steps.SubviewsComputationOperation;
import com.plectix.simulator.simulator.api.steps.XMLOutputOperation;
import com.plectix.simulator.staticanalysis.rulecompression.RuleCompressionType;
public class SimulatorAPI implements SimulatorAPIInterface {
@Override
public void initiateSimulator(Simulator simulator, SimulatorInputData inputData) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new SimulatorInitializationOperation(simulator, inputData));
}
@Override
public void buildInjections(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new InjectionBuildingOperation(simulator.getSimulationData().getKappaSystem()));
}
// @Override
// public void compileKappaFile(Simulator simulator, KappaFile kappaInput) throws Exception {
// OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
// manager.perform(new KappaFileCompilationOperation(simulator.getSimulationData(), kappaInput, InfoType.OUTPUT));
// }
@Override
public void compressRulesQuality(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new RuleCompressionOperation(simulator.getSimulationData().getKappaSystem(), RuleCompressionType.QUALITATIVE));
}
@Override
public void compressRulesQuantity(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new RuleCompressionOperation(simulator.getSimulationData().getKappaSystem(), RuleCompressionType.QUANTITATIVE));
}
@Override
public void computeContactMap(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new ContactMapComputationOperation(simulator.getSimulationData()));
}
@Override
public void computeInfluenceMap(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new InfluenceMapComputationOperation(simulator.getSimulationData()));
}
@Override
public void computeLocalViews(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new LocalViewsComputationOperation(simulator.getSimulationData()));
}
@Override
public void computeSubviews(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new SubviewsComputationOperation(simulator.getSimulationData().getKappaSystem()));
}
@Override
public void computeStories(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new StoriesComputationOperation(simulator));
}
@Override
public void enumerateSpecies(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new SpeciesEnumerationOperation(simulator.getSimulationData().getKappaSystem()));
}
@Override
public void initializeSolution(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new SolutionInitializationOperation(simulator.getSimulationData()));
}
@Override
public void loadKappaFile(Simulator simulator, String kappaInputId) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new KappaFileLoadingOperation(simulator.getSimulationData(), kappaInputId));
}
@Override
public void locateDeadRules(Simulator simulator) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new DeadRuleDetectionOperation(simulator.getSimulationData().getKappaSystem()));
}
@Override
public void outputToXML(Simulator simulator, String xmlDestinationPath) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new XMLOutputOperation(simulator.getSimulationData(), xmlDestinationPath));
}
@Override
public void returnError(Simulator simulator, String message) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new ReportErrorOperation(message));
}
@Override
public void returnError(Simulator simulator, Exception exception) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
manager.perform(new ReportErrorOperation(exception));
}
@Override
public void simulateByTime(Simulator simulator, double time) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
simulator.getSimulationData().getSimulationArguments().setTimeLimit(time);
manager.perform(new SimulationOperation(simulator));
}
@Override
public void simulateByEvents(Simulator simulator, long events) throws Exception {
OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager();
simulator.getSimulationData().getSimulationArguments().setMaxNumberOfEvents(events);
manager.perform(new SimulationOperation(simulator));
}
}