package com.plectix.simulator.simulator.api.steps;
import com.plectix.simulator.io.ConsoleOutputManager;
import com.plectix.simulator.parser.SimulationDataFormatException;
import com.plectix.simulator.parser.abstractmodel.KappaModel;
import com.plectix.simulator.parser.builders.KappaSystemBuilder;
import com.plectix.simulator.simulator.KappaSystem;
import com.plectix.simulator.simulator.SimulationArguments;
import com.plectix.simulator.simulator.SimulationData;
import com.plectix.simulator.simulator.SimulationArguments.SimulationType;
import com.plectix.simulator.simulator.api.OperationType;
import com.plectix.simulator.simulator.api.SimulatorState;
public class KappaFileCompilationOperation extends AbstractOperation<KappaSystem> {
private final SimulationData simulationData;
private KappaModel kappaModel = null;
public KappaFileCompilationOperation(SimulationData simulationData, KappaModel kappaModel) {
super(simulationData, OperationType.KAPPA_FILE_COMPILATION);
this.simulationData = simulationData;
this.kappaModel = kappaModel;
}
public KappaFileCompilationOperation(SimulationData simulationData) {
super(simulationData, OperationType.KAPPA_FILE_COMPILATION);
this.simulationData = simulationData;
}
protected KappaSystem performDry() throws SimulationDataFormatException {
if (kappaModel == null) {
kappaModel = simulationData.getInitialModel();
if (kappaModel == null) {
throw new NoKappaInputException();
}
}
try {
KappaSystem kappaSystem = new KappaSystemBuilder(simulationData).build(kappaModel);
kappaSystem.getState().setKappaFileCompiled();
return kappaSystem;
} catch (SimulationDataFormatException e) {
ConsoleOutputManager console = simulationData
.getConsoleOutputManager();
SimulationArguments simulationArguments = simulationData.getSimulationArguments();
console.println("Error in file \""
+ simulationArguments.getInputFileName() + "\" :");
throw e;
//TODO HANDLE THIS ERROR
/*
* return new CompiledkappaModel(kappaModel); + exceptions!
*/
}
}
@Override
protected boolean noNeedToPerform() {
SimulatorState state = simulationData.getKappaSystem().getState();
SimulationType latestType = state.getLatestSimulationType();
SimulationType currentType = simulationData.getSimulationArguments().getSimulationType();
return state.isKappaFileCompiled() && latestType.hasSimilarCompilationStage(currentType);
}
@Override
protected KappaSystem retrievePreparedResult() {
return simulationData.getKappaSystem();
}
}