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

rmani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 8038af6b2 RANGER-4933: Ranger API to Summary View of DataShares in GDS
8038af6b2 is described below

commit 8038af6b22eb83eaf146ae23f499f28f1a78b6d7
Author: Radhika Kundam <[email protected]>
AuthorDate: Thu Oct 24 13:06:15 2024 -0700

    RANGER-4933: Ranger API to Summary View of DataShares in GDS
    
    Signed-off-by: Ramesh Mani <[email protected]>
---
 .../org/apache/ranger/plugin/model/RangerGds.java  | 50 ++++++++++++++++++++++
 .../apache/ranger/plugin/util/SearchFilter.java    |  2 +
 .../optimized/current/ranger_core_db_mysql.sql     |  1 +
 ...y_schedule-labels-keywords-in-x_gds_dataset.sql | 37 ++++++++++++++++
 .../optimized/current/ranger_core_db_oracle.sql    |  1 +
 ...y_schedule-labels-keywords-in-x_gds_dataset.sql | 34 +++++++++++++++
 .../optimized/current/ranger_core_db_postgres.sql  |  1 +
 ...y_schedule-labels-keywords-in-x_gds_dataset.sql | 42 ++++++++++++++++++
 .../current/ranger_core_db_sqlanywhere.sql         |  2 +
 ...y_schedule-labels-keywords-in-x_gds_dataset.sql | 28 ++++++++++++
 .../optimized/current/ranger_core_db_sqlserver.sql |  1 +
 ...y_schedule-labels-keywords-in-x_gds_dataset.sql | 34 +++++++++++++++
 .../java/org/apache/ranger/biz/GdsDBStore.java     |  3 ++
 .../org/apache/ranger/common/RangerSearchUtil.java | 17 +++++---
 .../org/apache/ranger/entity/XXGdsDataset.java     | 44 ++++++++++++++++++-
 .../main/java/org/apache/ranger/rest/GdsREST.java  |  3 ++
 .../ranger/service/RangerGdsDatasetService.java    |  9 ++++
 17 files changed, 302 insertions(+), 7 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 d582e420f..68216fd45 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
@@ -93,6 +93,8 @@ public class RangerGds {
         private RangerGdsObjectACL     acl;
         private RangerValiditySchedule validitySchedule;
         private String                 termsOfUse;
+        private List<String>           labels;
+        private List<String>           keywords;
 
         public RangerDataset() { }
 
@@ -112,6 +114,22 @@ public class RangerGds {
 
         public void setTermsOfUse(String termsOfUse) { this.termsOfUse = 
termsOfUse; }
 
+        public List<String> getLabels() {
+            return labels;
+        }
+
+        public void setLabels(List<String> labels) {
+            this.labels = labels;
+        }
+
+        public List<String> getKeywords() {
+            return keywords;
+        }
+
+        public void setKeywords(List<String> keywords) {
+            this.keywords = keywords;
+        }
+
         @Override
         public StringBuilder toString(StringBuilder sb) {
             sb.append("RangerDataset={");
@@ -122,6 +140,8 @@ public class RangerGds {
               .append("acl={").append(acl).append("} ")
               .append("validitySchedule={").append(validitySchedule).append("} 
")
               .append("termsOfUse={").append(termsOfUse).append("} ")
+              .append("labels={").append(validitySchedule).append("} ")
+              .append("keywords={").append(termsOfUse).append("} ")
               .append("}");
 
             return sb;
@@ -568,6 +588,9 @@ public class RangerGds {
         private Long                            projectsCount;
         private Long                            totalResourceCount;
         private List<DataShareInDatasetSummary> dataShares;
+        private RangerValiditySchedule          validitySchedule;
+        private List<String>                    labels;
+        private List<String>                    keywords;
 
         public DatasetSummary() {
             super();
@@ -631,6 +654,30 @@ public class RangerGds {
             this.aclPrincipalsCount = aclPrincipalsCount;
         }
 
+        public RangerValiditySchedule getValiditySchedule() {
+            return validitySchedule;
+        }
+
+        public void setValiditySchedule(RangerValiditySchedule 
validitySchedule) {
+            this.validitySchedule = validitySchedule;
+        }
+
+        public List<String> getLabels() {
+            return labels;
+        }
+
+        public void setLabels(List<String> labels) {
+            this.labels = labels;
+        }
+
+        public List<String> getKeywords() {
+            return keywords;
+        }
+
+        public void setKeywords(List<String> keywords) {
+            this.keywords = keywords;
+        }
+
         @Override
         public String toString() {
             return toString(new StringBuilder()).toString();
@@ -649,6 +696,9 @@ public class RangerGds {
               
.append("aclPrincipalsCount={").append(aclPrincipalsCount).append("} ")
               
.append("totalResourceCount={").append(totalResourceCount).append("} ")
               .append("dataShares={").append(dataShares).append("} ")
+              
.append("validitySchedule={").append(totalResourceCount).append("} ")
+              .append("labels={").append(totalResourceCount).append("} ")
+              .append("keywords={").append(totalResourceCount).append("} ")
               .append("}");
 
             return sb;
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
index 0da5f2aaf..6c5550bfa 100755
--- 
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
@@ -112,6 +112,8 @@ public class SearchFilter {
        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 DATASET_LABEL            = "datasetLabel";
+       public static final String DATASET_KEYWORD          = "datasetKeyword";
        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
diff --git a/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql 
b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
index 6c48c49f4..acec4f56a 100644
--- a/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
+++ b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
@@ -2042,6 +2042,7 @@ INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('072',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('073',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('074',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
+INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('075',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('DB_PATCHES',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
 
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('J10001',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
diff --git 
a/security-admin/db/mysql/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
 
b/security-admin/db/mysql/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
new file mode 100644
index 000000000..a1c631fa4
--- /dev/null
+++ 
b/security-admin/db/mysql/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
@@ -0,0 +1,37 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+drop procedure if exists 
add_validity_schedule_labels_keywords_in_x_gds_dataset();
+
+delimiter ;;
+create procedure add_validity_schedule_labels_keywords_in_x_gds_dataset() begin
+
+if not exists (select * from information_schema.columns where 
table_schema=database() and table_name = 'x_gds_dataset' and 
column_name='validity_schedule') then
+        ALTER TABLE x_gds_dataset ADD validity_schedule TEXT NULL DEFAULT NULL;
+end if;
+
+if not exists (select * from information_schema.columns where 
table_schema=database() and table_name = 'x_gds_dataset' and 
column_name='labels') then
+        ALTER TABLE x_gds_dataset ADD labels TEXT NULL DEFAULT NULL;
+end if;
+
+if not exists (select * from information_schema.columns where 
table_schema=database() and table_name = 'x_gds_dataset' and 
column_name='keywords') then
+        ALTER TABLE x_gds_dataset ADD keywords TEXT NULL DEFAULT NULL;
+end if;
+
+end;;
+
+delimiter ;
+
+call add_validity_schedule_labels_keywords_in_x_gds_dataset();
\ No newline at end of file
diff --git 
a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql 
b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
index ed6d20b3d..593cffe56 100644
--- a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
+++ b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
@@ -1989,6 +1989,7 @@ INSERT INTO x_db_version_h 
(id,version,inst_at,inst_by,updated_at,updated_by,act
 INSERT INTO x_db_version_h 
(id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
(X_DB_VERSION_H_SEQ.nextval, '066',sys_extract_utc(systimestamp),'Ranger 
3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h 
(id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
(X_DB_VERSION_H_SEQ.nextval, '073',sys_extract_utc(systimestamp),'Ranger 
3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h 
(id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
(X_DB_VERSION_H_SEQ.nextval, '074',sys_extract_utc(systimestamp),'Ranger 
3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
+INSERT INTO x_db_version_h 
(id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
(X_DB_VERSION_H_SEQ.nextval, '075',sys_extract_utc(systimestamp),'Ranger 
3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h 
(id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
(X_DB_VERSION_H_SEQ.nextval, 'DB_PATCHES',sys_extract_utc(systimestamp),'Ranger 
1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 
 INSERT INTO x_user_module_perm 
(id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) 
VALUES 
(X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('admin'),getModulesIdByName('Reports'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1);
diff --git 
a/security-admin/db/oracle/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
 
b/security-admin/db/oracle/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
new file mode 100644
index 000000000..1dc874b03
--- /dev/null
+++ 
b/security-admin/db/oracle/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
@@ -0,0 +1,34 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+DECLARE
+        v_count number:=0;
+BEGIN
+        select count(*) into v_count from user_tab_cols where 
table_name='X_GDS_DATASET' and column_name='VALIDITY_SCHEDULE';
+        if (v_count = 0) then
+                execute immediate 'ALTER TABLE x_gds_dataset ADD 
validity_schedule CLOB DEFAULT NULL NULL';
+        end if;
+
+        select count(*) into v_count from user_tab_cols where 
table_name='X_GDS_DATASET' and column_name='LABELS';
+        if (v_count = 0) then
+                execute immediate 'ALTER TABLE x_gds_dataset ADD labels CLOB 
DEFAULT NULL NULL';
+        end if;
+
+        select count(*) into v_count from user_tab_cols where 
table_name='X_GDS_DATASET' and column_name='KEYWORDS';
+        if (v_count = 0) then
+                execute immediate 'ALTER TABLE x_gds_dataset ADD keywords CLOB 
DEFAULT NULL NULL';
+        end if;
+        commit;
+END;/
\ No newline at end of file
diff --git 
a/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql 
b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
index 34a092e89..523625b69 100644
--- a/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
+++ b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
@@ -2148,6 +2148,7 @@ INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('072',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('073',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('074',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
+INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('075',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('DB_PATCHES',current_timestamp,'Ranger 
1.0.0',current_timestamp,'localhost','Y');
 
 INSERT INTO x_user_module_perm 
(user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) 
VALUES
diff --git 
a/security-admin/db/postgres/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
 
b/security-admin/db/postgres/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
new file mode 100644
index 000000000..c9abbc35a
--- /dev/null
+++ 
b/security-admin/db/postgres/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
@@ -0,0 +1,42 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+select 'delimiter start';
+CREATE OR REPLACE FUNCTION 
add_validity_schedule_labels_keywords_in_x_gds_dataset()
+RETURNS void AS $$
+DECLARE
+ v_column_exists integer := 0;
+BEGIN
+ select count(*) into v_column_exists from pg_attribute where attrelid 
in(select oid from pg_class where relname='x_gds_dataset') and 
attname='validity_schedule';
+ IF v_column_exists = 0 THEN
+  ALTER TABLE x_gds_dataset ADD COLUMN validity_schedule TEXT DEFAULT NULL 
NULL;
+ END IF;
+
+ select count(*) into v_column_exists from pg_attribute where attrelid 
in(select oid from pg_class where relname='x_gds_dataset') and attname='labels';
+ IF v_column_exists = 0 THEN
+  ALTER TABLE x_gds_dataset ADD COLUMN labels TEXT DEFAULT NULL NULL;
+ END IF;
+
+ select count(*) into v_column_exists from pg_attribute where attrelid 
in(select oid from pg_class where relname='x_gds_dataset') and 
attname='keywords';
+ IF v_column_exists = 0 THEN
+  ALTER TABLE x_gds_dataset ADD COLUMN keywords TEXT DEFAULT NULL NULL;
+ END IF;
+END;
+$$ LANGUAGE plpgsql;
+select 'delimiter end';
+
+select add_validity_schedule_labels_keywords_in_x_gds_dataset();
+select 'delimiter end';
+commit;
\ No newline at end of file
diff --git 
a/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
 
b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
index 72a9afb83..fa9832314 100644
--- 
a/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
+++ 
b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
@@ -2288,6 +2288,8 @@ INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active
 GO
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('074',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 GO
+INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('075',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
+GO
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('DB_PATCHES',CURRENT_TIMESTAMP,'Ranger 
1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 GO
 INSERT INTO x_user_module_perm 
(user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) 
VALUES 
(dbo.getXportalUIdByLoginId('admin'),dbo.getModulesIdByName('Reports'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,dbo.getXportalUIdByLoginId('admin'),dbo.getXportalUIdByLoginId('admin'),1);
diff --git 
a/security-admin/db/sqlanywhere/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
 
b/security-admin/db/sqlanywhere/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
new file mode 100644
index 000000000..939e8ea3a
--- /dev/null
+++ 
b/security-admin/db/sqlanywhere/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
@@ -0,0 +1,28 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+IF NOT EXISTS(select * from SYS.SYSCOLUMNS where tname = 'x_gds_dataset' and 
cname = 'validity_schedule') THEN
+               ALTER TABLE dbo.x_gds_dataset ADD validity_schedule TEXT 
DEFAULT NULL NULL;
+END IF;
+GO
+IF NOT EXISTS(select * from SYS.SYSCOLUMNS where tname = 'x_gds_dataset' and 
cname = 'labels') THEN
+               ALTER TABLE dbo.x_gds_dataset ADD labels TEXT DEFAULT NULL NULL;
+END IF;
+GO
+IF NOT EXISTS(select * from SYS.SYSCOLUMNS where tname = 'x_gds_dataset' and 
cname = 'keywords') THEN
+               ALTER TABLE dbo.x_gds_dataset ADD keywords TEXT DEFAULT NULL 
NULL;
+END IF;
+GO
+exit
\ No newline at end of file
diff --git 
a/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql 
b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
index 70a2e00cd..a0e47004b 100644
--- a/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
+++ b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
@@ -4145,6 +4145,7 @@ INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('066',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('073',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('074',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
+INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('075',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h 
(version,inst_at,inst_by,updated_at,updated_by,active) VALUES 
('DB_PATCHES',CURRENT_TIMESTAMP,'Ranger 
1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_user_module_perm 
(user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) 
VALUES 
(dbo.getXportalUIdByLoginId('admin'),dbo.getModulesIdByName('Reports'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,dbo.getXportalUIdByLoginId('admin'),dbo.getXportalUIdByLoginId('admin'),1);
 INSERT INTO x_user_module_perm 
(user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) 
VALUES (dbo.getXportalUIdByLoginId('admin'),dbo.getModulesIdByName('Resource 
Based 
Policies'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,dbo.getXportalUIdByLoginId('admin'),dbo.getXportalUIdByLoginId('admin'),1);
diff --git 
a/security-admin/db/sqlserver/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
 
b/security-admin/db/sqlserver/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
new file mode 100644
index 000000000..6da85914b
--- /dev/null
+++ 
b/security-admin/db/sqlserver/patches/075-add-validity_schedule-labels-keywords-in-x_gds_dataset.sql
@@ -0,0 +1,34 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+GO
+IF NOT EXISTS(select * from INFORMATION_SCHEMA.columns where table_name = 
'x_gds_dataset' and column_name = 'validity_schedule')
+BEGIN
+       ALTER TABLE [dbo].[x_gds_dataset] ADD [validity_schedule] 
[nvarchar](max) DEFAULT NULL NULL;
+END
+GO
+GO
+IF NOT EXISTS(select * from INFORMATION_SCHEMA.columns where table_name = 
'x_gds_dataset' and column_name = 'labels')
+BEGIN
+       ALTER TABLE [dbo].[x_gds_dataset] ADD [labels] [nvarchar](max) DEFAULT 
NULL NULL;
+END
+GO
+GO
+IF NOT EXISTS(select * from INFORMATION_SCHEMA.columns where table_name = 
'x_gds_dataset' and column_name = 'keywords')
+BEGIN
+       ALTER TABLE [dbo].[x_gds_dataset] ADD [keywords] [nvarchar](max) 
DEFAULT NULL NULL;
+END
+GO
+exit
\ No newline at end of file
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 9bb946996..768192e84 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
@@ -1504,6 +1504,9 @@ public class GdsDBStore extends AbstractGdsStore {
             datasetSummary.setGuid(dataset.getGuid());
             datasetSummary.setVersion(dataset.getVersion());
             datasetSummary.setPermissionForCaller(permissionForCaller);
+            datasetSummary.setValiditySchedule(dataset.getValiditySchedule());
+            datasetSummary.setLabels(dataset.getLabels());
+            datasetSummary.setKeywords(dataset.getKeywords());
 
             ret.add(datasetSummary);
 
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
index 42eb7dfaa..a6c6746b3 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
@@ -124,6 +124,8 @@ public class RangerSearchUtil extends SearchUtil {
                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.DATASET_LABEL, 
request.getParameter(SearchFilter.DATASET_LABEL));
+               ret.setParam(SearchFilter.DATASET_KEYWORD, 
request.getParameter(SearchFilter.DATASET_KEYWORD));
                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));
@@ -365,7 +367,7 @@ public class RangerSearchUtil extends SearchUtil {
                                                whereClause.append(" and 
").append(searchField.getCustomCondition());
                                        }
                                }
-                       } else if (isMultiValue && searchField.getDataType() == 
SearchField.DATA_TYPE.STR_LIST) {
+                       } else if (searchField.getDataType() == 
SearchField.DATA_TYPE.STR_LIST || (isMultiValue && searchField.getDataType() == 
SearchField.DATA_TYPE.STRING)) {
                                List<String> strValueList = new ArrayList<>();
 
                                for (Object value : multiValue) {
@@ -386,8 +388,9 @@ public class RangerSearchUtil extends SearchUtil {
                                                                        
whereClause.append(" or ");
                                                                }
 
-                                                               
whereClause.append(searchField.getFieldName()).append("= :")
-                                                                          
.append(searchField.getClientFieldName()).append("_").append(count);
+                                                               
whereClause.append("LOWER(").append(searchField.getFieldName()).append(")")
+                                                                               
.append(getSqlOperator(searchField.getSearchType()))
+                                                                               
.append(":").append(searchField.getClientFieldName()).append("_").append(count);
                                                        }
 
                                                        if (strValueList.size() 
> 1) {
@@ -513,7 +516,7 @@ public class RangerSearchUtil extends SearchUtil {
                                                
query.setParameter(searchField.getClientFieldName(), intValueList);
                                        }
                                }
-                       } else if (isMultiValue && searchField.getDataType() == 
SearchField.DATA_TYPE.STR_LIST) {
+                       } else if (searchField.getDataType() == 
SearchField.DATA_TYPE.STR_LIST || (isMultiValue && searchField.getDataType() == 
SearchField.DATA_TYPE.STRING)) {
                                List<String> strValueList = new ArrayList<>();
 
                                for (Object value : multiValue) {
@@ -523,7 +526,11 @@ public class RangerSearchUtil extends SearchUtil {
                                if (!strValueList.isEmpty()) {
                                        if (strValueList.size() <= 
dbMinInListLength) {
                                                for (int idx = 0; idx < 
strValueList.size(); idx++) {
-                                                       
query.setParameter(searchField.getClientFieldName() + "_" + idx, 
strValueList.get(idx));
+                                                       if 
(searchField.getSearchType() == SearchField.SEARCH_TYPE.FULL) {
+                                                               
query.setParameter(searchField.getClientFieldName() + "_" + idx, 
strValueList.get(idx).trim().toLowerCase());
+                                                       } else {
+                                                               
query.setParameter(searchField.getClientFieldName() + "_" + idx, "%" + 
strValueList.get(idx).trim().toLowerCase() + "%");
+                                                       }
                                                }
                                        } else {
                                                
query.setParameter(searchField.getClientFieldName(), strValueList);
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXGdsDataset.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXGdsDataset.java
index 6fdc5be95..7a1404d22 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXGdsDataset.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXGdsDataset.java
@@ -67,6 +67,15 @@ public class XXGdsDataset extends XXDBBase implements 
Serializable {
     @Column(name = "additional_info")
     protected String additionalInfo;
 
+    @Column(name = "validity_schedule")
+    protected String validitySchedule;
+
+    @Column(name = "labels")
+    protected String labels;
+
+    @Column(name = "keywords")
+    protected String keywords;
+
 
     @Override
     public void setId(Long id) { this.id = id; }
@@ -110,12 +119,37 @@ public class XXGdsDataset extends XXDBBase implements 
Serializable {
 
     public void setAdditionalInfo(String additionalInfo) { this.additionalInfo 
= additionalInfo; }
 
+    public String getValiditySchedule() {
+        return validitySchedule;
+    }
+
+    public void setValiditySchedule(String validitySchedule) {
+        this.validitySchedule = validitySchedule;
+    }
+
+    public String getLabels() {
+        return labels;
+    }
+
+    public void setLabels(String labels) {
+        this.labels = labels;
+    }
+
+    public String getKeywords() {
+        return keywords;
+    }
+
+    public void setKeywords(String keywords) {
+        this.keywords = keywords;
+    }
+
     @Override
     public int getMyClassType() { return AppConstants.CLASS_TYPE_GDS_DATASET; }
 
     @Override
     public int hashCode() {
-        return Objects.hash(id, guid, version, isEnabled, name, description, 
acl, termsOfUse, options, additionalInfo);
+        return Objects.hash(id, guid, version, isEnabled, name, description, 
acl, termsOfUse, options, additionalInfo,
+                validitySchedule, labels, keywords);
     }
 
     @Override
@@ -139,7 +173,10 @@ public class XXGdsDataset extends XXDBBase implements 
Serializable {
                Objects.equals(acl, other.acl) &&
                Objects.equals(termsOfUse, other.termsOfUse) &&
                Objects.equals(options, other.options) &&
-               Objects.equals(additionalInfo, other.additionalInfo);
+               Objects.equals(additionalInfo, other.additionalInfo) &&
+               Objects.equals(validitySchedule, other.validitySchedule) &&
+               Objects.equals(labels, other.labels) &&
+               Objects.equals(keywords, other.keywords);
     }
 
     @Override
@@ -161,6 +198,9 @@ public class XXGdsDataset extends XXDBBase implements 
Serializable {
           .append("termsOfUse={").append(termsOfUse).append("} ")
           .append("options={").append(options).append("} ")
           .append("additionalInfo={").append(additionalInfo).append("} ")
+          .append("validitySchedule={").append(validitySchedule).append("} ")
+          .append("labels={").append(labels).append("} ")
+          .append("keywords={").append(keywords).append("} ")
           .append(" }");
 
         return sb;
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 525a5eca3..c66429834 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
@@ -361,6 +361,9 @@ public class GdsREST {
 
             filter = searchUtil.getSearchFilter(request, 
datasetService.sortFields);
 
+            searchUtil.extractStringList(request, filter, 
SearchFilter.DATASET_LABEL, "Dataset Label List", "datasetLabels", null, null);
+            searchUtil.extractStringList(request, filter, 
SearchFilter.DATASET_KEYWORD, "Dataset Keyword List", "datasetKeywords", null, 
null);
+
             ret = gdsStore.searchDatasets(filter);
         } catch(WebApplicationException excp) {
             throw excp;
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 659c07f16..0e3b733b1 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
@@ -30,6 +30,7 @@ import org.apache.ranger.common.view.VTrxLogAttr;
 import org.apache.ranger.entity.*;
 import org.apache.ranger.plugin.model.RangerGds;
 import org.apache.ranger.plugin.model.RangerGds.RangerDataset;
+import org.apache.ranger.plugin.model.RangerValiditySchedule;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.view.RangerGdsVList.RangerDatasetList;
 import org.apache.ranger.view.VXMessage;
@@ -69,6 +70,8 @@ public class RangerGdsDatasetService extends 
RangerGdsBaseModelService<XXGdsData
         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.CREATED_BY,              
"obj.addedByUserId", SearchField.DATA_TYPE.INTEGER,  
SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_LABEL,           
"obj.labels",        SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_KEYWORD,         
"obj.keywords",      SearchField.DATA_TYPE.STRING, 
SearchField.SEARCH_TYPE.PARTIAL));
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
@@ -176,6 +179,9 @@ public class RangerGdsDatasetService extends 
RangerGdsBaseModelService<XXGdsData
         xObj.setTermsOfUse(vObj.getTermsOfUse());
         xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
         xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+        
xObj.setValiditySchedule(JsonUtils.objectToJson(vObj.getValiditySchedule()));
+        xObj.setLabels(JsonUtils.listToJson(vObj.getLabels()));
+        xObj.setKeywords(JsonUtils.listToJson(vObj.getKeywords()));
 
         return xObj;
     }
@@ -191,6 +197,9 @@ public class RangerGdsDatasetService extends 
RangerGdsBaseModelService<XXGdsData
         vObj.setTermsOfUse(xObj.getTermsOfUse());
         vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
         
vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+        
vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValiditySchedule(), 
RangerValiditySchedule.class));
+        vObj.setLabels(JsonUtils.jsonToListString(xObj.getLabels()));
+        vObj.setKeywords(JsonUtils.jsonToListString(xObj.getKeywords()));
 
         return vObj;
     }


Reply via email to