From cfd9de39673800ff27a3b691693dfed5a36228b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Vir=C3=A1g?= Date: Fri, 4 Sep 2015 12:32:04 +0200 Subject: [PATCH] [OpenDataNode/open-data-node#196] added function to retrieve pipeline visible to user new api function with path /pipelines/visible?userExternalId=ID --- .../commons/app/facade/PipelineFacade.java | 8 +++++++ .../app/facade/PipelineFacadeImpl.java | 5 ++++ .../odcs/commons/app/pipeline/DbPipeline.java | 12 ++++++++++ .../commons/app/pipeline/DbPipelineImpl.java | 12 ++++++++++ .../master/api/PipelineResource.java | 23 ++++++++++++++++--- 5 files changed, 57 insertions(+), 3 deletions(-) diff --git a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacade.java b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacade.java index 6211832aa1..a079b21ce6 100644 --- a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacade.java +++ b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacade.java @@ -73,6 +73,14 @@ public interface PipelineFacade extends Facade { * @return List of pipelines */ List getAllPipelines(String externalUserId); + + /** + * Returns list of pipeline given user owns or that are not private + * + * @param externalUserId + * @return + */ + List getAllVisiblePipelines(String externalUserId); /** * Find pipeline in database by ID and return it. diff --git a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacadeImpl.java b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacadeImpl.java index 98ffc4288e..efaefac48a 100644 --- a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacadeImpl.java +++ b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/facade/PipelineFacadeImpl.java @@ -657,4 +657,9 @@ public List getAllPipelines(String externalUserId) { return this.pipelineDao.getPipelinesForUser(externalUserId); } + @PostFilter("hasPermission(filterObject,'pipeline.read')") + @Override + public List getAllVisiblePipelines(String externalUserId) { + return this.pipelineDao.getAllVisiblePipelines(externalUserId); + } } diff --git a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipeline.java b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipeline.java index bea7e73e94..ea0c6bab44 100644 --- a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipeline.java +++ b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipeline.java @@ -82,4 +82,16 @@ public interface DbPipeline extends DbAccess { */ public List getPipelinesForUser(String externalUserId); + + /** + * Fetches all pipelines that are visible to user, so: + *
+ * - he is owner that pipeline + * - pipelines that are not private (owner is someone else) + * + * @param userExternalId + * @return + */ + public List getAllVisiblePipelines(String userExternalId); + } diff --git a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipelineImpl.java b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipelineImpl.java index 078c4152f9..4ab9d7f648 100644 --- a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipelineImpl.java +++ b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/pipeline/DbPipelineImpl.java @@ -24,6 +24,7 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import cz.cuni.mff.xrg.odcs.commons.app.auth.ShareType; import cz.cuni.mff.xrg.odcs.commons.app.dao.db.DbAccessBase; import cz.cuni.mff.xrg.odcs.commons.app.dpu.DPUTemplateRecord; @@ -105,4 +106,15 @@ public List getPipelinesForUser(String userExternalId) { query.setParameter("userExternalId", userExternalId); return executeList(query); } + + @Override + public List getAllVisiblePipelines(String userExternalId) { + final String queryStr = "SELECT e FROM Pipeline e" + + " WHERE e.owner.externalIdentifier = :userExternalId" + + " OR e.shareType != :shareType"; + TypedQuery query = createTypedQuery(queryStr); + query.setParameter("userExternalId", userExternalId); + query.setParameter("shareType", ShareType.PRIVATE); + return executeList(query); + } } diff --git a/master/src/main/java/eu/unifiedviews/master/api/PipelineResource.java b/master/src/main/java/eu/unifiedviews/master/api/PipelineResource.java index 8ecc57e96c..3c5b828b68 100644 --- a/master/src/main/java/eu/unifiedviews/master/api/PipelineResource.java +++ b/master/src/main/java/eu/unifiedviews/master/api/PipelineResource.java @@ -16,7 +16,6 @@ */ package eu.unifiedviews.master.api; -import static org.apache.commons.lang3.StringUtils.isEmpty; import static org.apache.commons.lang3.StringUtils.isNotEmpty; import java.io.File; @@ -45,7 +44,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import cz.cuni.mff.xrg.odcs.commons.app.conf.AppConfig; import cz.cuni.mff.xrg.odcs.commons.app.facade.PipelineFacade; import cz.cuni.mff.xrg.odcs.commons.app.facade.UserFacade; import cz.cuni.mff.xrg.odcs.commons.app.pipeline.Pipeline; @@ -122,7 +120,7 @@ public List getPipelines(@QueryParam("userExternalId") String userE if (isNotEmpty(userExternalId)) { pipelines = this.pipelineFacade.getAllPipelines(userExternalId); } else { - pipelines = this.pipelineFacade.getAllPipelines(); + pipelines = new ArrayList<>(); } if (pipelines == null) { @@ -136,6 +134,25 @@ public List getPipelines(@QueryParam("userExternalId") String userE return PipelineDTOConverter.convert(pipelines); } + + @GET + @Path("/visible") + @Produces({ MediaType.APPLICATION_JSON }) + public List getVisiblePipelines(@QueryParam("userExternalId") String userExternalId) { + List pipelines = null; + try{ + pipelines = this.pipelineFacade.getAllVisiblePipelines(userExternalId); + + if (pipelines == null) { + pipelines = new ArrayList<>(); + } + } catch (ApiException e) { + throw e; + } catch (RuntimeException e) { + throw new ApiException(Response.Status.INTERNAL_SERVER_ERROR, Messages.getString("pipeline.get.general.error"), e.getMessage()); + } + return PipelineDTOConverter.convert(pipelines); + } @GET @Path("/{pipelineid}")