@Override @CoverageIgnore public int hashCode() { if (getId() != UNSAVED_ID) { return (int) getId(); } else { final int PRIME = 37; int hashcode = 1; if (getName() != null) hashcode = PRIME * hashcode + getName().hashCode(); if (getAlias() != null) hashcode = 37 * hashcode + getAlias().hashCode(); return hashcode; } }
try { authorizationManager.throwIfNotWritable(experiment); experiment.setLastModifier(authorizationManager.getCurrentUser()); if (experiment.getRunPartitions() == null) { experiment.setRunPartitions(Collections.emptyList()); } else { experiment.setRunPartitions(experiment.getRunPartitions().stream().map(WhineyFunction.rethrow(from -> { RunPartition to = new RunPartition(); to.setExperiment(experiment); if (experiment.getId() == Experiment.UNSAVED_ID) { experiment.setName(DbUtils.generateTemporaryName()); experiment.setInstrumentModel(platformService.get(experiment.getInstrumentModel().getId())); experiment.setLibrary(libraryService.get(experiment.getLibrary().getId())); experiment.setStudy(studyService.get(experiment.getStudy().getId())); experiment.setChangeDetails(authorizationManager.getCurrentUser()); if (experiment.getSecurityProfile().getProfileId() == SecurityProfile.UNSAVED_ID) { securityProfileStore.save(experiment.getSecurityProfile()); } else { experiment.setSecurityProfile(securityProfileStore.get(experiment.getSecurityProfile().getProfileId())); experiment.setName(name); ValidationResult nameValidation = namingScheme.validateName(experiment.getName()); if (!nameValidation.isValid()) { throw new IOException("Cannot save Experiment - invalid name:" + nameValidation.getMessage()); ValidationResult nameValidation = namingScheme.validateName(experiment.getName()); if (!nameValidation.isValid()) {
public static ExperimentDto asDto(@Nonnull Experiment from) { ExperimentDto dto = new ExperimentDto(); dto.setId(from.getId()); dto.setAccession(from.getAccession()); dto.setAlias(from.getAlias()); dto.setDescription(from.getDescription()); dto.setName(from.getName()); dto.setInstrumentModel(asDto(from.getInstrumentModel())); dto.setLibrary(asDto(from.getLibrary(), false)); dto.setPartitions(from.getRunPartitions().stream() .map(entry -> new ExperimentDto.RunPartitionDto(asDto(entry.getRun()), asDto(entry.getPartition()))).collect(Collectors.toList())); dto.setStudy(asDto(from.getStudy())); dto.setTitle(from.getTitle()); return dto; }
@Override protected void populate(Element xml, Experiment experiment) { xml.setAttribute("alias", experiment.getAlias()); xml.setAttribute("center_name", centreName); xmlTitle.setTextContent(experiment.getTitle()); xml.appendChild(xmlTitle); xmlStudyRef.setAttribute("refname", experiment.getStudy().getAlias()); xmlStudyRef.setAttribute("refcenter", centreName); if (!isStringEmptyOrNull(experiment.getStudy().getAccession())) { xmlStudyRef.setAttribute("accession", experiment.getStudy().getAccession()); designDescription.setTextContent(experiment.getDescription()); xmlDesign.appendChild(designDescription); sampleDescriptor.setAttribute("refname", experiment.getLibrary().getSample().getAlias()); sampleDescriptor.setAttribute("refcenter", centreName); if (!isStringEmptyOrNull(experiment.getLibrary().getSample().getAccession())) { sampleDescriptor.setAttribute("accession", experiment.getLibrary().getSample().getAccession()); experiment.getRunPartitions().stream().map(RunPartition::getPartition).map(Partition::getPool).distinct() .filter(pool -> pool.getPoolDilutions().size() > 1).forEach(pool -> { if (!isStringEmptyOrNull(experiment.getLibrary().getAlias())) { libraryName.setTextContent(experiment.getLibrary().getAlias()); } else { libraryName.setTextContent(experiment.getLibrary().getName()); libraryStrategy.setTextContent(experiment.getLibrary().getLibraryStrategyType().getName());
@Override public Long getId() { return experiment.getId(); }
@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()))); }
@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 boolean isSaved() { return getId() != UNSAVED_ID; }
/** * Equivalency is based on getId() if set, otherwise on name, description and creation date. */ @Override @CoverageIgnore public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (!(obj instanceof Experiment)) return false; final Experiment them = (Experiment) obj; // If not saved, then compare resolved actual objects. Otherwise // just compare IDs. if (getId() == UNSAVED_ID || them.getId() == UNSAVED_ID) { if (getName() != null && them.getName() != null) { return getName().equals(them.getName()); } else { return getAlias().equals(them.getAlias()); } } else { return getId() == them.getId(); } }
/** * Writes the given experiment to the database, using the default transaction strategy configured for the datasource. * * @param experiment * the experiment to write */ @Override public long save(Experiment experiment) throws IOException { long id; if (experiment.getId() == Experiment.UNSAVED_ID) { id = (Long) currentSession().save(experiment); } else { currentSession().update(experiment); id = experiment.getId(); } return id; }