Skip to content
Snippets Groups Projects
Commit abbc95ce authored by Piotr Gawron's avatar Piotr Gawron
Browse files

list of projects is retrieved according to user privileges

parent 08313835
No related branches found
No related tags found
2 merge requests!115Resolve "admin panel should use API",!114Resolve "admin panel should use API"
Showing with 79 additions and 57 deletions
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, //
......
......@@ -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;
}
}
......@@ -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;
......
......@@ -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;
......
......@@ -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
*/
......
......@@ -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);
}
......@@ -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();
......
......@@ -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);
}
......
......@@ -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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment