private void validateUniqueFields(Array array, Array beforeChange, List<ValidationError> errors) throws IOException { if (beforeChange == null || !array.getAlias().equals(beforeChange.getAlias())) { Array duplicateAlias = arrayStore.getByAlias(array.getAlias()); if (duplicateAlias != null) { errors.add(new ValidationError("alias", "There is already an array with this alias")); } } if (beforeChange == null || !array.getSerialNumber().equals(beforeChange.getSerialNumber())) { Array duplicateSerialNumber = arrayStore.getBySerialNumber(array.getSerialNumber()); if (duplicateSerialNumber != null) { errors.add(new ValidationError("serialNumber", "There is already an array with this serial number")); } } }
private void applyChanges(Array from, Array to) { to.setAlias(from.getAlias()); to.setSerialNumber(from.getSerialNumber()); to.setDescription(from.getDescription()); // have to add/remove samples individually to avoid unneccessary "sample removed; sample added" changelogs for non-changes Map<String, Sample> toSamples = to.getSamples(); toSamples.entrySet().removeIf(entry -> !from.getSamples().containsKey(entry.getKey())); from.getSamples().forEach((key, val) -> { Sample current = toSamples.get(key); if (toSamples.get(key) == null || current.getId() != val.getId()) { toSamples.put(key, val); } }); }
/** * Checks submitted data for validity, throwing a ValidationException containing all of the errors if invalid * * @param array submitted Array to validate * @param beforeChange the already-persisted Array before changes * @throws IOException */ private void validateChange(Array array, Array beforeChange) throws IOException { List<ValidationError> errors = new ArrayList<>(); if (array.getId() != Array.UNSAVED_ID && beforeChange == null) { errors.add(new ValidationError("Array not found")); } if (isStringEmptyOrNull(array.getAlias())) { errors.add(new ValidationError("alias", "Alias cannot be blank")); } if (isStringEmptyOrNull(array.getSerialNumber())) { errors.add(new ValidationError("serialNumber", "Serial number cannot be blank")); } if (array.getArrayModel() == null) { // was either blank or not found during #loadChildEntities errors.add(new ValidationError("arrayModel", "Choose a valid model")); } validateUniqueFields(array, beforeChange, errors); validateSamples(array, errors); if (!errors.isEmpty()) { throw new ValidationException(errors); } }
public static ArrayDto asDto(@Nonnull Array from) { ArrayDto dto = new ArrayDto(); dto.setId(from.getId()); dto.setAlias(from.getAlias()); if (from.getArrayModel() != null) { dto.setArrayModelId(from.getArrayModel().getId()); dto.setArrayModelAlias(from.getArrayModel().getAlias()); dto.setRows(from.getArrayModel().getRows()); dto.setColumns(from.getArrayModel().getColumns()); } dto.setSerialNumber(from.getSerialNumber()); dto.setDescription(from.getDescription()); if (from.getSamples() != null) { dto.setSamples(asArraySampleDtos(from.getSamples())); } if (from.getLastModified() != null) { dto.setLastModified(formatDate(from.getLastModified())); } return dto; }