/** * * marcosnr * 28/02/2012 */ package au.org.aurin.wif.impl.datacreator; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import au.org.aurin.wif.impl.report.allocation.AllocationReporter; import au.org.aurin.wif.io.CouchMapper; import au.org.aurin.wif.io.demonstrationdata.DemonstrationAllocationNoControlsData; import au.org.aurin.wif.model.WifProject; import au.org.aurin.wif.model.allocation.AllocationLU; import au.org.aurin.wif.model.allocation.AllocationScenario; import au.org.aurin.wif.model.demand.DemandScenario; import au.org.aurin.wif.model.reports.allocation.AllocationAnalysisReport; import au.org.aurin.wif.model.suitability.SuitabilityScenario; import au.org.aurin.wif.repo.allocation.AllocationScenarioDao; import au.org.aurin.wif.repo.impl.CouchAllocationLUDao; import au.org.aurin.wif.repo.impl.CouchWifProjectDao; import au.org.aurin.wif.repo.reports.allocation.AllocationAnalysisReportDao; import au.org.aurin.wif.svc.ProjectService; import au.org.aurin.wif.svc.datacreator.DBDataCreatorService; import au.org.aurin.wif.svc.datacreator.DBDemandAnalysisDataCreatorService; import au.org.aurin.wif.svc.demand.DemandScenarioService; import au.org.aurin.wif.svc.suitability.SuitabilityScenarioService; /** * The Class DBAllocationDataCreatorServiceImpl. */ @Component("DBDataCreator") public class DBDataCreatorServiceImpl implements DBDataCreatorService { /** The wif project dao. */ @Autowired private CouchWifProjectDao wifProjectDao; /** The allocation lu dao. */ @Autowired private CouchAllocationLUDao allocationLUDao; /** The allocation scenario dao. */ @Autowired private AllocationScenarioDao allocationScenarioDao; /** The allocationSetupCreator. */ @Autowired private DBDemandAnalysisDataCreatorService demandAnalysisCreator; /** The suitability scenario service. */ @Resource private SuitabilityScenarioService suitabilityScenarioService; /** The demand scenario service. */ @Resource private DemandScenarioService demandScenarioService; /** The project service. */ @Resource private ProjectService projectService; /** The mapper. */ @Autowired private CouchMapper mapper; /** The Constant LOGGER. */ private static final Logger LOGGER = LoggerFactory .getLogger(DBDataCreatorServiceImpl.class); /** The allocation reporter. */ @Autowired private AllocationReporter allocationReporter; /** The allocation analysis report dao. */ @Autowired private AllocationAnalysisReportDao allocationAnalysisReportDao; /* * (non-Javadoc) * @see au.org.aurin.wif.svc.DBAllocationDataCreatorService# * createAllocationModule (java.lang.String, java.lang.String) */ public WifProject createDemonstrationModule(String projectId, String suitabilityScenarioId, String demandConfigId, String demandScenarioId, String allocationScenarioId, String allocationScenarioReportId, String manualdemandConfigId) throws Exception { WifProject project = demandAnalysisCreator.createDemandAnalysisModule( projectId, suitabilityScenarioId, demandConfigId, demandScenarioId, manualdemandConfigId); if (allocationScenarioId != null) { LOGGER.trace("Finding a scenario with id: {}", allocationScenarioId); AllocationScenario allocationScenario = allocationScenarioDao .findAllocationScenarioById(allocationScenarioId); if (allocationScenario == null) { DemandScenario demandScenario = demandScenarioService .getDemandScenario(demandScenarioId); SuitabilityScenario suitabilityScenario = suitabilityScenarioService .getSuitabilityScenario(suitabilityScenarioId); project.getSuitabilityScenarios().add(suitabilityScenario); project.getDemandScenarios().add(demandScenario); project = DemonstrationAllocationNoControlsData .createAllocationModule(project); allocationScenario = project .getAllocationScenarioByLabel("Suburbanization-High Growth-No Controls"); LOGGER.trace("Creating a scenario: {}", allocationScenario.getLabel()); allocationScenario.setProjectId(projectId); allocationScenario.setId(allocationScenarioId); allocationScenario.setSuitabilityScenarioId(suitabilityScenarioId); allocationScenario.setDemandScenarioId(demandScenarioId); projectService.updateProject(project); allocationScenarioDao.persistAllocationScenario(allocationScenario); // Updating allocationLU and allocationLabels Set<AllocationLU> allocationLandUses = project.getAllocationLandUses(); for (AllocationLU allocationLU : allocationLandUses) { LOGGER.trace("... ALU label: {}, allocationFFName {}", allocationLU.getLabel(), allocationLU.getAllocationFeatureFieldName()); allocationLUDao.updateAllocationLU(allocationLU); } // creating an allocation report if it doesn't exist if (allocationScenarioReportId != null) { LOGGER.trace("Finding an allocation scenarioReport with id: {}", allocationScenarioId); AllocationAnalysisReport allocationAnalysisReport = allocationAnalysisReportDao .findAllocationAnalysisReportById(allocationScenarioReportId); if (allocationAnalysisReport == null) { allocationScenario.setWifProject(project); allocationScenario.setDemandScenario(demandScenario); allocationAnalysisReport = allocationReporter .getAllocationAnalysisReport(allocationScenario); allocationAnalysisReport.setId(allocationScenarioReportId); AllocationAnalysisReport createdAllocationAnalysisReport = allocationAnalysisReportDao .persistAllocationAnalysisReport(allocationAnalysisReport); LOGGER.info("createdAllocationAnalysisReport uuid: " + createdAllocationAnalysisReport.getId()); } } // Updating project Map<String, String> idLabelMap = mapper .getIdLabelMap(allocationScenario); project.getAllocationScenariosMap().putAll(idLabelMap); wifProjectDao.updateProject(project); } LOGGER.trace("Successfully loaded allocation scenario: {}", allocationScenario.getLabel()); } LOGGER.info("Successfully loaded allocation analysis module "); return project; } }