@Test(expected = WebCertServiceException.class) public void testSaveDraftThatIsLocked() { when(utkastRepository.findById(INTYG_ID)).thenReturn(Optional.ofNullable(lockedUtkast)); utkastService.saveDraft(INTYG_ID, INTYG_VERSION, INTYG_JSON, false); verify(utkastRepository).findById(INTYG_ID); }
@Override @Transactional public SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent) { LOG.debug("Saving and validating utkast '{}'", intygId); Utkast utkast = utkastRepository.findById(intygId).orElse(null); verifyUtkastExists(utkast, intygId, null, "The draft could not be saved since it could not be found"); if (utkast.getVersion() != version) { LOG.debug("Utkast '{}' was concurrently modified", intygId); throw new OptimisticLockException(utkast.getSenastSparadAv().getNamn()); } if (!isTheDraftStillADraft(utkast.getStatus())) { LOG.error("Utkast '{}' can not be updated since it is no longer in draft mode", intygId); throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "This utkast can not be updated since it is no longer in draft mode"); } String intygType = utkast.getIntygsTyp(); String persistedJson = utkast.getModel(); updateUtkastModel(utkast, draftAsJson); DraftValidation draftValidation = validateDraft(intygId, intygType, draftAsJson); UtkastStatus utkastStatus = draftValidation.isDraftValid() ? UtkastStatus.DRAFT_COMPLETE : UtkastStatus.DRAFT_INCOMPLETE; utkast.setStatus(utkastStatus); utkast = saveDraft(utkast); LOG.debug("Utkast '{}' updated", utkast.getIntygsId()); sendNotificationWhenDraftChanged(utkast, persistedJson); if (createPdlLogEvent) { logUpdateOfIntyg(utkast); } utkastRepository.flush(); return new SaveDraftResponse(utkast.getVersion(), utkastStatus); }
UtkastServiceImpl implements UtkastService { @Override @Transactional public SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent) { LOG.debug("Saving and validating utkast '{}'", intygId); Utkast utkast = utkastRepository.findById(intygId).orElse(null); verifyUtkastExists(utkast, intygId, null, "The draft could not be saved since it could not be found"); if (utkast.getVersion() != version) { LOG.debug("Utkast '{}' was concurrently modified", intygId); throw new OptimisticLockException(utkast.getSenastSparadAv().getNamn()); } if (!isTheDraftStillADraft(utkast.getStatus())) { LOG.error("Utkast '{}' can not be updated since it is no longer in draft mode", intygId); throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "This utkast can not be updated since it is no longer in draft mode"); } String intygType = utkast.getIntygsTyp(); String persistedJson = utkast.getModel(); updateUtkastModel(utkast, draftAsJson); DraftValidation draftValidation = validateDraft(intygId, intygType, draftAsJson); UtkastStatus utkastStatus = draftValidation.isDraftValid() ? UtkastStatus.DRAFT_COMPLETE : UtkastStatus.DRAFT_INCOMPLETE; utkast.setStatus(utkastStatus); utkast = saveDraft(utkast); LOG.debug("Utkast '{}' updated", utkast.getIntygsId()); sendNotificationWhenDraftChanged(utkast, persistedJson); if (createPdlLogEvent) { logUpdateOfIntyg(utkast); } utkastRepository.flush(); return new SaveDraftResponse(utkast.getVersion(), utkastStatus); } }
UtkastServiceImpl implements UtkastService { @Override @Transactional public SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent) { LOG.debug("Saving and validating utkast '{}'", intygId); Utkast utkast = utkastRepository.findById(intygId).orElse(null); verifyUtkastExists(utkast, intygId, null, "The draft could not be saved since it could not be found"); if (utkast.getVersion() != version) { LOG.debug("Utkast '{}' was concurrently modified", intygId); throw new OptimisticLockException(utkast.getSenastSparadAv().getNamn()); } if (!isTheDraftStillADraft(utkast.getStatus())) { LOG.error("Utkast '{}' can not be updated since it is no longer in draft mode", intygId); throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "This utkast can not be updated since it is no longer in draft mode"); } String intygType = utkast.getIntygsTyp(); String persistedJson = utkast.getModel(); updateUtkastModel(utkast, draftAsJson); DraftValidation draftValidation = validateDraft(intygId, intygType, draftAsJson); UtkastStatus utkastStatus = draftValidation.isDraftValid() ? UtkastStatus.DRAFT_COMPLETE : UtkastStatus.DRAFT_INCOMPLETE; utkast.setStatus(utkastStatus); utkast = saveDraft(utkast); LOG.debug("Utkast '{}' updated", utkast.getIntygsId()); sendNotificationWhenDraftChanged(utkast, persistedJson); if (createPdlLogEvent) { logUpdateOfIntyg(utkast); } utkastRepository.flush(); return new SaveDraftResponse(utkast.getVersion(), utkastStatus); }  }
UtkastServiceImpl implements UtkastService { @Override @Transactional public SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent) { LOG.debug("Saving and validating utkast '{}'", intygId); Utkast utkast = utkastRepository.findById(intygId).orElse(null); verifyUtkastExists(utkast, intygId, null, "The draft could not be saved since it could not be found"); if (utkast.getVersion() != version) { LOG.debug("Utkast '{}' was concurrently modified", intygId); throw new OptimisticLockException(utkast.getSenastSparadAv().getNamn()); } if (!isTheDraftStillADraft(utkast.getStatus())) { LOG.error("Utkast '{}' can not be updated since it is no longer in draft mode", intygId); throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "This utkast can not be updated since it is no longer in draft mode"); } String intygType = utkast.getIntygsTyp(); String persistedJson = utkast.getModel(); updateUtkastModel(utkast, draftAsJson); DraftValidation draftValidation = validateDraft(intygId, intygType, draftAsJson); UtkastStatus utkastStatus = draftValidation.isDraftValid() ? UtkastStatus.DRAFT_COMPLETE : UtkastStatus.DRAFT_INCOMPLETE; utkast.setStatus(utkastStatus); utkast = saveDraft(utkast); LOG.debug("Utkast '{}' updated", utkast.getIntygsId()); sendNotificationWhenDraftChanged(utkast, persistedJson); if (createPdlLogEvent) { logUpdateOfIntyg(utkast); } utkastRepository.flush(); return new SaveDraftResponse(utkast.getVersion(), utkastStatus); }  static boolean isUtkast(Utkast utkast); static boolean isEditableUtkast(Utkast utkast); @Override @Transactional() // , readOnly=true int countFilterIntyg(UtkastFilter filter); @Override Utkast createNewDraft(CreateNewDraftRequest request); @Override SaveDraftResponse updateDraftFromCandidate(String fromIntygId, String fromIntygType, String toUtkastId, String toUtkastType); @Override SaveDraftResponse updateDraftFromCandidate(String fromIntygId, String fromIntygType, Utkast toUtkast); @Override String getQuestions(String intygsTyp, String version); @Override @Transactional void setKlarForSigneraAndSendStatusMessage(String intygsId, String intygType); @Override Map<String, Map<String, PreviousIntyg>> checkIfPersonHasExistingIntyg(final Personnummer personnummer,
                                                                                 final IntygUser user,
                                                                                 final String currentDraftId); @Override @Transactional void deleteUnsignedDraft(String intygId, long version); @Override @Transactional(readOnly = true) List<Utkast> filterIntyg(UtkastFilter filter); @Override @Transactional(readOnly = true) Utkast getDraft(String intygId, String intygType); @Override @Transactional(readOnly = true) Utkast getDraft(String intygId, String intygType, boolean createPdlLogEvent); @Override @Transactional(readOnly = true) List<Lakare> getLakareWithDraftsByEnhet(String enhetsId); @Override @Transactional(readOnly = true) Map<String, Long> getNbrOfUnsignedDraftsByCareUnits(List<String> careUnitIds); @Override @Transactional SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent); @Override void updatePatientOnDraft(UpdatePatientOnDraftRequest request); @Override @Transactional Utkast setNotifiedOnDraft(String intygsId, long version, Boolean notified); @Override DraftValidation validateDraft(String intygId, String intygType, String draftAsJson); @Override @Transactional int lockOldDrafts(int lockedAfterDay, LocalDate today); @Override void revokeLockedDraft(String intygId, String intygTyp, String revokeMessage, String reason); @Override boolean isDraftCreatedFromReplacement(String certificateId); }
UtkastServiceImpl implements UtkastService { @Override @Transactional public SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent) { LOG.debug("Saving and validating utkast '{}'", intygId); Utkast utkast = utkastRepository.findById(intygId).orElse(null); verifyUtkastExists(utkast, intygId, null, "The draft could not be saved since it could not be found"); if (utkast.getVersion() != version) { LOG.debug("Utkast '{}' was concurrently modified", intygId); throw new OptimisticLockException(utkast.getSenastSparadAv().getNamn()); } if (!isTheDraftStillADraft(utkast.getStatus())) { LOG.error("Utkast '{}' can not be updated since it is no longer in draft mode", intygId); throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "This utkast can not be updated since it is no longer in draft mode"); } String intygType = utkast.getIntygsTyp(); String persistedJson = utkast.getModel(); updateUtkastModel(utkast, draftAsJson); DraftValidation draftValidation = validateDraft(intygId, intygType, draftAsJson); UtkastStatus utkastStatus = draftValidation.isDraftValid() ? UtkastStatus.DRAFT_COMPLETE : UtkastStatus.DRAFT_INCOMPLETE; utkast.setStatus(utkastStatus); utkast = saveDraft(utkast); LOG.debug("Utkast '{}' updated", utkast.getIntygsId()); sendNotificationWhenDraftChanged(utkast, persistedJson); if (createPdlLogEvent) { logUpdateOfIntyg(utkast); } utkastRepository.flush(); return new SaveDraftResponse(utkast.getVersion(), utkastStatus); }  static boolean isUtkast(Utkast utkast); static boolean isEditableUtkast(Utkast utkast); @Override @Transactional() // , readOnly=true int countFilterIntyg(UtkastFilter filter); @Override Utkast createNewDraft(CreateNewDraftRequest request); @Override SaveDraftResponse updateDraftFromCandidate(String fromIntygId, String fromIntygType, String toUtkastId, String toUtkastType); @Override SaveDraftResponse updateDraftFromCandidate(String fromIntygId, String fromIntygType, Utkast toUtkast); @Override String getQuestions(String intygsTyp, String version); @Override @Transactional void setKlarForSigneraAndSendStatusMessage(String intygsId, String intygType); @Override Map<String, Map<String, PreviousIntyg>> checkIfPersonHasExistingIntyg(final Personnummer personnummer,
                                                                                 final IntygUser user,
                                                                                 final String currentDraftId); @Override @Transactional void deleteUnsignedDraft(String intygId, long version); @Override @Transactional(readOnly = true) List<Utkast> filterIntyg(UtkastFilter filter); @Override @Transactional(readOnly = true) Utkast getDraft(String intygId, String intygType); @Override @Transactional(readOnly = true) Utkast getDraft(String intygId, String intygType, boolean createPdlLogEvent); @Override @Transactional(readOnly = true) List<Lakare> getLakareWithDraftsByEnhet(String enhetsId); @Override @Transactional(readOnly = true) Map<String, Long> getNbrOfUnsignedDraftsByCareUnits(List<String> careUnitIds); @Override @Transactional SaveDraftResponse saveDraft(String intygId, long version, String draftAsJson, boolean createPdlLogEvent); @Override void updatePatientOnDraft(UpdatePatientOnDraftRequest request); @Override @Transactional Utkast setNotifiedOnDraft(String intygsId, long version, Boolean notified); @Override DraftValidation validateDraft(String intygId, String intygType, String draftAsJson); @Override @Transactional int lockOldDrafts(int lockedAfterDay, LocalDate today); @Override void revokeLockedDraft(String intygId, String intygTyp, String revokeMessage, String reason); @Override boolean isDraftCreatedFromReplacement(String certificateId);  }