package uk.ac.ox.zoo.seeg.abraid.mp.datamanager.process;
import org.springframework.transaction.annotation.Transactional;
import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.DiseaseProcessType;
import uk.ac.ox.zoo.seeg.abraid.mp.common.service.workflow.ModelRunWorkflowService;
/**
* Conditionally performs each step in the daily disease process.
*
* Copyright (c) 2014 University of Oxford
*/
@Transactional(rollbackFor = Exception.class)
public class DiseaseProcessManager {
private DiseaseProcessGatekeeper diseaseProcessGatekeeper;
private ModelRunWorkflowService modelRunWorkflowService;
public DiseaseProcessManager(
DiseaseProcessGatekeeper diseaseProcessGatekeeper, ModelRunWorkflowService modelRunWorkflowService) {
this.diseaseProcessGatekeeper = diseaseProcessGatekeeper;
this.modelRunWorkflowService = modelRunWorkflowService;
}
/**
* Calculates and saves the new weighting for each active expert.
*/
public void updateExpertsWeightings() {
modelRunWorkflowService.updateExpertsWeightings();
}
/**
* Process any occurrences currently on the validator, for a given disease group.
* @param diseaseGroupId The id of the disease group.
*/
public void processOccurrencesOnDataValidator(int diseaseGroupId) {
modelRunWorkflowService.processOccurrencesOnDataValidator(diseaseGroupId, DiseaseProcessType.AUTOMATIC);
}
/**
* Updates the disease extents if required, for a given disease group.
* @param diseaseGroupId The id of the disease group.
*/
public void updateDiseaseExtents(int diseaseGroupId) {
if (diseaseProcessGatekeeper.extentShouldRun(diseaseGroupId)) {
modelRunWorkflowService.generateDiseaseExtent(diseaseGroupId, DiseaseProcessType.AUTOMATIC);
}
}
/**
* Requests a model run if required, for a given disease group.
* @param diseaseGroupId The id of the disease group.
*/
public void requestModelRun(int diseaseGroupId) {
if (diseaseProcessGatekeeper.modelShouldRun(diseaseGroupId)) {
modelRunWorkflowService.prepareForAndRequestModelRun(
diseaseGroupId, DiseaseProcessType.AUTOMATIC, null, null);
}
}
}