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()); }
@Override public String getDeleteDescription() { return getInstrument().getName() + " " + (getReferenceNumber() == null ? "" : "RE " + getReferenceNumber() + ": ") + getTitle(); }
@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); }
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 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 void update(ServiceRecord record) throws IOException { ServiceRecord managed = get(record.getId()); record.setInstrument(instrumentService.get(managed.getInstrument().getId())); validateChange(record, managed); applyRecordChanges(managed, record); serviceRecordDao.save(managed); }
@Override public long save(ServiceRecord ssr) throws IOException { long id; if (ssr.getId() == ServiceRecord.UNSAVED_ID) { if (ssr.getInstrument().getDateDecommissioned() != null) throw new IOException("Cannot add service records to a retired instrument!"); id = (long) currentSession().save(ssr); } else { currentSession().update(ssr); id = ssr.getId(); } return id; }
@Override public long create(ServiceRecord record) throws IOException { record.setInstrument(instrumentService.get(record.getInstrument().getId())); return serviceRecordDao.save(record); }
@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()); }
.collect(Collectors.toList())); 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); if (instrumentOutOfServiceRecord != null) { posDto.setOutOfService(true); posDto.setOutOfServiceTime(formatDateTime(instrumentOutOfServiceRecord.getStartTime()));