diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java index ca0c72a1213ceb9a5309643f95ef843e61b1a0b2..8ee4e0cefaf44bb525d71dd1923407e8230debfe 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java @@ -1,6 +1,7 @@ package lcsb.mapviewer.api.projects; import java.io.IOException; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -37,6 +38,13 @@ public class ProjectController extends BaseController { return projectController.getMetaData(projectId, token); } + @RequestMapping(value = "/projects/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public List<ProjectMetaData> getProjects(// + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws SecurityException, ObjectNotFoundException { + return projectController.getProjects(token); + } + @RequestMapping(value = "/projects/{projectId}/statistics", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) public Object getStatistics(// @PathVariable(value = "projectId") String projectId, // diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java index 529e8792c63d95a2a1c58797e75bc9da6c4cc8a9..da81928faa1673a509ebedaa2607403d142f9158 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java @@ -94,17 +94,11 @@ public class ProjectRestImpl extends BaseRestImpl { if (project == null) { throw new ObjectNotFoundException("Project with given id doesn't exist"); } - ProjectMetaData result = createData(project, authenticationToken); - if (project.getOrganism() != null) { - result.setOrganism(createAnnotation(project.getOrganism())); - } - if (project.getDisease() != null) { - result.setDisease(createAnnotation(project.getDisease())); - } + ProjectMetaData result = createData(project); return result; } - private ProjectMetaData createData(Project project, AuthenticationToken token) { + private ProjectMetaData createData(Project project) { ProjectMetaData result = new ProjectMetaData(); result.setName(project.getName()); @@ -130,6 +124,13 @@ public class ProjectRestImpl extends BaseRestImpl { result.setTopOverviewImage(factory.create(project.getOverviewImages().get(0))); } + if (project.getOrganism() != null) { + result.setOrganism(createAnnotation(project.getOrganism())); + } + if (project.getDisease() != null) { + result.setDisease(createAnnotation(project.getDisease())); + } + return result; } @@ -383,4 +384,14 @@ public class ProjectRestImpl extends BaseRestImpl { return result; } + public List<ProjectMetaData> getProjects(String token) throws SecurityException { + AuthenticationToken authenticationToken = getUserService().getToken(token); + List<Project> projects = getProjectService().getAllProjects(authenticationToken); + List<ProjectMetaData> result = new ArrayList<>(); + for (Project project : projects) { + result.add(createData(project)); + } + return result; + } + } diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java index ec6bb96897cb4a0c4b6f3a8223ea59bc6be51813..4d008c74dc9ecfaaadda2c0750045acc84547236 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java @@ -28,8 +28,6 @@ import lcsb.mapviewer.persist.dao.map.LayoutDao; import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.interfaces.ILayoutService; import lcsb.mapviewer.services.interfaces.ILayoutService.CreateLayoutParams; -import lcsb.mapviewer.services.interfaces.IModelService; -import lcsb.mapviewer.services.interfaces.IUserService; import lcsb.mapviewer.services.search.data.ElementIdentifier.ElementIdentifierType; import lcsb.mapviewer.services.search.layout.FullLayoutAliasView; import lcsb.mapviewer.services.search.layout.FullLayoutReactionView; @@ -45,8 +43,7 @@ public class OverlayRestImpl extends BaseRestImpl { /** * Default class logger. */ - private Logger logger = Logger.getLogger(OverlayRestImpl.class); - + private Logger logger = Logger.getLogger(OverlayRestImpl.class); @Autowired private ILayoutService layoutService; diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java index 8340abe87ecc4061b61e2ab7a6dcd37e9a994217..75b04a6d071ab987dc60926aabe7429ff1e5f819 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java @@ -5,7 +5,6 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import java.util.List; -import java.util.Map; import org.junit.After; import org.junit.AfterClass; diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index ee67364eb830c52470c347b423fffacb13bf2eed..604b1f3da3158fa9ae3749ff2d88893e06a91c17 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -284,15 +284,24 @@ public class ProjectService implements IProjectService { } @Override - public List<Project> getAllProjects() { - List<Project> result = projectDao.getAll(); + public List<Project> getAllProjects(AuthenticationToken token) { + List<Project> projects = projectDao.getAll(); + if (userService.userHasPrivilege(token, PrivilegeType.ADD_MAP)) { + return projects; + } + List<Project> result = new ArrayList<>(); + for (Project project : projects) { + if (userService.userHasPrivilege(token, PrivilegeType.VIEW_PROJECT, result)) { + result.add(project); + } + } return result; } @Override - public List<ProjectView> getAllProjectViews() { - List<ProjectView> result = new ArrayList<ProjectView>(); - List<Project> projects = getAllProjects(); + public List<ProjectView> getAllProjectViews(AuthenticationToken token) { + List<ProjectView> result = new ArrayList<>(); + List<Project> projects = getAllProjects(token); for (Project project : projects) { result.add(projectViewFactory.create(project)); } @@ -661,8 +670,6 @@ public class ProjectService implements IProjectService { * params used to create model * @param dbProject * project where the model should be placed - * @return model loaded from the input and updated by PostLoadModification - * (from CreateProjectParams) * @throws InvalidInputDataExecption * thrown when there is a problem with input file */ diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java index 5175441f3ffc840f43b4f81e3e35b02430dea2b9..36035412c901ef307dde799f32f2a241d1641237 100644 --- a/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java @@ -44,14 +44,14 @@ public interface IProjectService { * * @return list of all projects. */ - List<Project> getAllProjects(); + List<Project> getAllProjects(AuthenticationToken token); /** * Returns a list of Project views for all projects. * * @return list of Project views for all projects */ - List<ProjectView> getAllProjectViews(); + List<ProjectView> getAllProjectViews(AuthenticationToken token); /** * Updates project. @@ -184,4 +184,5 @@ public interface IProjectService { * parameter */ byte[] getInputDataForProject(ProjectView projectView); + } diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java index 101892cd487cc00c34ea5f1c8678aeaa2d734e82..f2d08ea6cc581e3b68b5b7eb0f3d0157503f3671 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java @@ -85,14 +85,14 @@ public class ProjectServiceTest extends ServiceTestFunctions { @Test public void test() { try { - List<Project> projects = projectService.getAllProjects(); + List<Project> projects = projectService.getAllProjects(adminToken); Project project = new Project(); project.setProjectId(projectId); projectDao.add(project); projectDao.evict(project); - List<Project> projects2 = projectService.getAllProjects(); + List<Project> projects2 = projectService.getAllProjects(adminToken); assertEquals(projects.size() + 1, projects2.size()); @@ -124,7 +124,7 @@ public class ProjectServiceTest extends ServiceTestFunctions { project.setProjectId(project_id); projectDao.add(project); - List<ProjectView> projects2 = projectService.getAllProjectViews(); + List<ProjectView> projects2 = projectService.getAllProjectViews(adminToken); ProjectView row = null; for (ProjectView projectRow : projects2) { if (projectRow.getIdObject() == project.getId()) { @@ -174,7 +174,7 @@ public class ProjectServiceTest extends ServiceTestFunctions { project.setProjectId(projectId); projectDao.add(project); - List<ProjectView> projects2 = projectService.getAllProjectViews(); + List<ProjectView> projects2 = projectService.getAllProjectViews(adminToken); ProjectView row = null; for (ProjectView projectRow : projects2) { if (projectRow.getIdObject() == project.getId()) { @@ -315,9 +315,9 @@ public class ProjectServiceTest extends ServiceTestFunctions { // and now check layouts (check if every submodel have them, and point // into different directory) - //there are 2 levels + // there are 2 levels int semanticOverlays = 2; - //-1 is due to pathways and compartments that is not there + // -1 is due to pathways and compartments that is not there int overlays = BuildInLayout.values().length + semanticOverlays - 1; assertEquals(overlays, model.getLayouts().size()); assertEquals(overlays, s1Model.getLayouts().size()); @@ -719,7 +719,7 @@ public class ProjectServiceTest extends ServiceTestFunctions { assertEquals("main", model.getName()); assertEquals(ProjectStatus.DONE, project.getStatus()); assertEquals("Cannot find overview images the model", 2, project.getOverviewImages().size()); - assertEquals("Number of layouts doesn't match", BuildInLayout.values().length-1, model.getLayouts().size()); + assertEquals("Number of layouts doesn't match", BuildInLayout.values().length - 1, model.getLayouts().size()); assertEquals(BuildInLayout.NESTED.getTitle(), model.getLayouts().get(0).getTitle()); assertEquals(BuildInLayout.NORMAL.getTitle(), model.getLayouts().get(1).getTitle()); projectService.removeProject(project, null, false, adminToken); @@ -763,7 +763,7 @@ public class ProjectServiceTest extends ServiceTestFunctions { assertEquals("main", model.getName()); assertEquals(ProjectStatus.DONE, project.getStatus()); assertEquals("Cannot find overview images the model", 2, project.getOverviewImages().size()); - assertEquals("Number of layouts doesn't match", BuildInLayout.values().length-1, model.getLayouts().size()); + assertEquals("Number of layouts doesn't match", BuildInLayout.values().length - 1, model.getLayouts().size()); assertEquals(BuildInLayout.NESTED.getTitle(), model.getLayouts().get(1).getTitle()); assertEquals(BuildInLayout.NORMAL.getTitle(), model.getLayouts().get(0).getTitle()); projectService.removeProject(project, null, false, adminToken); @@ -814,7 +814,7 @@ public class ProjectServiceTest extends ServiceTestFunctions { assertNotNull(model); assertEquals("main", model.getName()); assertEquals(ProjectStatus.DONE, project.getStatus()); - assertEquals("Number of layouts doesn't match", BuildInLayout.values().length-1, model.getLayouts().size()); + assertEquals("Number of layouts doesn't match", BuildInLayout.values().length - 1, model.getLayouts().size()); projectService.removeProject(project, null, false, adminToken); } catch (Exception e) { e.printStackTrace(); diff --git a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java index 0e08e4a105f21283040a4609fe99c885458f1cfb..d023d64bf743dad4d9ecf3b64e5d6cfd7d7d7a3b 100644 --- a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java +++ b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java @@ -587,7 +587,7 @@ public class ProjectBean extends AbstractManagedBean implements Serializable { projects = new ArrayList<>(); } projects.clear(); - List<ProjectView> localProjectList = projectService.getAllProjectViews(); + List<ProjectView> localProjectList = projectService.getAllProjectViews(userBean.getAuthenticationToken()); for (ProjectView projectRow : localProjectList) { projects.add(projectRow); } diff --git a/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java b/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java index bbdc0f5f8702c77af9f9ce6c16849ff958b606bf..27d28c8d53f74fe1064a7edf21ae6852d5fbb540 100644 --- a/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java +++ b/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java @@ -15,6 +15,7 @@ import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.ProjectStatus; import lcsb.mapviewer.model.map.layout.ReferenceGenome; import lcsb.mapviewer.model.user.ConfigurationElementType; +import lcsb.mapviewer.persist.dao.ProjectDao; import lcsb.mapviewer.services.interfaces.IConfigurationService; import lcsb.mapviewer.services.interfaces.IProjectService; import lcsb.mapviewer.services.interfaces.IReferenceGenomeService; @@ -33,15 +34,14 @@ public class StartupBean { /** * Default class logger. */ - private final transient Logger logger = Logger.getLogger(StartupBean.class); + private final transient Logger logger = Logger.getLogger(StartupBean.class); /** - * Service used to access information about projects. + * Dao used to access information about projects. * - * @see IProjectService */ - @ManagedProperty(value = "#{ProjectService}") - private transient IProjectService projectService; + @ManagedProperty(value = "#{ProjectDao}") + private transient ProjectDao projectDao; /** * Service used to access configuration params from db. @@ -49,7 +49,7 @@ public class StartupBean { * @see IProjectService */ @ManagedProperty(value = "#{ConfigurationService}") - private transient IConfigurationService configurationService; + private transient IConfigurationService configurationService; /** * Service used to access information about reference genomes. @@ -98,7 +98,7 @@ public class StartupBean { * when application was shutdown. */ private void setInterruptedProjectsStatuses() { - for (Project project : projectService.getAllProjects()) { + for (Project project : projectDao.getAll()) { if (!ProjectStatus.DONE.equals(project.getStatus()) && !ProjectStatus.FAIL.equals(project.getStatus())) { String errors = project.getErrors(); if (errors == null || errors.trim().isEmpty()) { @@ -109,29 +109,12 @@ public class StartupBean { errors += "Project uploading was interrupted by application restart (at the stage: " + project.getStatus() + ")."; project.setStatus(ProjectStatus.FAIL); project.setErrors(errors); - projectService.updateProject(project); + projectDao.update(project); logger.info("Status of project: " + project.getProjectId() + " changed to fail. Errors: " + errors); } } } - /** - * @return the projectService - * @see #projectService - */ - public IProjectService getProjectService() { - return projectService; - } - - /** - * @param projectService - * the projectService to set - * @see #projectService - */ - public void setProjectService(IProjectService projectService) { - this.projectService = projectService; - } - /** * @return the configurationService * @see #configurationService @@ -165,4 +148,20 @@ public class StartupBean { public void setReferenceGenomeService(IReferenceGenomeService referenceGenomeService) { this.referenceGenomeService = referenceGenomeService; } + + /** + * @return the projectDao + * @see #projectDao + */ + public ProjectDao getProjectDao() { + return projectDao; + } + + /** + * @param projectDao the projectDao to set + * @see #projectDao + */ + public void setProjectDao(ProjectDao projectDao) { + this.projectDao = projectDao; + } }