package gov.samhsa.consent2share.service.valueset; import gov.samhsa.consent2share.domain.valueset.CodeSystem; import gov.samhsa.consent2share.domain.valueset.CodeSystemRepository; import gov.samhsa.consent2share.domain.valueset.CodeSystemVersion; import gov.samhsa.consent2share.domain.valueset.CodeSystemVersionRepository; import gov.samhsa.consent2share.service.dto.CodeSystemVersionCSDto; import gov.samhsa.consent2share.service.dto.CodeSystemVersionDto; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.transaction.annotation.Transactional; /** * The Class CodeSystemVersionServiceImpl. */ public class CodeSystemVersionServiceImpl implements CodeSystemVersionService { /** The logger. */ private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** The code system version repository. */ private CodeSystemVersionRepository codeSystemVersionRepository; /** The code system repository. */ private CodeSystemRepository codeSystemRepository; /** The code system version mgmt helper. */ ValueSetMgmtHelper codeSystemVersionMgmtHelper; /** * Instantiates a new code system version service impl. * * @param codeSystemVersionRepository * the code system version repository * @param codeSystemRepository * the code system repository * @param codeSystemVersionMgmtHelper * the code system version mgmt helper */ public CodeSystemVersionServiceImpl( CodeSystemVersionRepository codeSystemVersionRepository, CodeSystemRepository codeSystemRepository, ValueSetMgmtHelper codeSystemVersionMgmtHelper) { super(); this.codeSystemVersionRepository = codeSystemVersionRepository; this.codeSystemRepository = codeSystemRepository; this.codeSystemVersionMgmtHelper = codeSystemVersionMgmtHelper; } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.valueset.CodeSystemVersionService#create * (gov.samhsa.consent2share.service.dto.CodeSystemVersionDto) */ @Override @Transactional public CodeSystemVersionDto create(CodeSystemVersionDto created) throws CodeSystemNotFoundException { logger.debug("Creating a new CodeSystemVersion with information: " + created); String description = (created.getDescription() != null) ? created .getDescription() : ""; CodeSystemVersion codeSystemVersion = CodeSystemVersion .getBuilder(created.getCode(), created.getName(), created.getUserName()).description(description).build(); // Step:1 Save the codesystemversion in the codesystemversion table. codeSystemVersion = codeSystemVersionRepository.save(codeSystemVersion); // get the codesystemv entity from chosen codesystem id Long codeSystemId = created.getCodeSystemId(); CodeSystem selected = codeSystemRepository.findOne(codeSystemId); if (selected == null) { logger.debug("No CodeSystem found with an id: " + codeSystemId); throw new CodeSystemNotFoundException(); } // refere codesystemversion category id to the codesystemversion entity // object codeSystemVersion.setCodeSystem(selected); CodeSystemVersionDto codeSystemVersionDto = codeSystemVersionMgmtHelper .createCodeSystemVersionDtoFromEntity(codeSystemVersion); codeSystemVersionDto.setCodeSystemName(selected.getName()); return codeSystemVersionDto; } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.valueset.CodeSystemVersionService#delete * (java.lang.Long) */ @Override @Transactional(rollbackFor = CodeSystemVersionNotFoundException.class) public CodeSystemVersionDto delete(Long codeSystemVersionId) throws CodeSystemVersionNotFoundException { logger.debug("Deleting CodeSystemVersion with id: " + codeSystemVersionId); CodeSystemVersion deleted = codeSystemVersionRepository .findOne(codeSystemVersionId); if (deleted == null) { logger.debug("No CodeSystemVersion found with an id: " + codeSystemVersionId); throw new CodeSystemVersionNotFoundException(); } codeSystemVersionRepository.delete(deleted); return codeSystemVersionMgmtHelper .createCodeSystemVersionDtoFromEntity(deleted); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.valueset.CodeSystemVersionService#findAll * () */ @Override public List<CodeSystemVersionDto> findAll() { logger.debug("Finding all codeSystemVersions"); List<CodeSystemVersion> codeSystemVersions = codeSystemVersionRepository .findAll(); return groupByCodeSystem(codeSystemVersionMgmtHelper .convertCodeSystemVersionEntitiesToDtos(codeSystemVersions)); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.valueset.CodeSystemVersionService#findById * (java.lang.Long) */ @Override public CodeSystemVersionDto findById(Long id) throws CodeSystemNotFoundException { logger.debug("Finding a CodeSystemVersion with id: " + id); CodeSystemVersion codeSystemVersion = codeSystemVersionRepository .findOne(id); CodeSystemVersionDto codeSystemVersionDto = codeSystemVersionMgmtHelper .createCodeSystemVersionDtoFromEntity(codeSystemVersion); // Get all code systems List<CodeSystem> codeSystems = codeSystemRepository.findAll(); if (codeSystems == null || codeSystems.size() == 0) { logger.debug("No Code Systems found in the system"); throw new CodeSystemNotFoundException( "No Code Systems found in the system"); } codeSystemVersionDto.setCodeSystemMap(codeSystemVersionMgmtHelper .convertCodeSystemEntitiesToMap(codeSystems)); return codeSystemVersionDto; } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.valueset.CodeSystemVersionService#update * (gov.samhsa.consent2share.service.dto.CodeSystemVersionDto) */ @Override @Transactional(rollbackFor = CodeSystemVersionNotFoundException.class) public CodeSystemVersionDto update(CodeSystemVersionDto updated) throws CodeSystemVersionNotFoundException, CodeSystemNotFoundException { logger.debug("Updating CodeSystemVersion with information" + updated); CodeSystemVersion codeSystemVersion = codeSystemVersionRepository .findOne(updated.getId()); if (codeSystemVersion == null) { logger.debug("No CodeSystemVersion found with an id: " + updated.getId()); throw new CodeSystemVersionNotFoundException(); } codeSystemVersion.update(updated.getCode(), updated.getName(), updated.getDescription(), updated.getUserName()); // code system association change Long selCodeSystemId = updated.getCodeSystemId(); Long origCodeSystemId = codeSystemVersion.getCodeSystem().getId(); if ((null != selCodeSystemId && null != origCodeSystemId) && selCodeSystemId.equals(origCodeSystemId)) { logger.debug("category association already exists"); } else { CodeSystem codeSystem = codeSystemRepository .findOne(selCodeSystemId); if (codeSystem == null) { logger.debug("No Code System found for the selected id" + selCodeSystemId); throw new CodeSystemNotFoundException( "No Code System found for the selected id" + selCodeSystemId); } // save the association codeSystemVersion.setCodeSystem(codeSystem); } return codeSystemVersionMgmtHelper .createCodeSystemVersionDtoFromEntity(codeSystemVersion); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.valueset.CodeSystemVersionService#create * () */ @Override public CodeSystemVersionCSDto create() throws CodeSystemNotFoundException { CodeSystemVersionCSDto codeSystemVersionVSCDto = new CodeSystemVersionCSDto(); // Get all valuesets List<CodeSystem> codeSystems = codeSystemRepository.findAll(); if (codeSystems == null || codeSystems.size() == 0) { logger.debug("No Code Systems found in the system"); throw new CodeSystemNotFoundException(); } codeSystemVersionVSCDto.setCodeSystemDtoMap(codeSystemVersionMgmtHelper .convertCodeSystemEntitiesToMap(codeSystems)); return codeSystemVersionVSCDto; } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.valueset.CodeSystemVersionService# * groupByCodeSystem(java.util.List) */ @Override public List<CodeSystemVersionDto> groupByCodeSystem( List<CodeSystemVersionDto> codeSystemVersionDtos) { Collections.sort(codeSystemVersionDtos, new Comparator<CodeSystemVersionDto>() { @Override public int compare(CodeSystemVersionDto cd1, CodeSystemVersionDto cd2) { return cd1.getCodeSystemId().compareTo( cd2.getCodeSystemId()); } }); return codeSystemVersionDtos; } /** * This setter method should be used only by unit tests. * * @param codeSystemVersionRepository * the new code system version repository */ protected void setCodeSystemVersionRepository( CodeSystemVersionRepository codeSystemVersionRepository) { this.codeSystemVersionRepository = codeSystemVersionRepository; } }