This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch RANGER-3923
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/RANGER-3923 by this push:
     new 3c8ded2e7 RANGER-4464: added API to get DataShare summary
3c8ded2e7 is described below

commit 3c8ded2e713a39a6e0abb236f1b893bbbc625207
Author: Subhrat Chaudhary <such...@yahoo.com>
AuthorDate: Sun Oct 8 19:42:48 2023 -0700

    RANGER-4464: added API to get DataShare summary
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
---
 .../org/apache/ranger/plugin/model/RangerGds.java  | 180 ++++++++++++++------
 .../java/org/apache/ranger/biz/GdsDBStore.java     | 184 +++++++++++++++++----
 .../main/java/org/apache/ranger/rest/GdsREST.java  |  80 +++++----
 .../ranger/security/context/RangerAPIList.java     |  11 +-
 .../ranger/service/RangerGdsDataShareService.java  |   4 +-
 .../ranger/service/RangerGdsDatasetService.java    |   2 +-
 .../ranger/service/RangerGdsProjectService.java    |   4 +-
 .../service/RangerGdsSharedResourceService.java    |   4 +-
 8 files changed, 337 insertions(+), 132 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java
index ec75d63bb..105044f08 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java
@@ -572,13 +572,103 @@ public class RangerGds {
         }
     }
 
+    @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
+    @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
+    @JsonIgnoreProperties(ignoreUnknown = true)
+    public static class DataShareSummary extends RangerBaseModelObject 
implements java.io.Serializable {
+        private static final long serialVersionUID = 1L;
+
+        private String                          name;
+        private String                          description;
+        private GdsPermission                   permissionForCaller;
+        private Long                            resourceCount;
+        private Long                            serviceId;
+        private String                          serviceName;
+        private String                          serviceType;
+        private Long                            zoneId;
+        private String                          zoneName;
+        private List<DataShareInDatasetSummary> datasets;
+
+        public DataShareSummary() {
+            super();
+        }
+
+        public String getName() { return name; }
+
+        public void setName(String name) { this.name = name; }
+
+        public String getDescription() { return description; }
+
+        public void setDescription(String description) { this.description = 
description; }
+
+        public GdsPermission getPermissionForCaller() { return 
permissionForCaller; }
+
+        public void setPermissionForCaller(GdsPermission permissionForCaller) 
{ this.permissionForCaller = permissionForCaller; }
+
+        public Long getResourceCount() { return resourceCount; }
+
+        public void setResourceCount(Long resourceCount) { this.resourceCount 
= resourceCount; }
+
+        public Long getServiceId() { return serviceId; }
+
+        public void setServiceId(Long serviceId) { this.serviceId = serviceId; 
}
+
+        public String getServiceName() { return serviceName; }
+
+        public void setServiceName(String serviceName) { this.serviceName = 
serviceName; }
+
+        public String getServiceType() { return serviceType; }
+
+        public void setServiceType(String serviceType) { this.serviceType = 
serviceType; }
+
+        public Long getZoneId() { return zoneId; }
+
+        public void setZoneId(Long zoneId) { this.zoneId = zoneId; }
+
+        public String getZoneName() { return zoneName; }
+
+        public void setZoneName(String zoneName) { this.zoneName = zoneName; }
+
+        public List<DataShareInDatasetSummary> getDatasets() { return 
datasets; }
+
+        public void setDatasets(List<DataShareInDatasetSummary> datasets) { 
this.datasets = datasets; }
+
+        @Override
+        public String toString() {
+            return toString(new StringBuilder()).toString();
+        }
+
+        public StringBuilder toString(StringBuilder sb) {
+            sb.append("DataShareSummary={");
+
+            super.toString(sb);
+
+            sb.append("name={").append(name).append("} ")
+              .append("description={").append(description).append("} ")
+              
.append("permissionForCaller={").append(permissionForCaller).append("} ")
+              .append("resourceCount={").append(resourceCount).append("} ")
+              .append("serviceId={").append(serviceId).append("} ")
+              .append("serviceName={").append(serviceName).append("} ")
+              .append("serviceType={").append(serviceType).append("} ")
+              .append("zoneName={").append(zoneName).append("} ")
+              .append("zoneId={").append(zoneId).append("} ")
+              .append("datasets={").append(datasets).append("} ")
+              .append("}");
+
+            return sb;
+        }
+    }
+
     @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
     @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
     @JsonIgnoreProperties(ignoreUnknown = true)
     public static class DataShareInDatasetSummary extends 
RangerBaseModelObject implements java.io.Serializable {
         private static final long serialVersionUID = 1L;
 
-        private String         name;
+        private Long           datasetId;
+        private String         datasetName;
+        private Long           dataShareId;
+        private String         dataShareName;
         private Long           serviceId;
         private String         serviceName;
         private Long           zoneId;
@@ -591,81 +681,63 @@ public class RangerGds {
             super();
         }
 
-        public String getName() {
-            return name;
-        }
+        public String getDatasetName() { return datasetName; }
 
-        public void setName(String name) {
-            this.name = name;
-        }
+        public void setDatasetName(String datasetName) { this.datasetName = 
datasetName; }
 
-        public Long getServiceId() {
-            return serviceId;
-        }
+        public Long getDatasetId() { return datasetId; }
 
-        public void setServiceId(Long serviceId) {
-            this.serviceId = serviceId;
-        }
+        public void setDatasetId(Long datasetId) { this.datasetId = datasetId; 
}
 
-        public String getServiceName() {
-            return serviceName;
-        }
+        public Long getDataShareId() { return dataShareId; }
 
-        public void setServiceName(String serviceName) {
-            this.serviceName = serviceName;
-        }
+        public void setDataShareId(Long dataShareId) { this.dataShareId = 
dataShareId; }
 
-        public Long getZoneId() {
-            return zoneId;
-        }
+        public String getDataShareName() { return dataShareName; }
 
-        public void setZoneId(Long zoneId) {
-            this.zoneId = zoneId;
-        }
+        public void setDataShareName(String dataShareName) { 
this.dataShareName = dataShareName; }
 
-        public String getZoneName() {
-            return zoneName;
-        }
+        public Long getServiceId() { return serviceId; }
 
-        public void setZoneName(String zoneName) {
-            this.zoneName = zoneName;
-        }
+        public void setServiceId(Long serviceId) { this.serviceId = serviceId; 
}
 
-        public Long getResourceCount() {
-            return resourceCount;
-        }
+        public String getServiceName() { return serviceName; }
 
-        public void setResourceCount(Long resourceCount) {
-            this.resourceCount = resourceCount;
-        }
+        public void setServiceName(String serviceName) { this.serviceName = 
serviceName; }
 
-        public GdsShareStatus getShareStatus() {
-            return shareStatus;
-        }
+        public Long getZoneId() { return zoneId; }
 
-        public void setShareStatus(GdsShareStatus shareStatus) {
-            this.shareStatus = shareStatus;
-        }
+        public void setZoneId(Long zoneId) { this.zoneId = zoneId; }
 
-        public String getApprover() {
-            return approver;
-        }
+        public String getZoneName() { return zoneName; }
 
-        public void setApprover(String approver) {
-            this.approver = approver;
-        }
+        public void setZoneName(String zoneName) { this.zoneName = zoneName; }
+
+        public Long getResourceCount() { return resourceCount; }
+
+        public void setResourceCount(Long resourceCount) { this.resourceCount 
= resourceCount; }
+
+        public GdsShareStatus getShareStatus() { return shareStatus; }
+
+        public void setShareStatus(GdsShareStatus shareStatus) { 
this.shareStatus = shareStatus; }
+
+        public String getApprover() { return approver; }
+
+        public void setApprover(String approver) { this.approver = approver; }
 
         @Override
-        public String toString() {
-            return toString(new StringBuilder()).toString();
-        }
+        public String toString() {return toString(new 
StringBuilder()).toString(); }
 
         public StringBuilder toString(StringBuilder sb) {
-            sb.append("DatasetSummary={");
+            sb.append("DataShareInDatasetSummary={");
 
             super.toString(sb);
 
-            sb.append("name={").append(name).append("} ")
+            sb.append("name={").append(datasetName).append("} ")
+              .append("datasetId={").append(datasetId).append("} ")
+              .append("datasetName={").append(datasetName).append("} ")
+              .append("dataShareId={").append(dataShareId).append("} ")
+              .append("dataShareName={").append(dataShareName).append("} ")
               .append("serviceId={").append(serviceId).append("} ")
               .append("serviceName={").append(serviceName).append("} ")
               .append("zoneId={").append(zoneId).append("} ")
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
index 60636430d..58b2d3ca0 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
@@ -40,6 +40,7 @@ import org.apache.ranger.entity.XXSecurityZone;
 import org.apache.ranger.entity.XXGdsProject;
 import org.apache.ranger.entity.XXGdsProjectPolicyMap;
 import org.apache.ranger.plugin.model.RangerGds.DatasetSummary;
+import org.apache.ranger.plugin.model.RangerGds.DataShareSummary;
 import org.apache.ranger.plugin.model.RangerGds.DataShareInDatasetSummary;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerGds.GdsPermission;
@@ -163,6 +164,20 @@ public class GdsDBStore extends AbstractGdsStore {
         return ret;
     }
 
+    public PList<DataShareSummary> getDataShareSummary(SearchFilter filter) {
+        LOG.debug("==> getDataShareSummary({})", filter);
+
+        PList<RangerDataShare>  dataShares       = 
getUnscrubbedDataShares(filter);
+        List<DataShareSummary>  dataShareSummary = 
toDataShareSummary(dataShares.getList(), getGdsPermissionFromFilter(filter));
+        PList<DataShareSummary> ret              = new 
PList<>(dataShareSummary, dataShares.getStartIndex(), dataShares.getPageSize(), 
dataShares.getTotalCount(), dataShares.getResultSize(), 
dataShares.getSortType(), dataShares.getSortBy());
+
+        ret.setQueryTimeMS(dataShares.getQueryTimeMS());
+
+        LOG.debug("<== getDataShareSummary({}): ret={}", filter, ret);
+
+        return ret;
+    }
+
     @Override
     public RangerDataset createDataset(RangerDataset dataset) {
         LOG.debug("==> createDataset({})", dataset);
@@ -849,21 +864,15 @@ public class GdsDBStore extends AbstractGdsStore {
     public PList<RangerDataShare> searchDataShares(SearchFilter filter) {
         LOG.debug("==> searchDataShares({})", filter);
 
-        int maxRows = filter.getMaxRows();
-        int startIndex = filter.getStartIndex();
-        filter.setStartIndex(0);
-        filter.setMaxRows(0);
-
-        RangerDataShareList   result     = 
dataShareService.searchDataShares(filter);
-        List<RangerDataShare> dataShares = new ArrayList<>();
+        PList<RangerDataShare> ret           = getUnscrubbedDataShares(filter);
+        List<RangerDataShare>  dataShares    = ret.getList();
+        GdsPermission          gdsPermission = 
getGdsPermissionFromFilter(filter);
 
-        for (RangerDataShare dataShare : result.getList()) {
-            // TODO: enforce RangerDataShare.acl
-
-            dataShares.add(dataShare);
-        }
-
-        PList<RangerDataShare> ret = getPList(dataShares, startIndex, maxRows, 
result.getSortBy(), result.getSortType());
+        for (RangerDataShare dataShare : dataShares) {
+            if (gdsPermission.equals(GdsPermission.LIST)) {
+                scrubDataShareForListing(dataShare);
+            }
+       }
 
         LOG.debug("<== searchDataShares({}): ret={}", filter, ret);
 
@@ -1217,10 +1226,12 @@ public class GdsDBStore extends AbstractGdsStore {
                 
datasetSummary.setProjectsCount(getDIPCountForDataset(dataset.getId()));
                 
datasetSummary.setPrincipalsCount(getPrincipalCountForDataset(dataset.getId()));
 
-                List<DataShareInDatasetSummary> dshInDsSummaryList = 
getDshInDsSummaryList(dataset.getId());
+                SearchFilter                    filter            = new 
SearchFilter(SearchFilter.DATASET_ID, dataset.getId().toString());
+                RangerDataShareList             dataShares        = 
dataShareService.searchDataShares(filter);
+                List<DataShareInDatasetSummary> dataSharesSummary = 
getDataSharesSummary(dataShares, filter);
 
-                datasetSummary.setDataShares(dshInDsSummaryList);
-                
datasetSummary.setTotalResourceCount(dshInDsSummaryList.stream()
+                datasetSummary.setDataShares(dataSharesSummary);
+                datasetSummary.setTotalResourceCount(dataSharesSummary.stream()
                         .map(DataShareInDatasetSummary::getResourceCount)
                         .mapToLong(Long::longValue)
                         .sum());
@@ -1232,12 +1243,48 @@ public class GdsDBStore extends AbstractGdsStore {
         return ret;
     }
 
-    private Map<GdsShareStatus, Long> getDataSharesInDatasetCountByStatus(Long 
datasetId) {
-        Map<GdsShareStatus, Long> ret            = new HashMap<>();
-        Map<Short, Long>          countsByStatus = 
daoMgr.getXXGdsDataShareInDataset().getDataSharesInDatasetCountByStatus(datasetId);
+    private List<DataShareSummary> toDataShareSummary(List<RangerDataShare> 
dataShares, GdsPermission gdsPermission) {
+        List<DataShareSummary> ret         = new ArrayList<>();
+        String                 currentUser = bizUtil.getCurrentUserLoginId();
+
+        for (RangerDataShare dataShare : dataShares) {
+            GdsPermission permissionForCaller = 
validator.getGdsPermissionForUser(dataShare.getAcl(), currentUser);
 
-        for (Map.Entry<Short, Long> entry : countsByStatus.entrySet()) {
-            
ret.put(RangerGdsDatasetInProjectService.toShareStatus(entry.getKey()), 
entry.getValue());
+            if (permissionForCaller.equals(GdsPermission.NONE)) {
+                continue;
+            }
+
+            DataShareSummary dataShareSummary = new DataShareSummary();
+
+            dataShareSummary.setId(dataShare.getId());
+            dataShareSummary.setName(dataShare.getName());
+            dataShareSummary.setDescription(dataShare.getDescription());
+            dataShareSummary.setCreateTime(dataShare.getCreateTime());
+            dataShareSummary.setUpdateTime(dataShare.getUpdateTime());
+            dataShareSummary.setCreatedBy(dataShare.getCreatedBy());
+            dataShareSummary.setUpdatedBy(dataShare.getUpdatedBy());
+            dataShareSummary.setIsEnabled(dataShare.getIsEnabled());
+            dataShareSummary.setGuid(dataShare.getGuid());
+            dataShareSummary.setVersion(dataShare.getVersion());
+            dataShareSummary.setPermissionForCaller(permissionForCaller);
+
+            dataShareSummary.setZoneName(dataShare.getZone());
+            dataShareSummary.setZoneId(getZoneId(dataShare.getZone()));
+
+            dataShareSummary.setServiceName(dataShare.getService());
+            
dataShareSummary.setServiceId(getServiceId(dataShare.getService()));
+            
dataShareSummary.setServiceType(getServiceType(dataShare.getService()));
+
+            if (!gdsPermission.equals(GdsPermission.LIST)) {
+                SearchFilter                    filter          = new 
SearchFilter(SearchFilter.DATA_SHARE_ID, dataShare.getId().toString());
+                RangerDatasetList               datasets        = 
datasetService.searchDatasets(filter);
+                List<DataShareInDatasetSummary> datasetsSummary = 
getDatasetsSummary(datasets, filter);
+
+                dataShareSummary.setDatasets(datasetsSummary);
+                
dataShareSummary.setResourceCount(sharedResourceService.getResourceCountForDataShare(dataShare.getId()));
+            }
+
+            ret.add(dataShareSummary);
         }
 
         return ret;
@@ -1288,6 +1335,26 @@ public class GdsDBStore extends AbstractGdsStore {
         return getPList(datasets, startIndex, maxRows, result.getSortBy(), 
result.getSortType());
     }
 
+    private PList<RangerDataShare> getUnscrubbedDataShares(SearchFilter 
filter) {
+        int maxRows    = filter.getMaxRows();
+        int startIndex = filter.getStartIndex();
+
+        filter.setStartIndex(0);
+        filter.setMaxRows(0);
+
+        GdsPermission         gdsPermission = 
getGdsPermissionFromFilter(filter);
+        RangerDataShareList   result        = 
dataShareService.searchDataShares(filter);
+        List<RangerDataShare> dataShares    = new ArrayList<>();
+
+        for (RangerDataShare dataShare : result.getList()) {
+            if (dataShare != null && 
validator.hasPermission(dataShare.getAcl(), gdsPermission)) {
+                dataShares.add(dataShare);
+            }
+        }
+
+        return getPList(dataShares, startIndex, maxRows, result.getSortBy(), 
result.getSortType());
+    }
+
     private <T> PList<T> getPList(List<T> list, int startIndex, int 
maxEntries, String sortBy, String sortType) {
         List<T> subList = startIndex < list.size() ? list.subList(startIndex, 
Math.min(startIndex + maxEntries, list.size())) : Collections.emptyList();
 
@@ -1325,6 +1392,12 @@ public class GdsDBStore extends AbstractGdsStore {
         project.setAdditionalInfo(null);
     }
 
+    private void scrubDataShareForListing(RangerDataShare dataShare) {
+        dataShare.setAcl(null);
+        dataShare.setOptions(null);
+        dataShare.setAdditionalInfo(null);
+    }
+
     private void removeDshInDsForDataShare(Long dataShareId) {
         SearchFilter                 filter      = new 
SearchFilter(SearchFilter.DATA_SHARE_ID, dataShareId.toString());
         RangerDataShareInDatasetList dshInDsList = 
dataShareInDatasetService.searchDataShareInDatasets(filter);
@@ -1464,19 +1537,31 @@ public class GdsDBStore extends AbstractGdsStore {
         }
     }
 
-    private List<DataShareInDatasetSummary> getDshInDsSummaryList(Long 
datasetId) {
-        List<DataShareInDatasetSummary> ret        = new ArrayList<>();
-        SearchFilter                    filter     = new 
SearchFilter(SearchFilter.DATASET_ID, datasetId.toString());
-        RangerDataShareList             dataShares = 
dataShareService.searchDataShares(filter);
+    private List<DataShareInDatasetSummary> 
getDataSharesSummary(RangerDataShareList dataShares, SearchFilter filter) {
+        List<DataShareInDatasetSummary> ret = new ArrayList<>();
 
         if (CollectionUtils.isNotEmpty(dataShares.getList())) {
             RangerDataShareInDatasetList dshInDsList = 
dataShareInDatasetService.searchDataShareInDatasets(filter);
 
             if (CollectionUtils.isNotEmpty(dshInDsList.getList())) {
                 for (RangerDataShare dataShare : dataShares.getList()) {
-                    DataShareInDatasetSummary summary = 
toDshInDsSummary(dataShare, dshInDsList.getList());
+                    ret.add(toDshInDsSummary(dataShare, 
dshInDsList.getList()));
+                }
+            }
+        }
+
+        return ret;
+    }
+
+    private List<DataShareInDatasetSummary> 
getDatasetsSummary(RangerDatasetList datasets, SearchFilter filter) {
+        List<DataShareInDatasetSummary> ret = new ArrayList<>();
 
-                    ret.add(summary);
+        if (CollectionUtils.isNotEmpty(datasets.getList())) {
+            RangerDataShareInDatasetList dshInDsList = 
dataShareInDatasetService.searchDataShareInDatasets(filter);
+
+            if (CollectionUtils.isNotEmpty(dshInDsList.getList())) {
+                for (RangerDataset dataset : datasets.getList()) {
+                    ret.add(toDshInDsSummary(dataset, dshInDsList.getList()));
                 }
             }
         }
@@ -1488,12 +1573,14 @@ public class GdsDBStore extends AbstractGdsStore {
         Optional<RangerDataShareInDataset> dshInDs = 
dshInDsList.stream().filter(d -> 
d.getDataShareId().equals(dataShare.getId())).findFirst();
 
         if (!dshInDs.isPresent()) {
-            throw restErrorUtil.createRESTException("RequestStatus for 
DataShareInDataset not found", MessageEnums.DATA_NOT_FOUND, dataShare.getId(), 
"SharedResourceId", null, HttpStatus.SC_NOT_FOUND);
+            throw restErrorUtil.createRESTException("DataShareInDataset not 
found", MessageEnums.DATA_NOT_FOUND, dataShare.getId(), "SharedResourceId", 
null, HttpStatus.SC_NOT_FOUND);
         }
 
         DataShareInDatasetSummary summary = new DataShareInDatasetSummary();
 
-        summary.setId(dataShare.getId());
+        summary.setId(dshInDs.get().getId());
+        summary.setDataShareId(dataShare.getId());
+        summary.setDataShareName(dataShare.getName());
         summary.setCreatedBy(dataShare.getCreatedBy());
         summary.setCreateTime(dataShare.getCreateTime());
         summary.setUpdatedBy(dataShare.getUpdatedBy());
@@ -1502,7 +1589,6 @@ public class GdsDBStore extends AbstractGdsStore {
         summary.setIsEnabled(dataShare.getIsEnabled());
         summary.setVersion(dataShare.getVersion());
 
-        summary.setName(dataShare.getName());
         summary.setServiceId(getServiceId(dataShare.getService()));
         summary.setServiceName(dataShare.getService());
         summary.setZoneId(getZoneId(dataShare.getZone()));
@@ -1514,6 +1600,32 @@ public class GdsDBStore extends AbstractGdsStore {
         return summary;
     }
 
+    private DataShareInDatasetSummary toDshInDsSummary(RangerDataset dataset, 
List<RangerDataShareInDataset> dshInDsList) {
+        Optional<RangerDataShareInDataset> dshInDs = 
dshInDsList.stream().filter(d -> 
d.getDatasetId().equals(dataset.getId())).findFirst();
+
+        if (!dshInDs.isPresent()) {
+            throw restErrorUtil.createRESTException("DataShareInDataset not 
found", MessageEnums.DATA_NOT_FOUND, dataset.getId(), "DatasetId", null, 
HttpStatus.SC_NOT_FOUND);
+        }
+
+        DataShareInDatasetSummary summary = new DataShareInDatasetSummary();
+
+        summary.setId(dshInDs.get().getId());
+        summary.setDatasetId(dataset.getId());
+        summary.setDatasetName(dataset.getName());
+        summary.setCreatedBy(dataset.getCreatedBy());
+        summary.setCreateTime(dataset.getCreateTime());
+        summary.setUpdatedBy(dataset.getUpdatedBy());
+        summary.setUpdateTime(dataset.getUpdateTime());
+        summary.setGuid(dataset.getGuid());
+        summary.setIsEnabled(dataset.getIsEnabled());
+        summary.setVersion(dataset.getVersion());
+
+        summary.setShareStatus(dshInDs.get().getStatus());
+        summary.setApprover(dshInDs.get().getApprover());
+
+        return summary;
+    }
+
     private Long getServiceId(String serviceName) {
         XXService xService = daoMgr.getXXService().findByName(serviceName);
 
@@ -1524,6 +1636,16 @@ public class GdsDBStore extends AbstractGdsStore {
         return xService.getId();
     }
 
+    private String getServiceType(String serviceName) {
+        String serviceTpe = 
daoMgr.getXXServiceDef().findServiceDefTypeByServiceName(serviceName);
+
+        if (StringUtils.isEmpty(serviceTpe)) {
+            throw restErrorUtil.createRESTException("Service type not found", 
MessageEnums.DATA_NOT_FOUND, null, "ServiceName", null, 
HttpStatus.SC_NOT_FOUND);
+        }
+
+        return serviceTpe;
+    }
+
     private Long getZoneId(String zoneName) {
         Long ret = null;
 
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java
index cc09506f3..18e4cc451 100755
--- a/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java
@@ -31,6 +31,7 @@ import org.apache.ranger.plugin.model.RangerGds.RangerProject;
 import org.apache.ranger.plugin.model.RangerGds.RangerSharedResource;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerGds.DatasetSummary;
+import org.apache.ranger.plugin.model.RangerGds.DataShareSummary;
 import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.util.RangerPerfTracer;
 import org.apache.ranger.plugin.util.SearchFilter;
@@ -298,17 +299,21 @@ public class GdsREST {
         LOG.debug("==> GdsREST.getDatasetSummary()");
 
         PList<DatasetSummary> ret;
+        RangerPerfTracer      perf   = null;
+        SearchFilter          filter = null;
 
         try {
-            SearchFilter filter = searchUtil.getSearchFilter(request, 
datasetService.sortFields);
+            filter = searchUtil.getSearchFilter(request, 
datasetService.sortFields);
 
             ret = gdsStore.getDatasetSummary(filter);
         } catch (WebApplicationException we) {
             throw we;
         } catch (Throwable ex) {
-            LOG.error("getDatasetSummary() failed", ex);
+            LOG.error("getDatasetSummary({}) failed", filter, ex);
 
             throw restErrorUtil.createRESTException(ex.getMessage());
+        } finally {
+            RangerPerfTracer.log(perf);
         }
 
         LOG.debug("<== GdsREST.getDatasetSummary(): {}", ret);
@@ -588,14 +593,10 @@ public class GdsREST {
         LOG.debug("==> GdsREST.searchProjects()");
 
         PList<RangerProject> ret;
-        RangerPerfTracer     perf   = null;
+        RangerPerfTracer     perf   = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchProjects()");;
         SearchFilter         filter = null;
 
         try {
-            if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchProjects()");
-            }
-
             filter = searchUtil.getSearchFilter(request, 
projectService.sortFields);
 
             ret = gdsStore.searchProjects(filter);
@@ -622,14 +623,10 @@ public class GdsREST {
         LOG.debug("==> GdsREST.listProjectNames()");
 
         PList<String>    ret;
-        RangerPerfTracer perf   = null;
+        RangerPerfTracer perf   = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchProjects()");
         SearchFilter     filter = null;
 
         try {
-            if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchProjects()");
-            }
-
             filter = searchUtil.getSearchFilter(request, 
projectService.sortFields);
 
             ret = gdsStore.getProjectNames(filter);
@@ -923,14 +920,10 @@ public class GdsREST {
         LOG.debug("==> GdsREST.searchDataShares()");
 
         PList<RangerDataShare> ret;
-        RangerPerfTracer       perf   = null;
+        RangerPerfTracer       perf   = 
RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDataShares()");
         SearchFilter           filter = null;
 
         try {
-            if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchDataShares()");
-            }
-
             filter = searchUtil.getSearchFilter(request, 
dataShareService.sortFields);
 
             ret = gdsStore.searchDataShares(filter);
@@ -949,6 +942,35 @@ public class GdsREST {
         return ret;
     }
 
+    @GET
+    @Path("/datashare/summary")
+    @Produces({ "application/json" })
+    @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + 
RangerAPIList.GET_DATA_SHARE_SUMMARY + "\")")
+    public PList<DataShareSummary> getDataShareSummary(@Context 
HttpServletRequest request) {
+        LOG.debug("==> GdsREST.getDataShareSummary()");
+
+        PList<DataShareSummary> ret;
+        RangerPerfTracer        perf = 
RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.getDataShareSummary()");
+
+        try {
+            SearchFilter filter = searchUtil.getSearchFilter(request, 
dataShareService.sortFields);
+
+            ret = gdsStore.getDataShareSummary(filter);
+        } catch (WebApplicationException we) {
+            throw we;
+        } catch (Throwable ex) {
+            LOG.error("getDataShareSummary() failed", ex);
+
+            throw restErrorUtil.createRESTException(ex.getMessage());
+        } finally {
+            RangerPerfTracer.log(perf);
+        }
+
+        LOG.debug("<== GdsREST.getDataShareSummary(): {}", ret);
+
+        return ret;
+    }
+
     @POST
     @Path("/resource")
     @Consumes({ "application/json" })
@@ -1085,14 +1107,10 @@ public class GdsREST {
         LOG.debug("==> GdsREST.searchSharedResources()");
 
         PList<RangerSharedResource> ret;
-        RangerPerfTracer       perf   = null;
-        SearchFilter           filter = null;
+        RangerPerfTracer            perf   = 
RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchSharedResources()");
+        SearchFilter                filter = null;
 
         try {
-            if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchSharedResources()");
-            }
-
             filter = searchUtil.getSearchFilter(request, 
sharedResourceService.sortFields);
 
             ret = gdsStore.searchSharedResources(filter);
@@ -1120,7 +1138,7 @@ public class GdsREST {
         LOG.debug("==> GdsREST.addDataShareInDataset({})", datasetData);
 
         RangerDataShareInDataset ret;
-        RangerPerfTracer  perf = null;
+        RangerPerfTracer         perf = null;
 
         try {
             if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
@@ -1152,7 +1170,7 @@ public class GdsREST {
         LOG.debug("==> GdsREST.updateDataShareInDataset({}, {})", id, 
dataShareInDataset);
 
         RangerDataShareInDataset ret;
-        RangerPerfTracer  perf = null;
+        RangerPerfTracer         perf = null;
 
         try {
             if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
@@ -1244,14 +1262,10 @@ public class GdsREST {
         LOG.debug("==> GdsREST.searchDataShareInDatasets()");
 
         PList<RangerDataShareInDataset> ret;
-        RangerPerfTracer         perf   = null;
+        RangerPerfTracer         perf   = 
RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDataShareInDatasets()");
         SearchFilter             filter = null;
 
         try {
-            if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchDataShareInDatasets()");
-            }
-
             filter = searchUtil.getSearchFilter(request, 
dshidService.sortFields);
 
             ret = gdsStore.searchDataShareInDatasets(filter);
@@ -1404,14 +1418,10 @@ public class GdsREST {
         LOG.debug("==> GdsREST.searchDatasetInProjects()");
 
         PList<RangerDatasetInProject> ret;
-        RangerPerfTracer              perf   = null;
+        RangerPerfTracer              perf   = 
RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDatasetInProjects()");
         SearchFilter                  filter = null;
 
         try {
-            if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"GdsREST.searchDatasetInProjects()");
-            }
-
             filter = searchUtil.getSearchFilter(request, 
dipService.sortFields);
 
             ret = gdsStore.searchDatasetInProjects(filter);
diff --git 
a/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
 
b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
index 1c42e93c0..f21d445c4 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
@@ -233,11 +233,12 @@ public class RangerAPIList {
        public static final String LIST_PROJECT_NAMES  = 
"GdsREST.listProjectNames";
        public static final String PROJECT_POLICY      = 
"GdsREST.projectPolicy";
 
-       public static final String CREATE_DATA_SHARE   = 
"GdsREST.createDataShare";
-       public static final String UPDATE_DATA_SHARE   = 
"GdsREST.updateDataShare";
-       public static final String DELETE_DATA_SHARE   = 
"GdsREST.deleteDataShare";
-       public static final String GET_DATA_SHARE      = "GdsREST.getDataShare";
-       public static final String SEARCH_DATA_SHARES  = 
"GdsREST.searchDataShares";
+       public static final String CREATE_DATA_SHARE      = 
"GdsREST.createDataShare";
+       public static final String UPDATE_DATA_SHARE      = 
"GdsREST.updateDataShare";
+       public static final String DELETE_DATA_SHARE      = 
"GdsREST.deleteDataShare";
+       public static final String GET_DATA_SHARE         = 
"GdsREST.getDataShare";
+       public static final String SEARCH_DATA_SHARES     = 
"GdsREST.searchDataShares";
+       public static final String GET_DATA_SHARE_SUMMARY = 
"GdsREST.getDataShareSummary";
 
        public static final String ADD_SHARED_RESOURCE     = 
"GdsREST.addSharedResource";
        public static final String UPDATE_SHARED_RESOURCE  = 
"GdsREST.updateSharedResource";
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
index 773fcb873..d4e6ec746 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
@@ -75,8 +75,8 @@ public class RangerGdsDataShareService extends 
RangerGdsBaseModelService<XXGdsDa
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
-        sortFields.add(new SortField(SearchFilter.DATASET_ID,   "obj.id", 
true, SortField.SORT_ORDER.ASC));
-        sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name"));
+        sortFields.add(new SortField(SearchFilter.DATA_SHARE_ID,   "obj.id", 
true, SortField.SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.DATA_SHARE_NAME, 
"obj.name"));
     }
 
     @Override
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
index 344b4ec33..d5e2e52bd 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
@@ -69,7 +69,7 @@ public class RangerGdsDatasetService extends 
RangerGdsBaseModelService<XXGdsData
         searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,       
  "z.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare 
dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = 
dsh.id and dsh.zoneId = z.id"));
         searchFields.add(new SearchField(SearchFilter.ZONE_ID,                 
  "dsh.zoneId",        SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare 
dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = 
dsh.id  and dsh.zoneId = z.id"));
         searchFields.add(new SearchField(SearchFilter.CREATE_TIME_START,       
"obj.createTime",    SearchField.DATA_TYPE.DATE,        
SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
-       searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END,         
"obj.createTime",    SearchField.DATA_TYPE.DATE, 
SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+        searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END,         
"obj.createTime",    SearchField.DATA_TYPE.DATE,        
SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
         searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_START,       
"obj.updateTime",    SearchField.DATA_TYPE.DATE,        
SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
         searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_END,         
"obj.createTime",    SearchField.DATA_TYPE.DATE,        
SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
index 1da1456a6..f800c90b0 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
@@ -71,8 +71,8 @@ public class RangerGdsProjectService extends 
RangerGdsBaseModelService<XXGdsProj
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
-        sortFields.add(new SortField(SearchFilter.DATASET_ID,   "obj.id", 
true, SortField.SORT_ORDER.ASC));
-        sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name"));
+        sortFields.add(new SortField(SearchFilter.PROJECT_ID,   "obj.id", 
true, SortField.SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.PROJECT_NAME, "obj.name"));
     }
 
     @Override
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
index 35ea2da8c..a96f6e8b3 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
@@ -70,8 +70,8 @@ public class RangerGdsSharedResourceService extends 
RangerGdsBaseModelService<XX
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
-        sortFields.add(new SortField(SearchFilter.DATASET_ID,   "obj.id", 
true, SortField.SORT_ORDER.ASC));
-        sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name"));
+        sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_ID,   
"obj.id", true, SortField.SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_NAME, 
"obj.name"));
     }
 
     @Override


Reply via email to