private void validateChange(ServiceRecord record, ServiceRecord beforeChange) { List<ValidationError> errors = new ArrayList<>(); if (record.getPosition() != null && findPosition(record.getPosition().getId(), record.getInstrument()) == null) { errors.add(new ValidationError("position", "Position must belong to the same instrument as this record")); } if (!errors.isEmpty()) { throw new ValidationException(errors); } }
@Override public boolean isOutOfService() { if (getServiceRecords() == null) { return false; } return getServiceRecords().stream().anyMatch(sr -> sr.isOutOfService() && sr.getEndTime() == null && sr.getStartTime() != null && sr.getStartTime().before(new Date()) && sr.getPosition() == null); }
@Override public Set<InstrumentPosition> getOutOfServicePositions() { if (isOutOfService()) { return getInstrumentModel().getPositions(); } return getInstrumentModel().getPositions().stream() .filter(pos -> getServiceRecords().stream().anyMatch(sr -> sr.isOutOfService() && sr.getEndTime() == null && sr.getStartTime() != null && sr.getStartTime().before(new Date()) && sr.getPosition().getAlias().equals(pos.getAlias()))) .collect(Collectors.toSet()); }
ServiceRecord instrumentOutOfServiceRecord = from.getInstrument().getServiceRecords().stream() .filter(sr -> sr.isOutOfService() && sr.getStartTime() != null && sr.getEndTime() == null && (sr.getPosition() == null || sr.getPosition().getAlias().equals(pos.getAlias()))) .min(Comparator.comparing(ServiceRecord::getStartTime)) .orElse(null);
public static ServiceRecordDto asDto(@Nonnull ServiceRecord from) { ServiceRecordDto dto = new ServiceRecordDto(); setId(dto::setId, from); setDateString(dto::setServiceDate, from.getServiceDate()); setString(dto::setTitle, from.getTitle()); setString(dto::setDetails, from.getDetails()); setString(dto::setReferenceNumber, from.getReferenceNumber()); setString(dto::setPosition, maybeGetProperty(from.getPosition(), InstrumentPosition::getAlias)); dto.setAttachments(from.getAttachments().stream().map(Dtos::asDto).collect(Collectors.toList())); return dto; }
private void applyRecordChanges(ServiceRecord target, ServiceRecord source) { target.setTitle(source.getTitle()); target.setDetails(source.getDetails()); if (source.getPosition() == null) { target.setPosition(null); } else { target.setPosition(findPosition(source.getPosition().getId(), target.getInstrument())); } target.setServicedByName(source.getServicedByName()); target.setReferenceNumber(source.getReferenceNumber()); target.setServiceDate(source.getServiceDate()); target.setStartTime(source.getStartTime()); target.setOutOfService(source.isOutOfService()); target.setEndTime(source.getEndTime()); }