public List<QueryResult<Project>> get(List<String> projectList, QueryOptions options, boolean silent, String sessionId) throws CatalogException { List<QueryResult<Project>> results = new ArrayList<>(projectList.size()); for (int i = 0; i < projectList.size(); i++) { String project = projectList.get(i); try { QueryResult<Project> projectResult = get(project, options, sessionId); results.add(projectResult); } catch (CatalogException e) { if (silent) { results.add(new QueryResult<>(projectList.get(i), 0, 0, 0, "", e.toString(), new ArrayList<>(0))); } else { throw e; } } } return results; }
projects.put(userSession.getKey(), catalogManager.getProjectManager().create("default", "DefaultProject", "Description", "Organization", "Homo sapiens", null, null, "GrCh38", new QueryOptions(), userSession.getValue()).first().getFqn());
@Test public void createStudyFailMoreThanOneProject() throws CatalogException { catalogManager.getProjectManager().incrementRelease(project1, sessionIdUser); catalogManager.getProjectManager().create("1000G2", "Project about some genomes", "", "ACME", "Homo sapiens", null, null, "GRCh38", new QueryOptions(), sessionIdUser); // Create a new study without providing the project. It should raise an error because the user owns more than one project thrown.expect(CatalogException.class); thrown.expectMessage("More than one project found"); catalogManager.getStudyManager().create(null, "phasexx", null, "Phase 1", Study.Type.TRIO, null, "Done", null, null, null, null, null, null, null, null, sessionIdUser); }
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; }
)) .append(QueryOptions.EXCLUDE, "studies"); Project project = resolveId(projectStr, userId); exportToFile(dbIterator, outputDir.resolve("projects.json").toFile(), objectMapper, "project"); exportToFile(dbIterator, outputDir.resolve("studies.json").toFile(), objectMapper, "studies"); .append(Constants.ALL_VERSIONS, true); dbIterator = sampleDBAdaptor.nativeIterator(query, QueryOptions.empty()); exportToFile(dbIterator, outputDir.resolve("samples.json").toFile(), objectMapper, "samples"); .append(Constants.ALL_VERSIONS, true); dbIterator = individualDBAdaptor.nativeIterator(query, QueryOptions.empty()); exportToFile(dbIterator, outputDir.resolve("individuals.json").toFile(), objectMapper, "individuals"); .append(Constants.ALL_VERSIONS, true); dbIterator = familyDBAdaptor.nativeIterator(query, QueryOptions.empty()); exportToFile(dbIterator, outputDir.resolve("families.json").toFile(), objectMapper, "families"); .append(FileDBAdaptor.QueryParams.RELEASE.key(), "<=" + release); dbIterator = fileDBAdaptor.nativeIterator(query, QueryOptions.empty()); exportToFile(dbIterator, outputDir.resolve("files.json").toFile(), objectMapper, "files"); .append(ClinicalAnalysisDBAdaptor.QueryParams.RELEASE.key(), "<=" + release); dbIterator = clinicalDBAdaptor.nativeIterator(query, QueryOptions.empty()); exportToFile(dbIterator, outputDir.resolve("clinical_analysis.json").toFile(), objectMapper, "clinical analysis"); .append(CohortDBAdaptor.QueryParams.RELEASE.key(), "<=" + release);
@Test public void testSampleVersioning() throws CatalogException { Query query = new Query(ProjectDBAdaptor.QueryParams.USER_ID.key(), "user"); String projectId = catalogManager.getProjectManager().get(query, null, sessionIdUser).first().getId(); new QueryOptions(Constants.INCREMENT_VERSION, true), sessionIdUser); catalogManager.getProjectManager().incrementRelease(projectId, sessionIdUser); catalogManager.getProjectManager().incrementRelease(projectId, sessionIdUser); catalogManager.getSampleManager().update(studyFqn, "testSample", new ObjectMap(), new QueryOptions(Constants.INCREMENT_VERSION, true), sessionIdUser);
@Test public void testModifyProject() throws CatalogException { String newProjectName = "ProjectName " + StringUtils.randomString(10); String projectId = catalogManager.getUserManager().get("user", null, new QueryOptions(), sessionIdUser).first().getProjects().get(0) .getId(); ObjectMap options = new ObjectMap(); options.put("name", newProjectName); ObjectMap attributes = new ObjectMap("myBoolean", true); attributes.put("value", 6); attributes.put("object", new ObjectMap("id", 1234)); options.put("attributes", attributes); catalogManager.getProjectManager().update(projectId, options, null, sessionIdUser); QueryResult<Project> result = catalogManager.getProjectManager().get(projectId, null, sessionIdUser); Project project = result.first(); System.out.println(result); assertEquals(newProjectName, project.getName()); for (Map.Entry<String, Object> entry : attributes.entrySet()) { assertEquals(project.getAttributes().get(entry.getKey()), entry.getValue()); } options = new ObjectMap(); options.put(ProjectDBAdaptor.QueryParams.ID.key(), "newProjectId"); catalogManager.getProjectManager().update(projectId, options, null, sessionIdUser); thrown.expect(CatalogException.class); thrown.expectMessage("not found"); catalogManager.getProjectManager().update(projectId, options, null, sessionIdUser); }
@Test public void updateOrganismInProject() throws CatalogException { Project pr = catalogManager.getProjectManager().create("project2", "Project about some genomes", "", "ACME", "Homo sapiens", null, null, "GRCh38", null, sessionIdUser).first(); QueryResult<Project> update = catalogManager.getProjectManager().update(pr.getId(), objectMap, null, sessionIdUser); objectMap.put(ProjectDBAdaptor.QueryParams.ORGANISM_COMMON_NAME.key(), "common"); update = catalogManager.getProjectManager().update(pr.getId(), objectMap, null, sessionIdUser); catalogManager.getProjectManager().update(pr.getId(), objectMap, null, sessionIdUser);
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"); } }
@Test public void testByStepsMultiRelease() throws Exception { List<File> inputFiles = new ArrayList<>(); File transformFile; for (int i = 77; i <= 79; i++) { inputFiles.add(create("platinum/1K.end.platinum-genomes-vcf-NA128" + i + "_S1.genome.vcf.gz")); } for (File inputFile : inputFiles) { transformFile = transformFile(inputFile, new QueryOptions()); loadFile(transformFile, new QueryOptions(), outputId); opencga.getCatalogManager().getProjectManager().incrementRelease(projectAlias, sessionId); } int i = 1; for (File inputFile : inputFiles) { inputFile = opencga.getCatalogManager().getFileManager().get(studyId, inputFile.getId(), null, sessionId).first(); assertEquals(1, inputFile.getRelease()); assertEquals(i, inputFile.getIndex().getRelease()); i++; } variantManager.iterator(new Query(VariantQueryParam.STUDY.key(), studyId), new QueryOptions(), sessionId).forEachRemaining(variant -> { System.out.println("variant = " + variant); }); }
ParamUtils.checkParameter(sessionId, "sessionId"); String userId = this.catalogManager.getUserManager().getUserId(sessionId); Project project = resolveId(projectStr, userId); long projectId = project.getUid(); authorizationManager.checkCanEditProject(projectId, userId); editId(project, parameters.getString(ProjectDBAdaptor.QueryParams.ID.key()), sessionId);
studyManager = new StudyManager(authorizationManager, auditManager, this, catalogDBAdaptorFactory, catalogIOManagerFactory, configuration); projectManager = new ProjectManager(authorizationManager, auditManager, this, catalogDBAdaptorFactory, catalogIOManagerFactory, configuration); jobManager = new JobManager(authorizationManager, auditManager, this, catalogDBAdaptorFactory,
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);
/** * Obtain the list of projects and studies that are shared with the user. * * @param userId user whose projects and studies are being shared with. * @param queryOptions QueryOptions object. * @param sessionId Session id which should correspond to userId. * @return A QueryResult object containing the list of projects and studies that are shared with the user. * @throws CatalogException CatalogException */ public QueryResult<Project> getSharedProjects(String userId, QueryOptions queryOptions, String sessionId) throws CatalogException { return get(new Query(ProjectDBAdaptor.QueryParams.USER_ID.key(), "!=" + userId), queryOptions, sessionId); }
@Test public void testCreateProject() throws Exception { String projectAlias = "projectAlias_ASDFASDF"; catalogManager.getProjectManager().create(projectAlias, "Project", "", "", "Homo sapiens", null, null, "GRCh38", new QueryOptions(), sessionIdUser); thrown.expect(CatalogDBException.class); thrown.expectMessage(containsString("already exists")); catalogManager.getProjectManager().create(projectAlias, "Project", "", "", "Homo sapiens", null, null, "GRCh38", new QueryOptions(), sessionIdUser); }
catalog.getProjectManager().create("p1", "p1", "", null, "hsapiens", "Homo Sapiens", null, "GRCh38", null, sessionId); catalog.getStudyManager().create("p1", "s1", null, "s1", Study.Type.CONTROL_SET, null, null, null, null, null, null, null, null, null, null, sessionId); catalog.getStudyManager().create("p1", "s2", null, "s2", Study.Type.CONTROL_SET, null, null, null, null, null, null, null, null, null, null, sessionId); catalog.getCohortManager().create("s1", new Cohort().setId("c1").setSamples(Collections.emptyList()), null, sessionId); catalog.getProjectManager().incrementRelease("p1", sessionId); file3 = createFile("data/file3.vcf"); file4 = createFile("data/file4.vcf"); catalog.getCohortManager().create("s1", new Cohort().setId(StudyEntry.DEFAULT_COHORT).setSamples(samples), null, sessionId); catalog.getProjectManager().create("p2", "p2", "", null, "hsapiens", "Homo Sapiens", null, "GRCh38", null, sessionId); catalog.getStudyManager().create("p2", "p2s2", null, "s1", Study.Type.CONTROL_SET, null, null, null, null, null, null, null, null, null, null, sessionId);
public Project getProjectFromQuery(Query query, String sessionId, QueryOptions options) throws CatalogException { if (isValidParam(query, VariantCatalogQueryUtils.PROJECT)) { String project = query.getString(VariantCatalogQueryUtils.PROJECT.key()); return catalogManager.getProjectManager().get(project, options, sessionId).first(); } else { String studyFqn = getAnyStudy(query, sessionId); String project = catalogManager.getStudyManager().getProjectFqn(studyFqn); return catalogManager.getProjectManager().get(new Query(ProjectDBAdaptor.QueryParams.FQN.key(), project), options, sessionId) .first(); } }
@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(); }
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 { 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/test/folder/").toString(), null, true, null, QueryOptions.empty(), sessionIdUser).first(); directory = catalogManagerExternalResource.getOpencgaHome().resolve("catalog_scan_test_folder").toAbsolutePath(); if (directory.toFile().exists()) { IOUtils.deleteDirectory(directory); } Files.createDirectory(directory); }