private void applyContainerChanges(Run target, Run source) { Iterator<RunPosition> iterator = target.getRunPositions().iterator(); while (iterator.hasNext()) { RunPosition existingPos = iterator.next(); if (source.getRunPositions().stream().noneMatch(rp -> isSamePosition(rp, existingPos))) { iterator.remove(); } } for (RunPosition sourcePos : source.getRunPositions()) { RunPosition existingPos = target.getRunPositions().stream() .filter(rp -> isSamePosition(rp, sourcePos)) .findFirst().orElse(null); if (existingPos == null) { RunPosition newPos = new RunPosition(); newPos.setRun(target); newPos.setContainer(sourcePos.getContainer()); newPos.setPosition(sourcePos.getPosition()); target.getRunPositions().add(newPos); } else { existingPos.setContainer(sourcePos.getContainer()); } } }
public void addSequencerPartitionContainer(SequencerPartitionContainer f, InstrumentPosition position) { f.setSecurityProfile(getSecurityProfile()); RunPosition rp = new RunPosition(); rp.setRun(this); rp.setContainer(f); rp.setPosition(position); getRunPositions().add(rp); }
private void saveContainers(Run run) throws IOException { for (RunPosition runPos : run.getRunPositions()) { runPos.setContainer(containerService.save(runPos.getContainer())); } }
public static RunPositionDto asDto(@Nonnull RunPosition from) { RunPositionDto dto = new RunPositionDto(); setId(dto::setPositionId, from.getPosition()); setString(dto::setPositionAlias, maybeGetProperty(from.getPosition(), InstrumentPosition::getAlias)); setId(dto::setId, from.getContainer()); setString(dto::setIdentificationBarcode, maybeGetProperty(from.getContainer(), SequencerPartitionContainer::getIdentificationBarcode)); setObject(dto::setContainerModel, from.getContainer().getModel(), Dtos::asDto); setDateTimeString(dto::setLastModified, maybeGetProperty(from.getContainer(), SequencerPartitionContainer::getLastModified)); return dto; }
private static boolean isSamePosition(RunPosition pos1, RunPosition pos2) { String pos1Alias = pos1.getPosition() == null ? null : pos1.getPosition().getAlias(); String pos2Alias = pos2.getPosition() == null ? null : pos2.getPosition().getAlias(); if (pos1Alias == null && pos2Alias == null) { return true; } if (pos1Alias == null) { return false; } return pos1Alias.equals(pos2Alias); }
containerService.save(pos.getContainer());
updatePartitionContents(getLaneContents, newContainer); RunPosition newRunPos = new RunPosition(); newRunPos.setRun(target); newRunPos.setContainer(newContainer); newRunPos.setPosition(position); target.getRunPositions().clear(); target.getRunPositions().add(newRunPos);
private void validateChanges(Run before, Run changed) throws IOException { List<ValidationError> errors = new ArrayList<>(); if (!changed.getHealth().isDone()) { changed.setCompletionDate(null); } else if (changed.getCompletionDate() == null) { errors.add(new ValidationError("completionDate", "Completion date must be provided for finished run")); } if (before != null) { if (before.getCompletionDate() != null && changed.getCompletionDate() != null && !changed.getCompletionDate().equals(before.getCompletionDate()) && !authorizationManager.isAdminUser()) { errors.add(new ValidationError("completionDate", "Only admin may change completion date")); } if (before.getStartDate() != null && changed.getStartDate() != null && !changed.getStartDate().equals(before.getStartDate()) && !authorizationManager.isAdminUser()) { errors.add(new ValidationError("completionDate", "Only admin may change start date")); } } InstrumentModel platform = changed.getSequencer().getInstrumentModel(); for (RunPosition position : changed.getRunPositions()) { if (position.getPosition() != null && !platform.getPositions().contains(position.getPosition())) { errors.add(new ValidationError( String.format("Platform %s does not have a position %s", platform.getAlias(), position.getPosition()))); } } if (!errors.isEmpty()) { throw new ValidationException(errors); } }