private Set<String> extractDilutionNames(Set<PoolDilution> dilutions) { Set<String> original = new HashSet<>(); for (PoolDilution dilution : dilutions) { original.add(dilution.getPoolableElementView().getDilutionName()); } return original; }
private Predicate<PoolDilution> notInOther(Collection<PoolDilution> otherCollection) { return t -> otherCollection.stream() .noneMatch(other -> other.getPoolableElementView().getDilutionId() == t.getPoolableElementView().getDilutionId()); }
@Override public String getLongestIndex() { Map<Integer, Integer> lengths = poolDilutions.stream() .flatMap(element -> element.getPoolableElementView().getIndices().stream()) .collect(Collectors.toMap(Index::getPosition, index -> index.getSequence().length(), Integer::max)); if (lengths.isEmpty()) { return "0"; } return lengths.entrySet().stream() .sorted((a, b) -> a.getKey().compareTo(b.getKey())) .map(Entry<Integer, Integer>::getValue) .map(length -> length.toString()) .collect(Collectors.joining(",")); }
@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()))); }
private void loadPoolDilutions(Collection<PoolDilution> source, Pool target) throws IOException { Set<PoolDilution> targetDilutions = target.getPoolDilutions(); targetDilutions.removeIf(notInOther(source)); Set<PoolDilution> additions = source.stream() .filter(notInOther(targetDilutions)) .collect(Collectors.toSet()); for (PoolDilution sourcePd : additions) { PoolableElementView v = poolableElementViewService.get(sourcePd.getPoolableElementView().getDilutionId()); if (v == null) { throw new IllegalStateException("Pool contains an unsaved dilution"); } targetDilutions.add(new PoolDilution(target, v, sourcePd.getProportion())); } for (PoolDilution targetPd : targetDilutions) { PoolDilution sourcePd = source.stream() .filter(spd -> spd.getPoolableElementView().getDilutionId() == targetPd.getPoolableElementView().getDilutionId()) .findFirst().orElse(null); if (sourcePd != null) { targetPd.setProportion(sourcePd.getProportion()); } } }
Set<DilutionDto> pooledElements = new HashSet<>(); for (PoolDilution pd : from.getPoolDilutions()) { DilutionDto ldi = asDto(pd.getPoolableElementView()); ldi.setProportion(pd.getProportion()); pooledElements.add(ldi);