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 d582e420f9..68216fd45e 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 static class RangerDataset extends RangerGdsBaseModelObject implements ja private RangerGdsObjectACL acl; private RangerValiditySchedule validitySchedule; private String termsOfUse; + private List labels; + private List keywords; public RangerDataset() { } @@ -112,6 +114,22 @@ public RangerDataset() { } public void setTermsOfUse(String termsOfUse) { this.termsOfUse = termsOfUse; } + public List getLabels() { + return labels; + } + + public void setLabels(List labels) { + this.labels = labels; + } + + public List getKeywords() { + return keywords; + } + + public void setKeywords(List keywords) { + this.keywords = keywords; + } + @Override public StringBuilder toString(StringBuilder sb) { sb.append("RangerDataset={"); @@ -122,6 +140,8 @@ public StringBuilder toString(StringBuilder sb) { .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 static class DatasetSummary extends RangerBaseModelObject implements java private Long projectsCount; private Long totalResourceCount; private List dataShares; + private RangerValiditySchedule validitySchedule; + private List labels; + private List keywords; public DatasetSummary() { super(); @@ -631,6 +654,30 @@ public void setAclPrincipalsCount(Map aclPrincipalsCount this.aclPrincipalsCount = aclPrincipalsCount; } + public RangerValiditySchedule getValiditySchedule() { + return validitySchedule; + } + + public void setValiditySchedule(RangerValiditySchedule validitySchedule) { + this.validitySchedule = validitySchedule; + } + + public List getLabels() { + return labels; + } + + public void setLabels(List labels) { + this.labels = labels; + } + + public List getKeywords() { + return keywords; + } + + public void setKeywords(List keywords) { + this.keywords = keywords; + } + @Override public String toString() { return toString(new StringBuilder()).toString(); @@ -649,6 +696,9 @@ public StringBuilder toString(StringBuilder sb) { .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 0da5f2aafd..6c5550bfa7 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 6c48c49f47..acec4f56a1 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 0000000000..a1c631fa46 --- /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 ed6d20b3d3..593cffe56e 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 0000000000..1dc874b032 --- /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 34a092e89e..523625b694 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 0000000000..c9abbc35a9 --- /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 72a9afb83b..fa98323147 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 0000000000..939e8ea3af --- /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 70a2e00cde..a0e47004b3 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 0000000000..6da85914ba --- /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 9bb9469967..768192e842 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 @@ private List toDatasetSummary(List datasets, GdsP 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 42eb7dfaa5..a6c6746b38 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 SearchFilter getSearchFilter(@Nonnull HttpServletRequest request, List strValueList = new ArrayList<>(); for (Object value : multiValue) { @@ -386,8 +388,9 @@ private StringBuilder buildWhereClause(SearchFilter searchCriteria, 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 @@ protected void resolveQueryParams(Query query, SearchFilter searchCriteria, List 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 strValueList = new ArrayList<>(); for (Object value : multiValue) { @@ -523,7 +526,11 @@ protected void resolveQueryParams(Query query, SearchFilter searchCriteria, List 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 6fdc5be959..7a1404d229 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 boolean equals(Object obj) { 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 StringBuilder toString(StringBuilder sb) { .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 525a5eca34..c664298342 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 PList searchDatasets(@Context HttpServletRequest request) 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 659c07f16c..0e3b733b1a 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.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 RangerGdsDatasetService() { 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 @@ protected XXGdsDataset mapViewToEntityBean(RangerDataset vObj, XXGdsDataset xObj 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 @@ protected RangerDataset mapEntityToViewBean(RangerDataset vObj, XXGdsDataset xOb 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; }