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

commit 7528f5d1385bbbcba44bb22157a7e12df38f0570
Author: Prashant Satam <prashant.sa...@privacera.com>
AuthorDate: Fri Sep 29 10:43:41 2023 -0700

    RANGER-4410: added additional filters in APIs to search datasets, 
dataShares, projects
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
---
 .../apache/ranger/plugin/util/SearchFilter.java    | 16 +++-
 .../java/org/apache/ranger/biz/GdsDBStore.java     |  1 -
 .../org/apache/ranger/common/RangerSearchUtil.java |  6 +-
 .../ranger/service/RangerBaseModelService.java     | 99 +++++++++++-----------
 .../ranger/service/RangerGdsDataShareService.java  | 25 ++++--
 .../ranger/service/RangerGdsDatasetService.java    | 25 ++++--
 .../ranger/service/RangerGdsProjectService.java    | 25 ++++--
 7 files changed, 119 insertions(+), 78 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
old mode 100644
new mode 100755
index 1a1a78064..5be7cebbb
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
@@ -61,6 +61,7 @@ public class SearchFilter {
     public static final String POLICY_LABEL_ID       = "policyLabelId";      
// search, sort
     public static final String ZONE_ID               = "zoneId";      // 
search, sort
     public static final String ZONE_NAME             = "zoneName";      // 
search, sort
+    public static final String ZONE_NAME_PARTIAL     = "zoneNamePartial";      
// search, sort
     public static final String NOT_ZONE_NAME         = "notZoneName";   // 
search
        public static final String ROLE_ID               = "roleId";      // 
search, sort
        public static final String ROLE_NAME             = "roleName";      // 
search, sort
@@ -99,10 +100,13 @@ public class SearchFilter {
        public static final String SERVICE_TYPE_DISPLAY_NAME    = 
"serviceTypeDisplayName";             // search, sort
 
        public static final String DATASET_NAME             = "datasetName";    
      // search, sort
+       public static final String DATASET_NAME_PARTIAL     = 
"datasetNamePartial";   // search, sort
        public static final String DATASET_ID               = "datasetId";      
      // search, sort
        public static final String PROJECT_NAME             = "projectName";    
      // search, sort
+       public static final String PROJECT_NAME_PARTIAL     = 
"projectNamePartial";   // search, sort
        public static final String PROJECT_ID               = "projectId";      
      // search, sort
        public static final String DATA_SHARE_NAME          = "dataShareName";  
      // search, sort
+       public static final String DATA_SHARE_NAME_PARTIAL  = 
"dataShareNamePartial"; // search, sort
        public static final String DATA_SHARE_ID            = "dataShareId";    
      // search, sort
        public static final String SHARED_RESOURCE_NAME     = 
"sharedResourceName";   // search, sort
        public static final String SHARED_RESOURCE_ID       = 
"sharedResourceId";     // search, sort
@@ -111,7 +115,7 @@ public class SearchFilter {
        public static final String OWNER_TYPE               = "ownerType";      
      // search: valid-values(user, group, role)
        public static final String DATA_SHARE_IN_DATASET_ID = 
"dataShareInDatasetId"; // search, sort
        public static final String DATASET_IN_PROJECT_ID    = 
"datasetInProjectId";   // search, sort
-       public static final String GDS_PERMISSION           = "gdsPermission";  
 // search, sort
+       public static final String IS_DISTINCT = "isDistinct"; // search, sort
 
        private Map<String, String> params;
        private int                 startIndex;
@@ -119,6 +123,7 @@ public class SearchFilter {
        private boolean             getCount   = true;
        private String              sortBy;
        private String              sortType;
+       private boolean isDistinct = true;
 
        public SearchFilter() {
                this((Map<String, String>) null);
@@ -245,6 +250,14 @@ public class SearchFilter {
                this.sortType = sortType;
        }
 
+       public boolean isDistinct() {
+               return isDistinct;
+       }
+
+       public void setDistinct(boolean isDistinct) {
+               this.isDistinct = isDistinct;
+       }
+
        @Override
        public boolean equals(Object object) {
                if (object == null || !(object instanceof SearchFilter)) {
@@ -277,6 +290,7 @@ public class SearchFilter {
                sb.append("sortBy={").append(sortBy).append("} ");
                sb.append("sortType={").append(sortType).append("} ");
                sb.append("startIndex={").append(startIndex).append("} ");
+               sb.append("isDistinct={").append(isDistinct).append("} ");
                sb.append("}");
 
                return sb;
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 ff6b2b23e..909a74fe2 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
@@ -264,7 +264,6 @@ public class GdsDBStore extends AbstractGdsStore {
         if (gdsPermission == null) {
             gdsPermission = GdsPermission.VIEW;
         }
-
         RangerDatasetList   result   = datasetService.searchDatasets(filter);
         List<RangerDataset> datasets = new ArrayList<>();
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java 
b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
old mode 100644
new mode 100755
index 51da7d15d..66accbc0c
--- 
a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
@@ -77,6 +77,8 @@ public class RangerSearchUtil extends SearchUtil {
                ret.setParam(SearchFilter.PLUGIN_ENTITY_TYPE, 
request.getParameter(SearchFilter.PLUGIN_ENTITY_TYPE));
                ret.setParam(SearchFilter.PLUGIN_IP_ADDRESS, 
request.getParameter(SearchFilter.PLUGIN_IP_ADDRESS));
                ret.setParam(SearchFilter.ZONE_NAME, 
request.getParameter(SearchFilter.ZONE_NAME));
+               ret.setParam(SearchFilter.ZONE_NAME_PARTIAL, 
request.getParameter(SearchFilter.ZONE_NAME_PARTIAL));
+               ret.setParam(SearchFilter.ZONE_ID, 
request.getParameter(SearchFilter.ZONE_ID));
                ret.setParam(SearchFilter.TAG_SERVICE_ID, 
request.getParameter(SearchFilter.TAG_SERVICE_ID));
                ret.setParam(SearchFilter.ROLE_NAME, 
request.getParameter(SearchFilter.ROLE_NAME));
                ret.setParam(SearchFilter.ROLE_ID, 
request.getParameter(SearchFilter.ROLE_ID));
@@ -100,16 +102,18 @@ public class RangerSearchUtil extends SearchUtil {
                ret.setParam(SearchFilter.RESOURCE_MATCH_SCOPE, 
request.getParameter(SearchFilter.RESOURCE_MATCH_SCOPE));
 
                ret.setParam(SearchFilter.DATASET_NAME, 
request.getParameter(SearchFilter.DATASET_NAME));
+               ret.setParam(SearchFilter.DATASET_NAME_PARTIAL, 
request.getParameter(SearchFilter.DATASET_NAME_PARTIAL));
                ret.setParam(SearchFilter.DATASET_ID, 
request.getParameter(SearchFilter.DATASET_ID));
                ret.setParam(SearchFilter.PROJECT_NAME, 
request.getParameter(SearchFilter.PROJECT_NAME));
+               ret.setParam(SearchFilter.PROJECT_NAME_PARTIAL, 
request.getParameter(SearchFilter.PROJECT_NAME_PARTIAL));
                ret.setParam(SearchFilter.PROJECT_ID, 
request.getParameter(SearchFilter.PROJECT_ID));
                ret.setParam(SearchFilter.DATA_SHARE_NAME, 
request.getParameter(SearchFilter.DATA_SHARE_NAME));
+               ret.setParam(SearchFilter.DATA_SHARE_NAME_PARTIAL, 
request.getParameter(SearchFilter.DATA_SHARE_NAME_PARTIAL));
                ret.setParam(SearchFilter.DATA_SHARE_ID, 
request.getParameter(SearchFilter.DATA_SHARE_ID));
                ret.setParam(SearchFilter.SHARED_RESOURCE_ID, 
request.getParameter(SearchFilter.SHARED_RESOURCE_ID));
                ret.setParam(SearchFilter.PROFILE_NAME, 
request.getParameter(SearchFilter.PROFILE_NAME));
                ret.setParam(SearchFilter.OWNER_NAME, 
request.getParameter(SearchFilter.OWNER_NAME));
                ret.setParam(SearchFilter.OWNER_TYPE, 
request.getParameter(SearchFilter.OWNER_TYPE));
-               ret.setParam(SearchFilter.GDS_PERMISSION, 
request.getParameter(SearchFilter.GDS_PERMISSION));
 
                extractCommonCriteriasForFilter(request, ret, sortFields);
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
old mode 100644
new mode 100755
index 4128d70df..032978701
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
@@ -52,8 +52,14 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public abstract class RangerBaseModelService<T extends XXDBBase, V extends 
RangerBaseModelObject> {
-       private static final Logger LOG = LoggerFactory
-                       .getLogger(RangerBaseModelService.class);
+       private static final Logger LOG = 
LoggerFactory.getLogger(RangerBaseModelService.class);
+
+       public static final int OPERATION_CREATE_CONTEXT        = 1;
+       public static final int OPERATION_UPDATE_CONTEXT        = 2;
+       public static final int OPERATION_DELETE_CONTEXT        = 3;
+       public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4;
+       public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5;
+
 
        @Autowired
        protected RangerDaoManager daoMgr;
@@ -66,54 +72,51 @@ public abstract class RangerBaseModelService<T extends 
XXDBBase, V extends Range
        
        @Autowired
        protected RangerSearchUtil searchUtil;
-       
-       @Autowired
-       RangerBizUtil bizUtil;
-
-       public static final int OPERATION_CREATE_CONTEXT = 1;
-       public static final int OPERATION_UPDATE_CONTEXT = 2;
-       public static final int OPERATION_DELETE_CONTEXT = 3;
-       public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4;
-       public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5;
-       protected Class<T> tEntityClass;
-       protected Class<V> tViewClass;
-       private Boolean populateExistingBaseFields;
-       protected String tClassName;
-       
-       public List<SortField> sortFields = new ArrayList<SortField>();
-       public List<SearchField> searchFields = new ArrayList<SearchField>();
-       protected final String countQueryStr;
-       protected String queryStr;
 
        @Autowired
        protected BaseDao<T> entityDao;
 
+       @Autowired
+       RangerBizUtil bizUtil;
+
+       public    final List<SortField>   sortFields = new ArrayList<>();
+       public    final List<SearchField> searchFields = new ArrayList<>();
+       protected final Class<T>          tEntityClass;
+       protected final Class<V>          tViewClass;
+       protected final String            tClassName;
+       protected final String            countQueryStr;
+       protected final String            distinctCountQueryStr;
+       protected final String            queryStr;
+       protected final String            distinctQueryStr;
+       private         Boolean           populateExistingBaseFields;
+
        @SuppressWarnings("unchecked")
        public RangerBaseModelService() {
-               Class klass = getClass();
-               ParameterizedType genericSuperclass = (ParameterizedType) klass
-                               .getGenericSuperclass();
-               TypeVariable<Class<?>> var[] = klass.getTypeParameters();
+               Class                  klass             = getClass();
+               ParameterizedType      genericSuperclass = (ParameterizedType) 
klass.getGenericSuperclass();
+               TypeVariable<Class<?>> var[]             = 
klass.getTypeParameters();
 
                if (genericSuperclass.getActualTypeArguments()[0] instanceof 
Class) {
-                       tEntityClass = (Class<T>) genericSuperclass
-                                       .getActualTypeArguments()[0];
-                       tViewClass = (Class<V>) 
genericSuperclass.getActualTypeArguments()[1];
+                       tEntityClass = (Class<T>) 
genericSuperclass.getActualTypeArguments()[0];
+                       tViewClass   = (Class<V>) 
genericSuperclass.getActualTypeArguments()[1];
                } else if (var.length > 0) {
                        tEntityClass = (Class<T>) var[0].getBounds()[0];
-                       tViewClass = (Class<V>) var[1].getBounds()[0];
+                       tViewClass   = (Class<V>) var[1].getBounds()[0];
                } else {
                        LOG.error("Cannot find class for template", new 
Throwable());
-               }
-               
-               if (tEntityClass != null) {
-                       tClassName = tEntityClass.getName();
+
+                       tEntityClass = null;
+                       tViewClass   = null;
                }
 
+               tClassName = (tEntityClass != null) ? tEntityClass.getName() : 
"XXDBBase";
+
                populateExistingBaseFields = false;
-               
-               countQueryStr = "SELECT COUNT(obj) FROM " + tClassName + " obj 
";
-               queryStr = "SELECT obj FROM " + tClassName + " obj ";
+
+               countQueryStr         = "SELECT COUNT(obj) FROM " + tClassName 
+ " obj ";
+               distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM " + 
tClassName + " obj ";
+               queryStr              = "SELECT obj FROM " + tClassName + " obj 
";
+               distinctQueryStr      = "SELECT DISTINCT obj FROM " + 
tClassName + " obj ";
        }
 
        protected abstract T mapViewToEntityBean(V viewBean, T t,
@@ -160,12 +163,12 @@ public abstract class RangerBaseModelService<T extends 
XXDBBase, V extends Range
        }
 
        protected T populateEntityBeanForCreate(T entityObj, V vObj) {
-               if(!populateExistingBaseFields) {
+               if (!populateExistingBaseFields) {
                        entityObj.setCreateTime(DateUtil.getUTCDate());
                        entityObj.setUpdateTime(entityObj.getCreateTime());
                        
entityObj.setAddedByUserId(ContextUtil.getCurrentUserId());
                        
entityObj.setUpdatedByUserId(entityObj.getAddedByUserId());
-               } else if(populateExistingBaseFields) {
+               } else {
                        XXPortalUser createdByUser = 
daoMgr.getXXPortalUser().findByLoginId(vObj.getCreatedBy());
                        XXPortalUser updByUser     = 
daoMgr.getXXPortalUser().findByLoginId(vObj.getUpdatedBy());
 
@@ -349,13 +352,11 @@ public abstract class RangerBaseModelService<T extends 
XXDBBase, V extends Range
                                return Collections.emptyList();
                        }
                }
-               
-               String sortClause = 
searchUtil.constructSortClause(searchCriteria, sortFieldList);
-
-               String q = queryStr;
-               Query query = createQuery(q, sortClause, searchCriteria, 
searchFieldList, false);
 
-               List<T> resultList = 
getDao().executeQueryInSecurityContext(tEntityClass, query);               
+               String  sortClause = 
searchUtil.constructSortClause(searchCriteria, sortFieldList);
+               String  q          = searchCriteria.isDistinct() ? 
distinctQueryStr : queryStr;
+               Query   query      = createQuery(q, sortClause, searchCriteria, 
searchFieldList, false);
+               List<T> resultList = 
getDao().executeQueryInSecurityContext(tEntityClass, query);
 
                if (vList != null) {
                        vList.setResultSize(resultList.size());
@@ -398,15 +399,11 @@ public abstract class RangerBaseModelService<T extends 
XXDBBase, V extends Range
        }
 
        protected long getCountForSearchQuery(SearchFilter searchCriteria, 
List<SearchField> searchFieldList) {
+               String q     = searchCriteria.isDistinct() ? 
distinctCountQueryStr : countQueryStr;
+               Query  query = createQuery(q, null, searchCriteria, 
searchFieldList, true);
+               Long   count = 
getDao().executeCountQueryInSecurityContext(tEntityClass, query);
 
-               String q = countQueryStr;
-               Query query = createQuery(q, null, searchCriteria, 
searchFieldList, true);
-               Long count = 
getDao().executeCountQueryInSecurityContext(tEntityClass, query);
-
-               if (count == null) {
-                       return 0;
-               }
-               return count.longValue();
+               return (count == null) ? 0 : count.longValue();
        }
        
        protected Query createQuery(String searchString, String sortString, 
SearchFilter searchCriteria,
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
old mode 100644
new mode 100755
index a07fb9ea7..773fcb873
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
@@ -55,14 +55,23 @@ public class RangerGdsDataShareService extends 
RangerGdsBaseModelService<XXGdsDa
     public RangerGdsDataShareService() {
         super();
 
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, 
"obj.name",        SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,   
"obj.id",          SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.GUID      ,      
"obj.guid",        SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,      
"obj.isEnabled",   SearchField.DATA_TYPE.BOOLEAN, 
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,    
"d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL, 
"XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId 
and dshid.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,      
"dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, 
"XXGdsDataShareInDataset dshid", "obj.id = dshid.dataShareId"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,    
"p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL, 
"XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", 
"obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and 
dip.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,      
"dip.projectId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, 
"XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.id = 
dshid.dataShareId and dshid.datasetId = dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,         
  "obj.name",        SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, 
  "obj.name",        SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,           
  "obj.id",          SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.GUID      ,              
  "obj.guid",        SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,              
  "obj.isEnabled",   SearchField.DATA_TYPE.BOOLEAN, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,            
  "d.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", 
"obj.id = dshid.dataShareId and dshid.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,    
  "d.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataset 
d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID,              
  "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = 
dshid.dataShareId"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,            
  "p.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, 
XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and 
dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,    
  "p.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, 
XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and 
dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,              
  "dip.projectId",   SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, 
XXGdsDatasetInProject dip", "obj.id = dshid.dataShareId and dshid.datasetId = 
dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,            
  "s.name",          SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.FULL, "XXService s", "obj.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,    
  "s.name",          SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL, "XXService s", "obj.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,              
  "obj.serviceId",   SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,               
  "z.name",          SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.FULL, "XXSecurityZone z", "obj.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,       
  "z.name",          SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL, "XXSecurityZone z", "obj.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID,                 
  "obj.zoneId",      SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
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
old mode 100644
new mode 100755
index 747cc9f17..3cf4815c7
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
@@ -51,14 +51,23 @@ public class RangerGdsDatasetService extends 
RangerGdsBaseModelService<XXGdsData
     public RangerGdsDatasetService() {
         super();
 
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,    
"obj.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,      
"obj.id",            SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.GUID      ,      
"obj.guid",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,      
"obj.isEnabled",     SearchField.DATA_TYPE.BOOLEAN, 
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,    
"proj.name",         SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsProject proj", 
"obj.id = dip.datasetId and dip.projectId = proj.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,      
"dip.projectId",     SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = 
dip.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, 
"ds.name",           SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare 
dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,   
"dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = 
dshid.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,            
  "obj.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,    
  "obj.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID,              
  "obj.id",            SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.GUID      ,              
  "obj.guid",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,              
  "obj.isEnabled",     SearchField.DATA_TYPE.BOOLEAN, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,            
  "proj.name",         SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsProject proj", 
"obj.id = dip.datasetId and dip.projectId = proj.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,    
  "proj.name",         SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsProject 
proj", "obj.id = dip.datasetId and dip.projectId = proj.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,              
  "dip.projectId",     SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = 
dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,         
  "ds.name",           SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDataset ds XXGdsDataShareInDataset dshid, 
XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = 
dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, 
  "ds.name",           SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset ds XXGdsDataShareInDataset 
dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = 
dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,           
  "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = 
dshid.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,            
  "s.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare 
dsh, XXService s", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and 
dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,    
  "s.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare 
dsh, XXService s", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and 
dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,              
  "dsh.serviceId",     SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare 
dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,               
  "z.name",            SearchField.DATA_TYPE.STRING, 
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.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"));
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
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
old mode 100644
new mode 100755
index 8c0ddc65d..1da1456a6
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
@@ -51,14 +51,23 @@ public class RangerGdsProjectService extends 
RangerGdsBaseModelService<XXGdsProj
     public RangerGdsProjectService() {
         super();
 
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,    
"obj.name",         SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,      
"obj.id",           SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.GUID      ,      
"obj.guid",         SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,      
"obj.isEnabled",    SearchField.DATA_TYPE.BOOLEAN, 
SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,    
"d.name",           SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataset d", 
"obj.id = dip.projectId and dip.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,      
"dip.datasetId",    SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = 
dip.projectId"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, 
"dsh.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and 
dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,   
"dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dsid", "obj.id = dip.projectId and dip.datasetId = 
dshid.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,            
"obj.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,    
"obj.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,              
"obj.id",            SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.GUID      ,              
"obj.guid",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,              
"obj.isEnabled",     SearchField.DATA_TYPE.BOOLEAN, 
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,            
"d.name",            SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataset d", 
"obj.id = dip.projectId and dip.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,    
"d.name",            SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataset d", 
"obj.id = dip.projectId and dip.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID,              
"dip.datasetId",     SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = 
dip.projectId"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,         
"dsh.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and 
dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, 
"dsh.name",          SearchField.DATA_TYPE.STRING,  
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and 
dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,           
"dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, 
XXGdsDatasetInProject dip, XXGdsDataShareInDataset dsid", "obj.id = 
dip.projectId and dip.datasetId = dshid.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,            
"s.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = 
dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = 
dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,    
"s.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = 
dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = 
dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,              
"dsh.serviceId",     SearchField.DATA_TYPE.INTEGER, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and 
dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,               
"z.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = 
dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = 
dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,       
"z.name",            SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = 
dip.projectId and dip.datasetId = 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, "XXGdsDatasetInProject dip, 
XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = obj.id = 
dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = 
dsh.id"));
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));


Reply via email to