@Override public long save(Project project) throws IOException { Date timestamp = new Date(); project.setLastUpdated(timestamp); if (project.getId() == ProjectImpl.UNSAVED_ID) { project.setCreationDate(timestamp); return (Long) currentSession().save(project); } else { currentSession().update(project); return project.getId(); } }
/** * Returns true if another sample with same external name and project exists in database * * @param sample * @return boolean * @throws IOException */ private boolean isExternalNameDuplicatedInProject(Sample sample) throws IOException { SampleIdentity identity = (SampleIdentity) sample; return getIdentitiesByExternalNameOrAliasAndProject(identity.getExternalName(), identity.getProject().getId(), true).size() > 0; }
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); } } } }
/** * 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); } }
@Override public Library getAdjacentLibrary(long libraryId, boolean before) throws IOException { AdjacencySelector selector = before ? BEFORE : AFTER; Library lib = get(libraryId); if (lib == null) throw new IOException("Library not found"); // get library siblings Criteria criteria = currentSession().createCriteria(LibraryImpl.class); criteria.createAlias("sample", "sample"); criteria.add(Restrictions.eq("sample.id", lib.getSample().getId())); criteria.add(selector.generateCriterion("id", libraryId)); criteria.addOrder(selector.getOrder("id")); criteria.setMaxResults(1); Library library = (Library) criteria.uniqueResult(); if (library != null) return library; // get library cousins criteria = currentSession().createCriteria(LibraryImpl.class); criteria.createAlias("sample", "sample"); criteria.createAlias("sample.project", "project"); criteria.add(Restrictions.eq("project.id", lib.getSample().getProject().getId())); criteria.add(selector.generateCriterion("id", lib.getId())); criteria.addOrder(selector.getOrder("sample.id")); criteria.addOrder(selector.getOrder("id")); criteria.setMaxResults(1); library = (Library) criteria.uniqueResult(); return library; }
@Override public Long create(SampleGroupId sampleGroup, Long projectId, Long subprojectId) throws IOException { authorizationManager.throwIfUnauthenticated(); User user = authorizationManager.getCurrentUser(); Project project = projectStore.get(projectId); Subproject subproject = subprojectId == null ? null : subprojectDAO.getSubproject(subprojectId); if (subproject != null && subproject.getParentProject().getId() != projectId) { throw new IllegalArgumentException("Subproject specified is not part of project."); } sampleGroup.setCreatedBy(user); sampleGroup.setUpdatedBy(user); sampleGroup.setProject(project); sampleGroup.setSubproject(subproject); return sampleGroupDao.addSampleGroup(sampleGroup); }
if (!isUniqueExternalNameWithinProjectRequired()) return; Collection<SampleIdentity> matches = getIdentitiesByExternalNameOrAliasAndProject(newExternalName, sample.getProject().getId(), true); if (!matches.isEmpty()) { for (SampleIdentity match : matches) {
public static StudyDto asDto(@Nonnull Study from) { StudyDto dto = new StudyDto(); dto.setId(from.getId()); dto.setAccession(from.getAccession()); dto.setAlias(from.getAlias()); dto.setDescription(from.getDescription()); dto.setName(from.getName()); dto.setProjectId(from.getProject().getId()); dto.setStudyTypeId(from.getStudyType().getId()); return dto; }
public static ProjectDto asDto(@Nonnull Project from) { ProjectDto dto = new ProjectDto(); dto.setId(from.getId()); dto.setName(from.getName()); dto.setAlias(from.getAlias()); dto.setShortName(from.getShortName()); dto.setDescription(from.getDescription()); dto.setProgress(from.getProgress().getKey()); if (from.getReferenceGenome() != null) { dto.setDefaultSciName(from.getReferenceGenome().getDefaultSciName()); } return dto; }
public static SampleNumberPerProjectDto asDto(@Nonnull SampleNumberPerProject from) { SampleNumberPerProjectDto dto = new SampleNumberPerProjectDto(); dto.setId(from.getId()); dto.setProjectId(from.getProject().getId()); dto.setHighestSampleNumber(from.getHighestSampleNumber()); dto.setPadding(from.getPadding()); dto.setCreatedById(from.getCreatedBy().getUserId()); dto.setCreationDate(formatDateTime(from.getCreationDate())); dto.setUpdatedById(from.getUpdatedBy().getUserId()); dto.setLastUpdated(formatDateTime(from.getLastUpdated())); return dto; }
public static SampleGroupDto asDto(@Nonnull SampleGroupId from) { SampleGroupDto dto = new SampleGroupDto(); dto.setId(from.getId()); dto.setGroupId(from.getGroupId()); dto.setProjectId(from.getProject().getId()); dto.setSubprojectId(from.getSubproject() == null ? null : from.getSubproject().getId()); dto.setDescription(from.getDescription()); dto.setCreatedById(from.getCreatedBy().getUserId()); dto.setCreationDate(formatDateTime(from.getCreationDate())); dto.setUpdatedById(from.getUpdatedBy().getUserId()); dto.setLastUpdated(formatDateTime(from.getLastUpdated())); return dto; }
public static SubprojectDto asDto(@Nonnull Subproject from) { SubprojectDto dto = new SubprojectDto(); dto.setId(from.getId()); dto.setAlias(from.getAlias()); dto.setDescription(from.getDescription()); dto.setPriority(from.getPriority()); dto.setParentProjectId(from.getParentProject().getId()); dto.setCreatedById(from.getCreatedBy().getUserId()); dto.setCreationDate(formatDateTime(from.getCreationDate())); dto.setUpdatedById(from.getUpdatedBy().getUserId()); dto.setLastUpdated(formatDateTime(from.getLastUpdated())); dto.setReferenceGenomeId(from.getReferenceGenomeId()); return dto; }
throw new IOException("Cannot save project - invalid shortName: " + shortNameValidation.getMessage()); if (project.getId() == ProjectImpl.UNSAVED_ID) { resolveMembers(project.getSecurityProfile()); project.setName(generateTemporaryName()); Project original = projectStore.get(project.getId()); authorizationManager.throwIfNotWritable(original); original.setAlias(project.getAlias());
dto.setProjectId(from.getProject().getId()); dto.setScientificName(from.getScientificName()); dto.setTaxonIdentifier(from.getTaxonIdentifier());
@Override public long save(Study study) throws IOException { if (study.getId() == StudyImpl.UNSAVED_ID) { study.setChangeDetails(authorizationManager.getCurrentUser()); study.setStudyType(studyStore.getType(study.getStudyType().getId())); study.setProject(projectStore.get(study.getProject().getId())); study.setName(LimsUtils.generateTemporaryName()); study.setSecurityProfile(study.getProject().getSecurityProfile()); long id = studyStore.save(study); try { study.setName(namingScheme.generateNameFor(study)); LimsUtils.validateNameOrThrow(study, namingScheme); studyStore.save(study); } catch (MisoNamingException e) { throw new IOException(e); } return id; } else { Study original = studyStore.get(study.getId()); authorizationManager.throwIfNotWritable(original); original.setAccession(study.getAccession()); original.setAlias(study.getAlias()); original.setDescription(study.getDescription()); original.setChangeDetails(authorizationManager.getCurrentUser()); // project is immutable original.setStudyType(studyStore.getType(study.getStudyType().getId())); return studyStore.save(original); } }
dto.setParentSampleId(from.getSample().getId()); dto.setParentSampleAlias(from.getSample().getAlias()); dto.setParentSampleProjectId(from.getSample().getProject().getId()); if (from.getSample() instanceof DetailedSample) { dto.setParentSampleClassId(((DetailedSample) from.getSample()).getSampleClass().getId());
if (proj != null) { v.setProjectAlias(proj.getAlias()); v.setProjectId(proj.getId()); v.setProjectName(proj.getName()); v.setProjectShortName(proj.getShortName());
sample.setProject(projectStore.get(sample.getProject().getId()));