public static PartitionDto asDto(@Nonnull Partition from, boolean includePoolContents) { PartitionDto dto = new PartitionDto(); dto.setId(from.getId()); dto.setContainerId(from.getSequencerPartitionContainer().getId()); dto.setContainerName(from.getSequencerPartitionContainer().getIdentificationBarcode()); dto.setPartitionNumber(from.getPartitionNumber()); dto.setPool(from.getPool() == null ? null : asDto(from.getPool(), includePoolContents, false)); setString(dto::setLoadingConcentration, from.getLoadingConcentration()); dto.setLoadingConcentrationUnits(from.getLoadingConcentrationUnits()); return dto; }
private void applyChanges(Partition target, Partition source) { target.setPool(source.getPool()); target.setLoadingConcentration(source.getLoadingConcentration()); target.setLoadingConcentrationUnits(source.getLoadingConcentrationUnits()); if (target.getPool() == null) { target.setLoadingConcentration(null); } if (target.getLoadingConcentration() == null) { target.setLoadingConcentrationUnits(null); } }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; PartitionQCId other = (PartitionQCId) obj; if (partition == null) { if (other.partition != null) return false; } else if (!partition.equals(other.partition)) return false; if (run == null) { if (other.run != null) return false; } else if (!run.equals(other.run)) return false; return true; }
@Override public int compareTo(Partition t) { if (getId() != 0L && t.getId() != 0L) { if (getId() < t.getId()) return -1; if (getId() > t.getId()) return 1; } else { if (getPartitionNumber() < t.getPartitionNumber()) return -1; if (getPartitionNumber() > t.getPartitionNumber()) return 1; } return 0; }
private void validateChange(Partition partition, Partition beforeChange) { List<ValidationError> errors = new ArrayList<>(); ValidationUtils.validateConcentrationUnits(partition.getLoadingConcentration(), partition.getLoadingConcentrationUnits(), "loadingConcentration", "Loading Concentration", errors); if (!errors.isEmpty()) { throw new ValidationException(errors); } }
@Override public void update(Partition partition) throws IOException { Partition original = containerDao.getPartitionById(partition.getId()); authorizationManager.throwIfNotWritable(original.getSequencerPartitionContainer()); if (partition.getPool() != null) { partition.setPool(poolService.get(partition.getPool().getId())); } validateChange(partition, original); applyChanges(original, partition); original.getSequencerPartitionContainer().setChangeDetails(authorizationManager.getCurrentUser()); containerDao.save(original.getSequencerPartitionContainer()); }
@Override protected void populate(Element xml, Pair<PoolableElementView, Partition> entry) { Run r = entry.getValue().getSequencerPartitionContainer().getLastRun(); xml.setAttribute("alias", "L00" + entry.getValue().getPartitionNumber() + ":" + entry.getKey().getDilutionName() + ":" + r.getAlias()); xml.setAttribute("run_center", centreName); if (r.getHealth() == HealthType.Completed) { xml.setAttribute("run_date", DF_TIMESTAMP.format(r.getCompletionDate())); } xml.setAttribute("center_name", centreName); for (Experiment e : submission.getExperiments()) { Element experimentRef = xml.getOwnerDocument().createElementNS(null, "EXPERIMENT_REF"); experimentRef.setAttribute("refname", e.getAlias()); experimentRef.setAttribute("refcenter", centreName); xml.appendChild(experimentRef); } Element dataBlock = xml.getOwnerDocument().createElementNS(null, "DATA_BLOCK"); dataBlock.setAttribute("sector", Integer.toString(entry.getValue().getPartitionNumber())); if (entry.getValue().getPool().getPoolDilutions().size() > 1) { // multiplexed dataBlock.setAttribute("member_name", entry.getKey().getDilutionName()); } }
@Override public void applyChanges(SequencerPartitionContainer source, SequencerPartitionContainer managed) throws IOException { managed.setIdentificationBarcode(source.getIdentificationBarcode()); managed.setDescription(source.getDescription()); managed.setClusteringKit(source.getClusteringKit()); managed.setMultiplexingKit(source.getMultiplexingKit()); if (LimsUtils.isOxfordNanoporeContainer(managed)) { applyOxfordNanoporeChanges((OxfordNanoporeContainer) source, (OxfordNanoporeContainer) managed); } for (Partition sourcePartition : source.getPartitions()) { for (Partition managedPartition : managed.getPartitions()) { if (sourcePartition == null || managedPartition == null) { throw new IOException("Partition from " + (sourcePartition == null ? "client" : "database") + " is null."); } if (sourcePartition.getId() == managedPartition.getId()) { Pool sourcePool = sourcePartition.getPool(); Pool managedPool = managedPartition.getPool(); if (sourcePool == null) { managedPartition.setPool(null); } else if (managedPool == null || sourcePool.getId() != managedPool.getId()) { managedPartition.setPool(poolService.get(sourcePool.getId())); } break; } } } }
private void updatePartitionContents(final GetLaneContents getLaneContents, SequencerPartitionContainer newContainer) { newContainer.getPartitions().stream().filter(partition -> partition.getPool() == null) .forEach(partition -> getLaneContents.getLaneContents(partition.getPartitionNumber()).filter(s -> !LimsUtils.isStringBlankOrNull(s)) .map(WhineyFunction.rethrow(poolService::getByBarcode)).ifPresent(partition::setPool)); }
@Override protected void makeColumns(Run run, Partition p, PoolableElementView dilution, String userName, String[] output) { output[0] = p.getSequencerPartitionContainer().getIdentificationBarcode(); output[1] = p.getPartitionNumber().toString(); output[2] = String.format("%d_%s_%s", p.getSequencerPartitionContainer().getId(), dilution.getLibraryName(), dilution.getDilutionName()); output[3] = dilution.getSampleAlias().replaceAll("\\s", ""); output[4] = dilution.getIndices().stream()// .sorted(Comparator.comparingInt(Index::getPosition))// .map(i -> { if (run.getSequencer().getInstrumentModel().getDataManglingPolicy() == InstrumentDataManglingPolicy.I5_RC && i.getPosition() == 2) { return reverseComplement(i.getSequence()); } return i.getSequence(); })// .collect(Collectors.joining("-")); output[5] = dilution.getLibraryDescription(); output[6] = "N"; output[7] = "NA"; output[8] = userName; }
@Override public void save(PartitionQC qc) throws IOException { PartitionQC managedQc = get(qc.getRun(), qc.getPartition()); Run managedRun = runService.get(qc.getRun().getId()); authorizationManager.throwIfNotWritable(managedRun); Partition managedPartition = containerService.getPartition(qc.getPartition().getId()); // update run and container for accurate lastModified and lastModifier (used in changelogs) runService.update(managedRun); containerService.update(managedPartition.getSequencerPartitionContainer()); if (managedQc == null) { qc.setRun(managedRun); qc.setPartition(managedPartition); qc.setType(getType(qc.getType().getId())); partitionQcDao.create(qc); } else { managedQc.setType(getType(qc.getType().getId())); managedQc.setNotes(qc.getNotes()); partitionQcDao.update(managedQc); } } }
private Stream<String> createRowsForPartition(Run run, User user, List<String> columns, Partition partition) { return partition.getPool().getPoolDilutions().stream()// .map(PoolDilution::getPoolableElementView) .map(dilution -> { final String[] output = new String[columns.size()]; makeColumns(run, partition, dilution, user.getLoginName(), output); return String.join(",", output); }); }
@Override public int compare(Partition o1, Partition o2) { return o1.getPartitionNumber().compareTo(o2.getPartitionNumber()); }
@Override public Partition getPartition(long partitionId) throws IOException { Partition partition = containerDao.getPartitionById(partitionId); authorizationManager.throwIfNotReadable(partition.getSequencerPartitionContainer()); return partition; }
RunPartition to = new RunPartition(); to.setExperiment(experiment); to.setPartition(containerService.getPartition(from.getPartition().getId())); to.setRun(runService.get(from.getRun().getId())); return to;
@Override public void execute(WorkflowExecutor workflowExecutor) throws IOException { if (!isComplete()) throw new IllegalStateException("Workflow is not complete"); SequencerPartitionContainer spc; if (containerStep.isExistingContainer()) { spc = containerStep.getContainer(); } else { spc = new SequencerPartitionContainerImpl(); SequencingContainerModel model = containerModelStep.getModel(); spc.setModel(model); spc.setIdentificationBarcode(containerStep.getBarcode()); spc.setPartitionLimit(model.getPartitionCount()); } for (int i = 0; i < partitionSteps.size(); ++i) { spc.getPartitionAt(i + 1).setPool(partitionSteps.get(i).getPool()); } workflowExecutor.save(spc); }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((partition == null) ? 0 : partition.hashCode()); result = prime * result + ((run == null) ? 0 : run.hashCode()); return result; }
public String createSampleSheet(Run run, User user) { final List<String> columns = getColumns().collect(Collectors.toList()); return header(run) + Stream.concat(// Stream.of(String.join(",", columns)), // run.getSequencerPartitionContainers().stream()// .flatMap(container -> container.getPartitions().stream())// .filter(partition -> partition.getPool() != null)// .flatMap(partition -> createRowsForPartition(run, user, columns, partition))) .collect(Collectors.joining("\n")); }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((experiment == null) ? 0 : experiment.hashCode()); result = prime * result + ((partition == null) ? 0 : partition.hashCode()); result = prime * result + ((run == null) ? 0 : run.hashCode()); return result; }
@Override protected Stream<Pair<PoolableElementView, Partition>> items() { return submission.getExperiments().stream().flatMap(experiment -> experiment.getRunPartitions().stream()).flatMap( rp -> rp.getPartition().getPool().getPoolDilutions().stream() .map(pd -> new Pair<>(pd.getPoolableElementView(), rp.getPartition()))); }