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); }
@Override public void update(Sample sample) throws IOException { Sample managed = get(sample.getId()); managed.setChangeDetails(authorizationManager.getCurrentUser()); boolean validateAliasUniqueness = !managed.getAlias().equals(sample.getAlias()); authorizationManager.throwIfNotWritable(managed); maybeRemoveFromBox(sample); boxService.throwIfBoxPositionIsFilled(sample); validateChange(sample, managed); applyChanges(managed, sample); loadChildEntities(managed); if (isDetailedSample(managed)) { DetailedSample detailedUpdated = (DetailedSample) managed; if (detailedUpdated.getParent() != null) { detailedUpdated.setParent((DetailedSample) get(detailedUpdated.getParent().getId())); validateHierarchy(detailedUpdated); } } save(managed, validateAliasUniqueness); boxService.updateBoxableLocation(sample); }
authorizationManager.throwIfNotWritable(sample); boxService.throwIfBoxPositionIsFilled(sample); sample.setChangeDetails(authorizationManager.getCurrentUser()); if (isDetailedSample(sample)) { DetailedSample detailed = (DetailedSample) sample;