Project project = catalogManager.getProjectManager().get(projectStr, null, sessionId).first(); studyStr = null; alias = project.getId(); organism = project.getOrganism(); currentRelease = project.getCurrentRelease(); dataStore = getDataStoreByProjectId(catalogManager, projectStr, File.Bioformat.VARIANT, sessionId); studyIds = Collections.emptyList(); studyIds = studyInfos.stream().map(StudyInfo::getStudyFQN).collect(Collectors.toList()); Project project = catalogManager.getProjectManager().get(info.getProjectId(), null, sessionId).first(); currentRelease = project.getCurrentRelease(); for (int i = 1; i < studyInfos.size(); i++) { info = studyInfos.get(i);
List<Study> studies = project.getStudies(); if (studies == null) { studies = Collections.emptyList(); project.setStudies(Collections.emptyList()); Filters.eq(UserDBAdaptor.QueryParams.PROJECTS_ID.key(), project.getId())); QueryResult<Long> count = userCollection.count(countQuery); if (count.getResult().get(0) != 0) { throw new CatalogDBException("Project {alias:\"" + project.getId() + "\"} already exists for this user"); project.setUid(projectUid); project.setFqn(userId + "@" + project.getId()); if (StringUtils.isEmpty(project.getUuid())) { project.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.PROJECT)); if (StringUtils.isNotEmpty(project.getCreationDate())) { projectDocument.put(PRIVATE_CREATION_DATE, TimeUtils.toDate(project.getCreationDate())); } else { projectDocument.put(PRIVATE_CREATION_DATE, TimeUtils.getDate()); Filters.ne(UserDBAdaptor.QueryParams.PROJECTS_ID.key(), project.getId())); QueryResult<UpdateResult> queryResult = userCollection.update(query, update, null); throw new CatalogDBException("Project {id:\"" + project.getId() + "\"} already exists for this user"); List<Project> result = get(project.getUid(), null).getResult(); return endQuery("Create Project", startTime, result, errorMsg, null);
@Test public void deleteProjectTest() throws CatalogException { Project p = new Project("2000G", "Project about some more genomes", null, "Cool", new Status(), "", 3000, "", null, 1); QueryResult<Project> result = catalogProjectDBAdaptor.insert(p, user1.getId(), null); System.out.println(result.first().getStatus()); p = result.first(); QueryResult<Project> queryResult = catalogProjectDBAdaptor.delete(p.getUid(), new QueryOptions()); System.out.println(queryResult.first().getStatus()); assertTrue(queryResult.getNumResults() == 1); //thrown.expect(CatalogDBException.class); //catalogProjectDBAdaptor.delete(p.getId()); thrown.expect(CatalogDBException.class); //Expected "Project not found" exception catalogProjectDBAdaptor.delete(-1, new QueryOptions()); }
private void joinFields(Project project, QueryOptions options) throws CatalogDBException { if (options == null) { return; } if (options.getBoolean("includeStudies")) { project.setStudies(getAllStudiesInProject(project.getUid(), options).getResult()); } }
void editId(Project project, String newProjectId, String sessionId) throws CatalogException { ParamUtils.checkAlias(newProjectId, "new project id"); ParamUtils.checkParameter(sessionId, "sessionId"); String userId = this.catalogManager.getUserManager().getUserId(sessionId); authorizationManager.checkCanEditProject(project.getUid(), userId); String owner = project.getFqn().split("@")[0]; if (StringUtils.isEmpty(owner)) { throw new CatalogException("Internal error. Project fqn required"); } userDBAdaptor.updateUserLastModified(userId); projectDBAdaptor.editId(owner, project.getUid(), project.getId(), newProjectId); auditManager.recordUpdate(AuditRecord.Resource.project, project.getUid(), userId, new ObjectMap(ProjectDBAdaptor.QueryParams.ID.key(), newProjectId), null, null); }
public static void updateProjectMetadata(CatalogManager catalog, StudyConfigurationManager scm, String project, String sessionId) throws CatalogException, StorageEngineException { final Project p = catalog.getProjectManager().get(project, new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( ProjectDBAdaptor.QueryParams.ORGANISM.key(), ProjectDBAdaptor.QueryParams.CURRENT_RELEASE.key())), sessionId) .first(); StorageOperation.updateProjectMetadata(scm, p.getOrganism(), p.getCurrentRelease()); }
@Before public void setUp() throws IOException, CatalogException, URISyntaxException { catalogManager = catalogManagerExternalResource.getCatalogManager(); catalogManager.getUserManager().create("user", "User Name", "mail@ebi.ac.uk", PASSWORD, "", null, Account.FULL, null, null); sessionIdUser = catalogManager.getUserManager().login("user", PASSWORD); project = catalogManager.getProjectManager().create("1000G", "Project about some genomes", "", "ACME", "Homo sapiens", null, null, "GRCh38", new QueryOptions(), sessionIdUser).first(); study = catalogManager.getStudyManager().create(project.getId(), "phase1", null, "Phase 1", Study.Type.TRIO, null, "Done", null, null, null, null, null, null, null, null, sessionIdUser).first(); folder = catalogManager.getFileManager().createFolder(study.getId(), Paths.get("data/vcf/").toString(), null, true, null, QueryOptions.empty(), sessionIdUser).first(); Path vcfPath = catalogManagerExternalResource.getOpencgaHome().resolve(VCF_FILE_NAME); Files.copy(this.getClass().getClassLoader().getResourceAsStream("biofiles/" + VCF_FILE_NAME), vcfPath, StandardCopyOption.REPLACE_EXISTING); vcfFileUri = vcfPath.toUri(); Path bamPath = catalogManagerExternalResource.getOpencgaHome().resolve(BAM_FILE_NAME); Files.copy(this.getClass().getClassLoader().getResourceAsStream("biofiles/" + BAM_FILE_NAME), bamPath, StandardCopyOption.REPLACE_EXISTING); bamFileUri = bamPath.toUri(); }
@Test public void createPanel() throws CatalogDBException { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); // DiseasePanel diseasePanel = new DiseasePanel("panel1", "Panel 1", 1, 1, "author", null, "description", Collections.emptyList(), // Arrays.asList(new VariantPanel().setId("variant1"), new VariantPanel().setId("variant2")), // Collections.emptyList(), Collections.emptyList(), null, Collections.emptyMap()); // QueryResult<DiseasePanel> panel = catalogPanelDBAdaptor.insert(studyId, diseasePanel, new QueryOptions()); // assertEquals(1, panel.getNumResults()); }
Project project = catalogManager.getProjectManager().get(new Query(ProjectDBAdaptor.QueryParams.FQN.key(), projectFqn), new QueryOptions(), sessionId).first(); studyInfo.setProjectUid(project.getUid()); studyInfo.setProjectId(project.getId()); studyInfo.setOrganism(project.getOrganism()); String user = catalogManager.getProjectManager().getOwner(project.getUid()); studyInfo.setUserId(user);
@Override public QueryResult<Study> insert(Project project, Study study, QueryOptions options) throws CatalogDBException { long startTime = startQuery(); if (project.getUid() < 0) { throw CatalogDBException.uidNotFound("Project", project.getUid()); if (StringUtils.isEmpty(project.getId())) { throw CatalogDBException.idNotFound("Project", project.getId()); if (studyIdExists(project.getUid(), study.getId())) { throw new CatalogDBException("Study {id:\"" + study.getId() + "\"} already exists"); study.setPanels(Collections.emptyList()); study.setFqn(project.getFqn() + ":" + study.getId()); .append(PRIVATE_ID, project.getId()) .append(PRIVATE_UID, project.getUid()) .append(PRIVATE_UUID, project.getUuid()) ); studyObject.put(PRIVATE_OWNER_ID, StringUtils.split(project.getFqn(), "@")[0]);
public static DataStore getDataStoreByProjectId(CatalogManager catalogManager, String projectStr, File.Bioformat bioformat, String sessionId) throws CatalogException { DataStore dataStore; QueryOptions queryOptions = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(ProjectDBAdaptor.QueryParams.ID.key(), ProjectDBAdaptor.QueryParams.DATASTORES.key())); Project project = catalogManager.getProjectManager().get(projectStr, queryOptions, sessionId).first(); if (project.getDataStores() != null && project.getDataStores().containsKey(bioformat)) { dataStore = project.getDataStores().get(bioformat); } else { //get default datastore //Must use the UserByStudyId instead of the file owner. String userId = catalogManager.getProjectManager().getOwner(project.getUid()); // Replace possible dots at the userId. Usually a special character in almost all databases. See #532 userId = userId.replace('.', '_'); String databasePrefix = catalogManager.getConfiguration().getDatabasePrefix(); String dbName = buildDatabaseName(databasePrefix, userId, project.getId()); dataStore = new DataStore(StorageEngineFactory.get().getDefaultStorageEngineId(), dbName); } return dataStore; }
Project project = catalogManager.getProjectManager().resolveId(projectStr, userId); long projectId = project.getUid(); if (!project.getFqn().startsWith(userId + "@")) { throw new CatalogException("Permission denied: Only the owner of the project can create studies."); new File.FileStatus(File.FileStatus.READY), 0, project.getCurrentRelease()); rootFile.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.FILE)); files.add(rootFile); 0, cipher, Arrays.asList(new Group(MEMBERS, Collections.emptyList()), new Group(ADMINS, Collections.emptyList())), experiments, files, jobs, new LinkedList<>(), new LinkedList<>(), new LinkedList<>(), new LinkedList<>(), Collections.emptyList(), new LinkedList<>(), null, null, datastores, project.getCurrentRelease(), stats, attributes);
public QueryResult<Integer> incrementRelease(String projectStr, String sessionId) throws CatalogException { String userId = catalogManager.getUserManager().getUserId(sessionId); Project project = resolveId(projectStr, userId); long projectId = project.getUid(); authorizationManager.checkCanEditProject(projectId, userId); // Obtain the current release number int currentRelease = project.getCurrentRelease(); // Check current release has been used at least in one study or file or cohort or individual... List<Study> allStudiesInProject = project.getStudies(); if (allStudiesInProject.isEmpty()) { throw new CatalogException("Cannot increment current release number. No studies found for release " + currentRelease); } if (checkCurrentReleaseInUse(allStudiesInProject, currentRelease)) { // Increment current project release QueryResult<Integer> integerQueryResult = projectDBAdaptor.incrementCurrentRelease(projectId); // Upgrade release in sample, family and individuals for (Study study : allStudiesInProject) { sampleDBAdaptor.updateProjectRelease(study.getUid(), integerQueryResult.first()); individualDBAdaptor.updateProjectRelease(study.getUid(), integerQueryResult.first()); familyDBAdaptor.updateProjectRelease(study.getUid(), integerQueryResult.first()); panelDBAdaptor.updateProjectRelease(study.getUid(), integerQueryResult.first()); } return integerQueryResult; } else { throw new CatalogException("Cannot increment current release number. The current release " + currentRelease + " has not yet " + "been used in any entry"); } }
/** * cases: * ok: correct projectId, correct newName * error: non-existent projectId * error: newName already used * error: newName == oldName * * @throws CatalogDBException */ @Test public void renameProjectTest() throws CatalogException { Project p1 = catalogProjectDBAdaptor.insert(new Project("p1", "project1", null, "Cool", new Status(), "", 3000, "", null, 1), user1.getId(), null).first(); Project p2 = catalogProjectDBAdaptor.insert(new Project("p2", "project2", null, "Cool", new Status(), "", 3000, "", null, 1), user1.getId(), null).first(); catalogProjectDBAdaptor.editId(user1.getId(), p1.getUid(), "p1", "newpmp"); try { catalogProjectDBAdaptor.editId(user1.getId(), -1, "", "falseProject"); fail("renamed project with projectId=-1"); } catch (CatalogDBException e) { System.out.println("correct exception: " + e); } try { catalogProjectDBAdaptor.editId(user1.getId(), p1.getUid(), "newpmp", p2.getId()); fail("renamed project with name collision"); } catch (CatalogDBException e) { System.out.println("correct exception: " + e); } }
int getCurrentRelease(Study study, String userId) throws CatalogException { return catalogManager.getProjectManager().resolveId(StringUtils.split(study.getFqn(), ":")[0], userId).getCurrentRelease(); }
@Test public void incrementCurrentRelease() throws CatalogDBException { long projectId = catalogProjectDBAdaptor.getId(user3.getId(), user3.getProjects().get(0).getId()); QueryResult<Project> projectQueryResult = catalogProjectDBAdaptor.get(projectId, new QueryOptions(QueryOptions.INCLUDE, ProjectDBAdaptor.QueryParams.CURRENT_RELEASE.key())); assertEquals(1, projectQueryResult.first().getCurrentRelease()); assertEquals(2, catalogProjectDBAdaptor.incrementCurrentRelease(projectId).first().intValue()); assertEquals(3, catalogProjectDBAdaptor.incrementCurrentRelease(projectId).first().intValue()); }
assertEquals(1, queryResult.first().getStudies().size()); assertEquals("s2", queryResult.first().getStudies().get(0).getId()); assertEquals(2, queryResult.first().getStudies().size()); assertEquals("user2@pmp", queryResult.first().getFqn()); assertEquals(2, queryResult.getNumResults()); for (Project project : queryResult.getResult()) { if (project.getId().equals(project2)) { assertEquals(2, project.getStudies().size()); } else { assertEquals(1, project.getStudies().size());
Project project = resolveId(projectStr, userId); long projectId = project.getUid(); int currentRelease = project.getCurrentRelease();
null, null, "GRCh38", null, sessionIdUser).first(); assertEquals("Homo sapiens", pr.getOrganism().getScientificName()); assertEquals("", pr.getOrganism().getCommonName()); assertEquals("GRCh38", pr.getOrganism().getAssembly()); assertEquals(-1, pr.getOrganism().getTaxonomyCode()); QueryResult<Project> update = catalogManager.getProjectManager().update(pr.getId(), objectMap, null, sessionIdUser); assertEquals("Homo sapiens", update.first().getOrganism().getScientificName()); assertEquals("", update.first().getOrganism().getCommonName()); assertEquals("GRCh38", update.first().getOrganism().getAssembly()); assertEquals(55, update.first().getOrganism().getTaxonomyCode()); update = catalogManager.getProjectManager().update(pr.getId(), objectMap, null, sessionIdUser); assertEquals("Homo sapiens", update.first().getOrganism().getScientificName()); assertEquals("common", update.first().getOrganism().getCommonName()); assertEquals("GRCh38", update.first().getOrganism().getAssembly()); assertEquals(55, update.first().getOrganism().getTaxonomyCode()); catalogManager.getProjectManager().update(pr.getId(), objectMap, null, sessionIdUser);
/** * Reads a project from Catalog given a project id or alias. * * @param projectStr Project id or alias. * @param options Read options * @param sessionId sessionId * @return The specified object * @throws CatalogException CatalogException */ @Deprecated public QueryResult<Project> get(String projectStr, QueryOptions options, String sessionId) throws CatalogException { String userId = catalogManager.getUserManager().getUserId(sessionId); Project project = resolveId(projectStr, userId); return projectDBAdaptor.get(project.getUid(), options); }