public Sample build() { checkArgument(project != null, "A Project must be provided to create a Sample."); checkArgument(!LimsUtils.isStringEmptyOrNull(sampleType), "Must provide a sampleType to create a Sample"); checkArgument(!LimsUtils.isStringEmptyOrNull(scientificName), "Must provide a scientificName to create a Sample"); checkArgument(rootSampleClass != null, "A root SampleClass must be provided to create an Identity Sample."); log.debug("Create an Identity Sample."); SampleIdentityImpl i = new SampleIdentityImpl(); i.setName(name); i.setAlias(alias); i.setSampleClass(rootSampleClass); i.setVolume(volume); i.setDescription(description); i.setSampleType(sampleType); i.setProject(project); i.setScientificName(scientificName); i.setExternalName(externalName); i.setDonorSex(donorSex); i.setConsentLevel(consentLevel); i.inheritPermissions(project); return i; }
private Collection<SampleIdentity> filterOnlyExactExternalNameMatches(Collection<SampleIdentity> candidates, String externalNamesOrAlias) { return candidates.stream().filter(sam -> { Set<String> targets = SampleIdentityImpl.getSetFromString(externalNamesOrAlias).stream().map(String::toLowerCase) .collect(Collectors.toSet()); Set<String> externalNamesOfCandidate = SampleIdentityImpl.getSetFromString(sam.getExternalName()).stream() .map(String::toLowerCase).collect(Collectors.toSet()); targets.retainAll(externalNamesOfCandidate); return !targets.isEmpty() || externalNamesOrAlias.equals(sam.getAlias()); }).collect(Collectors.toSet()); }
private SampleIdentity buildIdentity() { if (externalName == null) { throw new NullPointerException("Missing externalName"); } SampleIdentity identity = new SampleIdentityImpl(); identity.setExternalName(externalName); identity.setDonorSex(donorSex); return identity; }
private static SampleIdentity toIdentitySample(@Nonnull SampleIdentityDto from) { SampleIdentity to = new SampleIdentityImpl(); to.setExternalName(from.getExternalName()); if (from.getDonorSex() != null) { to.setDonorSex(from.getDonorSex()); } if (from.getConsentLevel() != null) { to.setConsentLevel(ConsentLevel.getByLabel(from.getConsentLevel())); } return to; }
@Override public Collection<SampleIdentity> getIdentitiesByExternalNameOrAliasAndProject(String query, Long projectId, boolean exactMatch) throws IOException { if (isStringEmptyOrNull(query)) return Collections.emptySet(); @SuppressWarnings("unchecked") Set<SampleIdentity> records = (Set<SampleIdentity>) SampleIdentityImpl.getSetFromString(query) .stream().map(extNameOrAlias -> { String str = DbUtils.convertStringToSearchQuery(extNameOrAlias, false); Criteria criteria = currentSession().createCriteria(SampleIdentityImpl.class); if (projectId != null) { criteria.add(Restrictions.eq("project.id", projectId)); } criteria.add(Restrictions.or(Restrictions.ilike("externalName", str), Restrictions.ilike("alias", str))); return criteria.list(); }).flatMap(list -> list.stream()) .distinct() .collect(Collectors.toSet()); // filter out those with a non-exact external name match if (exactMatch) { return filterOnlyExactExternalNameMatches(records, query); } else { return records; } }
parent = buildIdentity(); } else if (identityId != null) { parent = new SampleIdentityImpl(); parent.setId(identityId);
private void applyIdentityChanges(SampleIdentity target, SampleIdentity source) throws IOException { if (!source.getExternalName().equals(target.getExternalName())) { confirmExternalNameUniqueForProjectIfRequired(source.getExternalName(), target); Set<String> sourceExternalNames = SampleIdentityImpl.getSetFromString(source.getExternalName()); Set<String> targetExternalNames = SampleIdentityImpl.getSetFromString(target.getExternalName()); if (!sourceExternalNames.containsAll(targetExternalNames) || !targetExternalNames.containsAll(sourceExternalNames)) { target.setExternalName(source.getExternalName()); } } target.setDonorSex(source.getDonorSex()); target.setConsentLevel(source.getConsentLevel()); }
/** * Adds any external names in the sample's attached identity to the identity stored in the database * * @param sample * @throws IOException */ private void addExternalNames(DetailedSample sample, SampleIdentity identityCopy) throws IOException { if (identityCopy == null || identityCopy.getExternalName() == null) return; SampleIdentity identity = (SampleIdentity) get(getIdentity(sample).getId()); Set<String> identityExternalNames = SampleIdentityImpl.getSetFromString(identity.getExternalName()); Set<String> tempExternalNames = SampleIdentityImpl.getSetFromString(identityCopy.getExternalName()); Set<String> lowerCaseIdentityExternalNames = identityExternalNames.stream().map(String::toLowerCase).collect(Collectors.toSet()); for (String name : tempExternalNames) { if (!lowerCaseIdentityExternalNames.contains(name.toLowerCase()) && !(isUniqueExternalNameWithinProjectRequired() && (identity.getProject() == null || getIdentitiesByExternalNameOrAliasAndProject(name, identity.getProject().getId(), true).size() > 0))) { identityExternalNames.add(name); } } if (identityExternalNames.size() > lowerCaseIdentityExternalNames.size()) { identity.setExternalName(String.join(",", identityExternalNames)); identity.setChangeDetails(authorizationManager.getCurrentUser()); sampleStore.update(identity); } }
for (SampleIdentity match : matches) { if (match.getId() != sample.getId()) { Set<String> matchExtNames = SampleIdentityImpl.getSetFromString(match.getExternalName()); Set<String> newExtNames = SampleIdentityImpl.getSetFromString(newExternalName); newExtNames.retainAll(matchExtNames); throw new ConstraintViolationException(