/** * 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); }
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); }
private void joinFields(Project project, QueryOptions options) throws CatalogDBException { if (options == null) { return; } if (options.getBoolean("includeStudies")) { project.setStudies(getAllStudiesInProject(project.getUid(), options).getResult()); } }
public Map<String, Object> facet(String projectStr, String fileFields, String sampleFields, String individualFields, String cohortFields, String familyFields, boolean defaultStats, String sessionId) throws CatalogException, IOException { String userId = catalogManager.getUserManager().getUserId(sessionId); Project project = resolveId(projectStr, userId); Query query = new Query(StudyDBAdaptor.QueryParams.PROJECT_UID.key(), project.getUid()); QueryResult<Study> studyQueryResult = catalogManager.getStudyManager().get(query, new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(StudyDBAdaptor.QueryParams.FQN.key(), StudyDBAdaptor.QueryParams.ID.key())), sessionId); Map<String, Object> result = new HashMap<>(); for (Study study : studyQueryResult.getResult()) { result.put(study.getId(), catalogManager.getStudyManager().facet(study.getFqn(), fileFields, sampleFields, individualFields, cohortFields, familyFields, defaultStats, sessionId)); } return result; }
@Override public QueryResult<Long> delete(Query query, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); query.append(QueryParams.STATUS_NAME.key(), Status.READY); QueryResult<Project> projectQueryResult = get(query, new QueryOptions(MongoDBCollection.INCLUDE, QueryParams.UID.key())); for (Project project : projectQueryResult.getResult()) { delete(project.getUid(), queryOptions); } return endQuery("Delete project", startTime, Collections.singletonList(projectQueryResult.getNumTotalResults())); }
@Override public QueryResult<Project> get(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { long startTime = startQuery(); List<Project> documentList = new ArrayList<>(); QueryResult<Project> queryResult; try (DBIterator<Project> dbIterator = iterator(query, options, user)) { while (dbIterator.hasNext()) { documentList.add(dbIterator.next()); } } queryResult = endQuery("Get", startTime, documentList); if (options == null || !options.containsKey(QueryOptions.EXCLUDE) || (!options.getAsStringList(QueryOptions.EXCLUDE).contains("projects.studies") && !options.getAsStringList(QueryOptions.EXCLUDE).contains("studies"))) { for (Project project : queryResult.getResult()) { Query studyQuery = new Query(StudyDBAdaptor.QueryParams.PROJECT_UID.key(), project.getUid()); try { QueryResult<Study> studyQueryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().get(studyQuery, options, user); project.setStudies(studyQueryResult.getResult()); } catch (CatalogDBException e) { logger.error("{}", e.getMessage(), e); } } } return queryResult; }
@Override public QueryResult<Project> get(Query query, QueryOptions options) throws CatalogDBException { long startTime = startQuery(); List<Project> documentList = new ArrayList<>(); QueryResult<Project> queryResult; try (DBIterator<Project> dbIterator = iterator(query, options)) { while (dbIterator.hasNext()) { documentList.add(dbIterator.next()); } } queryResult = endQuery("Get", startTime, documentList); if (options == null || !options.containsKey(QueryOptions.EXCLUDE) || (!options.getAsStringList(QueryOptions.EXCLUDE).contains("projects.studies") && !options.getAsStringList(QueryOptions.EXCLUDE).contains("studies"))) { for (Project project : queryResult.getResult()) { Query studyQuery = new Query(StudyDBAdaptor.QueryParams.PROJECT_UID.key(), project.getUid()); try { QueryResult<Study> studyQueryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().get(studyQuery, options); project.setStudies(studyQueryResult.getResult()); } catch (CatalogDBException e) { logger.error("{}", e.getMessage(), e); } } } return queryResult; }
@Override public long getId(final String userId, final String projectIdStr) throws CatalogDBException { String projectId = projectIdStr; if (projectId.contains("@")) { projectId = projectId.split("@", 2)[1]; } QueryResult<Document> queryResult = userCollection.find( new BsonDocument(UserDBAdaptor.QueryParams.PROJECTS_ID.key(), new BsonString(projectId)) .append(UserDBAdaptor.QueryParams.ID.key(), new BsonString(userId)), Projections.fields(Projections.include(UserDBAdaptor.QueryParams.PROJECTS_UID.key()), Projections.elemMatch("projects", Filters.eq(QueryParams.ID.key(), projectId))), null); User user = parseUser(queryResult); if (user == null || user.getProjects().isEmpty()) { return -1; } else { return user.getProjects().get(0).getUid(); } }
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; }
@Override public QueryResult<User> get(Query query, QueryOptions options) throws CatalogDBException { if (!query.containsKey(QueryParams.STATUS_NAME.key())) { query.append(QueryParams.STATUS_NAME.key(), "!=" + Status.DELETED); } Bson bson = parseQuery(query); QueryResult<User> userQueryResult = userCollection.find(bson, null, userConverter, options); for (User user : userQueryResult.getResult()) { if (user.getProjects() != null) { List<Project> projects = new ArrayList<>(user.getProjects().size()); for (Project project : user.getProjects()) { Query query1 = new Query(ProjectDBAdaptor.QueryParams.UID.key(), project.getUid()); QueryResult<Project> projectQueryResult = dbAdaptorFactory.getCatalogProjectDbAdaptor().get(query1, options); projects.add(projectQueryResult.first()); } user.setProjects(projects); } } return userQueryResult; }
@Override public QueryResult<Study> getStudiesFromUser(String userId, QueryOptions queryOptions) throws CatalogDBException { QueryResult<Study> result = new QueryResult<>("Get studies from user"); QueryResult<Project> allProjects = dbAdaptorFactory.getCatalogProjectDbAdaptor().get(userId, new QueryOptions()); if (allProjects.getNumResults() == 0) { return result; } for (Project project : allProjects.getResult()) { QueryResult<Study> allStudiesInProject = getAllStudiesInProject(project.getUid(), queryOptions); if (allStudiesInProject.getNumResults() > 0) { result.getResult().addAll(allStudiesInProject.getResult()); result.setDbTime(result.getDbTime() + allStudiesInProject.getDbTime()); } } result.setNumTotalResults(result.getResult().size()); result.setNumResults(result.getResult().size()); return result; }
Project project = catalogManager.getProjectManager().resolveId(projectStr, userId); long projectId = project.getUid();
catalogIOManagerFactory.getDefault().createProject(userId, Long.toString(project.getUid())); } catch (CatalogIOException e) { try { projectDBAdaptor.delete(project.getUid()); } catch (Exception e1) { logger.error("Error deleting project from catalog after failing creating the folder in the filesystem", e1); auditManager.recordCreation(AuditRecord.Resource.project, queryResult.first().getUid(), userId, queryResult.first(), null, null);
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 (studyIdExists(project.getUid(), study.getId())) { throw new CatalogDBException("Study {id:\"" + study.getId() + "\"} already exists"); .append(PRIVATE_UID, project.getUid()) .append(PRIVATE_UUID, project.getUuid()) );
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()); }
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); } }
String userId = this.catalogManager.getUserManager().getUserId(sessionId); Project project = resolveId(projectStr, userId); long projectId = project.getUid(); authorizationManager.checkCanEditProject(projectId, userId);