private SampleIdentity findOrCreateIdentity(DetailedSample descendant, SampleIdentity identity) throws IOException, MisoNamingException { if (identity.getId() != SampleImpl.UNSAVED_ID) { return (SampleIdentity) sampleStore.getSample(identity.getId()); } else { // If samples are being bulk received for the same new donor, they will all have a null parentId. // After the new donor's Identity is created, the following samples need to be parented to that now-existing Identity. Collection<SampleIdentity> newlyCreated = getIdentitiesByExternalNameOrAliasAndProject(identity.getExternalName(), descendant.getProject().getId(), true); if (newlyCreated.size() > 1) { throw new IllegalArgumentException( "IdentityId is required since there are multiple identities with external name " + identity.getExternalName() + " in project " + descendant.getProject().getId()); } else if (newlyCreated.size() == 1) { Sample parent = newlyCreated.iterator().next(); if (parent == null) throw new IllegalArgumentException("Parent sample does not exist"); else return (SampleIdentity) parent; } else { try { return createParentIdentity(descendant, identity); } catch (SQLException e) { throw new IOException(e); } } } }
aliquot.setSamplePurpose(samplePurposeService.getAll().stream().filter(samplePurpose -> samplePurpose.getAlias().equals("Library")) .findFirst().orElse(null)); aliquot.setProject(sample.getProject());
private SampleIdentity createParentIdentity(DetailedSample sample, SampleIdentity identity) throws IOException, MisoNamingException, SQLException { log.debug("Creating a new Identity to use as a parent."); List<SampleClass> identityClasses = sampleClassService.listByCategory(SampleIdentity.CATEGORY_NAME); if (identityClasses.size() != 1) { throw new IllegalStateException("Found more or less than one SampleClass of category " + SampleIdentity.CATEGORY_NAME + ". Cannot choose which to use as root sample class."); } SampleClass rootSampleClass = identityClasses.get(0); confirmExternalNameUniqueForProjectIfRequired(identity.getExternalName(), sample); Sample identitySample = new IdentityBuilder().project(sample.getProject()) .sampleType(sample.getSampleType()).scientificName(sample.getScientificName()).name(generateTemporaryName()) .rootSampleClass(rootSampleClass).volume(0D).externalName(identity.getExternalName()) .donorSex(identity.getDonorSex()).consentLevel(identity.getConsentLevel()).build(); identitySample.setAlias(namingScheme.generateSampleAlias(identitySample)); identitySample.setChangeDetails(authorizationManager.getCurrentUser()); identitySample.inheritPermissions(sample.getProject()); return (SampleIdentity) save(identitySample, true); }
private DetailedSample createGhostParent(DetailedSample parent, DetailedSample child) throws IOException { parent.setProject(child.getProject()); parent.setSampleType(child.getSampleType()); parent.setScientificName(child.getScientificName()); parent.setVolume(0D); parent.setVolumeUnits(VolumeUnit.MICROLITRES); parent.setSynthetic(true); if (child.getIdentityId() != null) parent.setIdentityId(child.getIdentityId()); if (isLcmTubeSample(child)) { SampleSlide parentSlides = (SampleSlide) parent; Integer slides = parentSlides.getSlides() == null ? 0 : parentSlides.getSlides(); slides += ((SampleLCMTube) child).getSlidesConsumed(); parentSlides.setSlides(slides); parentSlides.setDiscards(0); if (parentSlides.getId() != SampleImpl.UNSAVED_ID) { update(parentSlides); } } create(parent); return parent; }
detailed.inheritPermissions(detailed.getParent() == null ? detailed.getProject() : detailed.getParent()); } else { sample.inheritPermissions(sample.getProject());