package com.plectix.simulator.simulator.api.steps; import com.plectix.simulator.simulator.KappaSystem; import com.plectix.simulator.simulator.SimulationData; import com.plectix.simulator.simulator.SimulationArguments.SimulationType; import com.plectix.simulator.simulator.api.OperationType; import com.plectix.simulator.staticanalysis.contactmap.ContactMap; import com.plectix.simulator.staticanalysis.contactmap.ContactMapMode; public class ContactMapComputationOperation extends AbstractOperation<ContactMap> { private final SimulationData simulationData; public ContactMapComputationOperation(SimulationData simulationData) { super(simulationData, initiateType(simulationData)); this.simulationData = simulationData; } private static OperationType initiateType(SimulationData simulationData) { if (simulationData.getKappaSystem().getContactMap().getMode() == ContactMapMode.SEMANTIC) { return OperationType.MODEL_CONTACT_MAP; } else { return OperationType.NON_MODEL_CONTACT_MAP; } } protected ContactMap performDry() { simulationData.getSimulationArguments().setSimulationType(SimulationType.CONTACT_MAP); KappaSystem kappaSystem = simulationData.getKappaSystem(); ContactMap contactMap = kappaSystem.getContactMap(); contactMap.fillContactMap(kappaSystem.getRules(), kappaSystem.getSubViews(), kappaSystem); simulationData.getKappaSystem().getState().refreshSimulationType(SimulationType.CONTACT_MAP); return contactMap; } @Override protected boolean noNeedToPerform() { return simulationData.getKappaSystem().getContactMap().isInitialized(); } @Override protected ContactMap retrievePreparedResult() { return simulationData.getKappaSystem().getContactMap(); } }