public static TissueOriginDto asDto(@Nonnull TissueOrigin from) { TissueOriginDto dto = new TissueOriginDto(); dto.setId(from.getId()); dto.setAlias(from.getAlias()); dto.setDescription(from.getDescription()); dto.setLabel(from.getItemLabel()); dto.setCreatedById(from.getCreatedBy().getUserId()); dto.setCreationDate(formatDateTime(from.getCreationDate())); dto.setUpdatedById(from.getUpdatedBy().getUserId()); dto.setLastUpdated(formatDateTime(from.getLastUpdated())); return dto; }
/** * Updates all user data and timestamps associated with the change. Existing timestamps will be preserved * if the TissueOrigin is unsaved, and they are already set * * @param tissueOrigin the TissueOrigin to update * @throws IOException */ private void setChangeDetails(TissueOrigin tissueOrigin) throws IOException { User user = authorizationManager.getCurrentUser(); Date now = new Date(); tissueOrigin.setUpdatedBy(user); if (tissueOrigin.getId() == TissueOrigin.UNSAVED_ID) { tissueOrigin.setCreatedBy(user); if (tissueOrigin.getCreationDate() == null) { tissueOrigin.setCreationDate(now); } if (tissueOrigin.getLastUpdated() == null) { tissueOrigin.setLastUpdated(now); } } else { tissueOrigin.setLastUpdated(now); } }
@Override public Long addTissueOrigin(TissueOrigin tissueOrigin) { Date now = new Date(); tissueOrigin.setCreationDate(now); tissueOrigin.setLastUpdated(now); return (Long) currentSession().save(tissueOrigin); }
@Override public void update(TissueOrigin tissueOrigin) throws IOException { authorizationManager.throwIfNonAdmin(); TissueOrigin managed = get(tissueOrigin.getId()); validateChange(tissueOrigin, managed); managed.setAlias(tissueOrigin.getAlias()); managed.setDescription(tissueOrigin.getDescription()); setChangeDetails(managed); tissueOriginDao.update(managed); }
private void validateChange(TissueOrigin tissueOrigin, TissueOrigin beforeChange) { List<ValidationError> errors = new ArrayList<>(); if (LimsUtils.isStringBlankOrNull(tissueOrigin.getAlias())) { errors.add(new ValidationError("alias", "Alias cannot be blank")); } if (LimsUtils.isStringBlankOrNull(tissueOrigin.getDescription())) { errors.add(new ValidationError("description", "Description cannot be blank")); } if (beforeChange == null || !tissueOrigin.getAlias().equals(beforeChange.getAlias())) { TissueOrigin duplicateAlias = tissueOriginDao.getByAlias(tissueOrigin.getAlias()); if (duplicateAlias != null) { errors.add(new ValidationError("alias", "There is already a Tissue Origin with this alias")); } } if (!errors.isEmpty()) { throw new ValidationException(errors); } }
@Override public SampleTissue getMatchingGhostTissue(SampleTissue tissue) { validateGhostTissueLookup(tissue); Criteria criteria = currentSession().createCriteria(SampleTissueImpl.class); criteria.add(Restrictions.eq("isSynthetic", true)); criteria.add(Restrictions.eq("parent.id", tissue.getParent().getId())); criteria.add(Restrictions.eq("tissueOrigin.id", tissue.getTissueOrigin().getId())); criteria.add(Restrictions.eq("tissueType.id", tissue.getTissueType().getId())); criteria.add(Restrictions.eq("timesReceived", tissue.getTimesReceived())); criteria.add(Restrictions.eq("tubeNumber", tissue.getTubeNumber())); if (tissue.getPassageNumber() == null) { criteria.add(Restrictions.isNull("passageNumber")); } else { criteria.add(Restrictions.eq("passageNumber", tissue.getPassageNumber())); } return (SampleTissue) criteria.uniqueResult(); }
private String generateTissueAlias(SampleTissue tissue, SampleIdentity identity) { StringBuilder sb = new StringBuilder(); sb.append(identity.getAlias()) .append(SEPARATOR) .append(tissue.getTissueOrigin() == null ? TISSUE_ORIGIN_UNKNOWN : tissue.getTissueOrigin().getAlias()) .append(SEPARATOR) .append(tissue.getTissueType() == null ? TISSUE_TYPE_UNKNOWN : tissue.getTissueType().getAlias()) .append(SEPARATOR) .append(passageNumber(tissue.getPassageNumber())) .append(SEPARATOR) .append(tissue.getTimesReceived()); if (tissue.getTubeNumber() != null) { sb.append(DASH) .append(tissue.getTubeNumber()); } return sb.toString(); }
@Override public void update(TissueOrigin tissueOrigin) { Date now = new Date(); tissueOrigin.setLastUpdated(now); currentSession().update(tissueOrigin); }
private void validateGhostTissueLookup(SampleTissue tissue) { if (tissue.getParent() == null || tissue.getParent().getId() == SampleImpl.UNSAVED_ID || tissue.getTissueOrigin() == null || tissue.getTissueOrigin().getId() == TissueOrigin.UNSAVED_ID || tissue.getTissueType() == null || tissue.getTissueType().getId() == TissueTypeImpl.UNSAVED_ID || tissue.getTimesReceived() == null || tissue.getTubeNumber() == null) { throw new IllegalArgumentException("Missing tissue attributes required for lookup"); } }
@Override public ValidationResult validateDeletion(TissueOrigin object) { ValidationResult result = new ValidationResult(); long usage = tissueOriginDao.getUsage(object); if (usage > 0L) { result.addError(new ValidationError("Tissue Origin '" + object.getAlias() + "' is used by " + usage + " samples")); } return result; }
private static SampleTissueDto asTissueSampleDto(@Nonnull SampleTissue from) { SampleTissueDto dto = new SampleTissueDto(); dto.setPassageNumber(from.getPassageNumber()); dto.setTimesReceived(from.getTimesReceived()); dto.setSecondaryIdentifier(from.getSecondaryIdentifier()); dto.setRegion(from.getRegion()); dto.setTubeNumber(from.getTubeNumber()); if (from.getLab() != null) { dto.setLabId(from.getLab().getId()); } if (from.getTissueOrigin() != null) { dto.setTissueOriginId(from.getTissueOrigin().getId()); } if (from.getTissueType() != null) { dto.setTissueTypeId(from.getTissueType().getId()); } if (from.getTissueMaterial() != null) { dto.setTissueMaterialId(from.getTissueMaterial().getId()); } return dto; }