You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2025/01/13 10:12:50 UTC
(ranger) 12/14: RANGER-5061: checkstyle compliance updates - security-admin org.apache.ranger.service (#503)
This is an automated email from the ASF dual-hosted git repository.
pradeep pushed a commit to branch RANGER-5061_master
in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 942b3ce1ba11f84233edc7d609d62b7ed2121388
Author: PradeeP AgrawaL <pr...@apache.org>
AuthorDate: Sat Jan 11 11:17:35 2025 +0530
RANGER-5061: checkstyle compliance updates - security-admin org.apache.ranger.service (#503)
---
.../service/AbstractAuditedResourceService.java | 396 +++---
.../service/AbstractBaseResourceService.java | 1490 +++++++++-----------
.../apache/ranger/service/AuthSessionService.java | 266 ++--
.../ranger/service/PublicAPIServiceBase.java | 35 +-
.../apache/ranger/service/RangerAuditFields.java | 28 +-
.../ranger/service/RangerAuditedModelService.java | 404 +++---
.../ranger/service/RangerBaseModelService.java | 847 ++++++-----
.../ranger/service/RangerDataHistService.java | 239 ++--
.../ranger/service/RangerGdsBaseModelService.java | 18 +-
.../RangerGdsDataShareInDatasetService.java | 162 +--
.../ranger/service/RangerGdsDataShareService.java | 189 ++-
.../service/RangerGdsDatasetInProjectService.java | 146 +-
.../ranger/service/RangerGdsDatasetService.java | 123 +-
.../ranger/service/RangerGdsProjectService.java | 101 +-
.../service/RangerGdsSharedResourceService.java | 175 ++-
.../ranger/service/RangerPluginInfoService.java | 521 +++----
.../ranger/service/RangerPolicyLabelsService.java | 57 +-
.../apache/ranger/service/RangerPolicyService.java | 70 +-
.../ranger/service/RangerPolicyServiceBase.java | 455 +++---
.../service/RangerPolicyWithAssignedIdService.java | 74 +-
.../apache/ranger/service/RangerRoleService.java | 127 +-
.../ranger/service/RangerRoleServiceBase.java | 42 +-
.../service/RangerSecurityZoneServiceBase.java | 63 +-
.../service/RangerSecurityZoneServiceService.java | 243 ++--
.../ranger/service/RangerServiceDefService.java | 141 +-
.../service/RangerServiceDefServiceBase.java | 1490 ++++++++++----------
.../RangerServiceDefWithAssignedIdService.java | 47 +-
.../service/RangerServiceResourceService.java | 80 +-
.../service/RangerServiceResourceServiceBase.java | 121 +-
.../RangerServiceResourceWithTagsService.java | 123 +-
.../RangerServiceResourceWithTagsServiceBase.java | 59 +-
.../ranger/service/RangerServiceService.java | 311 ++--
.../ranger/service/RangerServiceServiceBase.java | 293 ++--
.../RangerServiceWithAssignedIdService.java | 80 +-
.../apache/ranger/service/RangerTagDefService.java | 145 +-
.../ranger/service/RangerTagDefServiceBase.java | 212 +--
.../service/RangerTagResourceMapService.java | 248 ++--
.../service/RangerTagResourceMapServiceBase.java | 64 +-
.../apache/ranger/service/RangerTagService.java | 253 ++--
.../ranger/service/RangerTagServiceBase.java | 224 ++-
.../ranger/service/RangerTransactionService.java | 73 +-
.../ranger/service/RangerTrxLogV2Service.java | 452 +++---
.../org/apache/ranger/service/UserService.java | 554 ++++----
.../org/apache/ranger/service/UserServiceBase.java | 65 +-
.../apache/ranger/service/XAccessAuditService.java | 379 ++---
.../ranger/service/XAccessAuditServiceBase.java | 155 +-
.../org/apache/ranger/service/XAssetService.java | 385 +++--
.../apache/ranger/service/XAssetServiceBase.java | 123 +-
.../apache/ranger/service/XAuditMapService.java | 142 +-
.../ranger/service/XAuditMapServiceBase.java | 122 +-
.../ranger/service/XCredentialStoreService.java | 24 +-
.../service/XCredentialStoreServiceBase.java | 79 +-
.../apache/ranger/service/XGroupGroupService.java | 24 +-
.../ranger/service/XGroupGroupServiceBase.java | 83 +-
.../ranger/service/XGroupPermissionService.java | 160 +--
.../service/XGroupPermissionServiceBase.java | 77 +-
.../org/apache/ranger/service/XGroupService.java | 266 ++--
.../apache/ranger/service/XGroupServiceBase.java | 169 ++-
.../apache/ranger/service/XGroupUserService.java | 401 +++---
.../ranger/service/XGroupUserServiceBase.java | 147 +-
.../apache/ranger/service/XModuleDefService.java | 327 ++---
.../ranger/service/XModuleDefServiceBase.java | 111 +-
.../org/apache/ranger/service/XPermMapService.java | 235 +--
.../apache/ranger/service/XPermMapServiceBase.java | 197 ++-
.../ranger/service/XPolicyExportAuditService.java | 55 +-
.../service/XPolicyExportAuditServiceBase.java | 121 +-
.../org/apache/ranger/service/XPolicyService.java | 1393 +++++++++---------
.../apache/ranger/service/XPortalUserService.java | 318 +++--
.../ranger/service/XPortalUserServiceBase.java | 130 +-
.../apache/ranger/service/XRepositoryService.java | 183 ++-
.../apache/ranger/service/XResourceService.java | 719 +++++-----
.../ranger/service/XResourceServiceBase.java | 231 ++-
.../ranger/service/XUgsyncAuditInfoService.java | 223 ++-
.../service/XUgsyncAuditInfoServiceBase.java | 66 +-
.../ranger/service/XUserPermissionService.java | 157 ++-
.../ranger/service/XUserPermissionServiceBase.java | 183 ++-
.../org/apache/ranger/service/XUserService.java | 483 +++----
.../apache/ranger/service/XUserServiceBase.java | 179 ++-
.../ranger/service/filter/RangerRESTAPIFilter.java | 459 +++---
79 files changed, 9665 insertions(+), 10147 deletions(-)
diff --git a/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java
index b39b83293..fdda33f33 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java
@@ -17,7 +17,7 @@
* under the License.
*/
- package org.apache.ranger.service;
+package org.apache.ranger.service;
import org.apache.commons.lang3.StringUtils;
import org.apache.ranger.common.JSONUtil;
@@ -35,203 +35,211 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
-import java.util.*;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import static org.apache.ranger.service.RangerBaseModelService.OPERATION_CREATE_CONTEXT;
import static org.apache.ranger.service.RangerBaseModelService.OPERATION_DELETE_CONTEXT;
import static org.apache.ranger.service.RangerBaseModelService.OPERATION_UPDATE_CONTEXT;
public abstract class AbstractAuditedResourceService<T extends XXDBBase, V extends VXDataObject> extends AbstractBaseResourceService<T, V> {
- protected static final Logger logger = LoggerFactory.getLogger(AbstractAuditedResourceService.class);
-
- @Autowired
- JSONUtil jsonUtil;
-
- @Autowired
- RangerEnumUtil xaEnumUtil;
-
- protected final Map<String, VTrxLogAttr> trxLogAttrs = new HashMap<>();
- protected final String hiddenPasswordString;
- private final int classType;
- private final int parentClassType;
- private final List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
-
- protected AbstractAuditedResourceService(int classType) {
- this(classType, -1);
- }
-
- protected AbstractAuditedResourceService(int classType, int parentClassType) {
- this.classType = classType;
- this.parentClassType = parentClassType;
- this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
- }
-
- @PostConstruct
- public void init() {
- for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
- if (vTrxLog.isObjName()) {
- objNameAttrs.add(vTrxLog);
- }
- }
-
- if (objNameAttrs.isEmpty()) {
- objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
- }
- }
-
- public void createTransactionLog(XXTrxLogV2 trxLog) {
- bizUtil.createTrxLog(Collections.singletonList(trxLog));
- }
-
- public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
- try {
- ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
- if("Password".equalsIgnoreCase(attrName)) {
- oldValue = hiddenPasswordString;
- newValue = hiddenPasswordString;
- }
-
- objChangeInfo.addAttribute(attrName, oldValue, newValue);
-
- trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
- } catch (Exception excp) {
- logger.warn("failed to convert attribute change info to json");
- }
-
- bizUtil.createTrxLog(Collections.singletonList(trxLog));
- }
-
- public void createTransactionLog(V obj, V oldObj, int action, Long userId) {
- List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
-
- if (trxLogList != null) {
- for (XXTrxLogV2 trxLog : trxLogList) {
- trxLog.setAddedByUserId(userId);
- }
-
- bizUtil.createTrxLog(trxLogList);
- }
-
- createTransactionLog(obj, null, action);
- }
-
- public void createTransactionLog(V obj, V oldObj, int action) {
- List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
-
- if (trxLogList != null) {
- bizUtil.createTrxLog(trxLogList);
- }
- }
-
- public List<XXTrxLogV2> getTransactionLog(V obj, V oldObj, int action) {
- if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
- return null;
- }
-
- List<XXTrxLogV2> trxLogList = new ArrayList<>();
-
- try {
- ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-
- for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
- processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
- }
-
- if(objChangeInfo.getAttributes() != null && objChangeInfo.getAttributes().size() > 0) {
- for(AttributeChangeInfo changeInfo : objChangeInfo.getAttributes()) {
- if("Password".equalsIgnoreCase(changeInfo.getAttributeName())) {
- changeInfo.setNewValue(hiddenPasswordString);
- changeInfo.setOldValue(hiddenPasswordString);
- }
- }
- trxLogList.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
- }
- } catch (Exception e) {
- logger.warn("failed to get transaction log for object: type=" + obj.getClass().getName() + ", id=" + obj.getId(), e);
- }
-
- return trxLogList;
- }
-
- public String getObjectName(V obj) {
- String ret = null;
-
- for (VTrxLogAttr attr : objNameAttrs) {
- ret = attr.getAttrValue(obj, xaEnumUtil);
-
- if (StringUtils.isNotBlank(ret)) {
- break;
- }
- }
-
- return ret;
- }
-
- public int getParentObjectType(V obj, V oldObj) {
- return parentClassType;
- }
-
- public String getParentObjectName(V obj, V oldObj) {
- return null;
- }
-
- public Long getParentObjectId(V obj, V oldObj) {
- return null;
- }
-
- public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
- return false;
- }
-
- public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
- return trxLogAttr.getAttrValue(obj, xaEnumUtil);
- }
-
- private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
- if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
- return;
- }
-
- String value = getTrxLogAttrValue(obj, trxLogAttr);
-
- if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
- return;
- }
-
- final String prevValue;
- final String newValue;
-
- if (action == OPERATION_CREATE_CONTEXT) {
- prevValue = null;
- newValue = value;
- } else if (action == OPERATION_DELETE_CONTEXT) {
- prevValue = value;
- newValue = null;
- } else if (action == OPERATION_UPDATE_CONTEXT) {
- prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
- newValue = value;
- } else {
- prevValue = null;
- newValue = null;
- }
-
- if ((StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue)) || StringUtils.equals(prevValue, newValue)) {
- return;
- }
-
- objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
- }
-
- private String toActionString(int action) {
- switch (action) {
- case OPERATION_CREATE_CONTEXT:
- return "create";
- case OPERATION_UPDATE_CONTEXT:
- return "update";
- case OPERATION_DELETE_CONTEXT:
- return "delete";
- }
-
- return "unknown";
- }
+ protected static final Logger logger = LoggerFactory.getLogger(AbstractAuditedResourceService.class);
+
+ protected final Map<String, VTrxLogAttr> trxLogAttrs = new HashMap<>();
+ protected final String hiddenPasswordString;
+
+ private final int classType;
+ private final int parentClassType;
+ private final List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
+
+ @Autowired
+ JSONUtil jsonUtil;
+
+ @Autowired
+ RangerEnumUtil xaEnumUtil;
+
+ protected AbstractAuditedResourceService(int classType) {
+ this(classType, -1);
+ }
+
+ protected AbstractAuditedResourceService(int classType, int parentClassType) {
+ this.classType = classType;
+ this.parentClassType = parentClassType;
+ this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
+ }
+
+ @PostConstruct
+ public void init() {
+ for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
+ if (vTrxLog.isObjName()) {
+ objNameAttrs.add(vTrxLog);
+ }
+ }
+
+ if (objNameAttrs.isEmpty()) {
+ objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
+ }
+ }
+
+ public void createTransactionLog(XXTrxLogV2 trxLog) {
+ bizUtil.createTrxLog(Collections.singletonList(trxLog));
+ }
+
+ public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
+ try {
+ ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
+
+ if ("Password".equalsIgnoreCase(attrName)) {
+ oldValue = hiddenPasswordString;
+ newValue = hiddenPasswordString;
+ }
+
+ objChangeInfo.addAttribute(attrName, oldValue, newValue);
+
+ trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
+ } catch (Exception excp) {
+ logger.warn("failed to convert attribute change info to json");
+ }
+
+ bizUtil.createTrxLog(Collections.singletonList(trxLog));
+ }
+
+ public void createTransactionLog(V obj, V oldObj, int action, Long userId) {
+ List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
+
+ if (trxLogList != null) {
+ for (XXTrxLogV2 trxLog : trxLogList) {
+ trxLog.setAddedByUserId(userId);
+ }
+
+ bizUtil.createTrxLog(trxLogList);
+ }
+
+ createTransactionLog(obj, null, action);
+ }
+
+ public void createTransactionLog(V obj, V oldObj, int action) {
+ List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
+
+ if (trxLogList != null) {
+ bizUtil.createTrxLog(trxLogList);
+ }
+ }
+
+ public List<XXTrxLogV2> getTransactionLog(V obj, V oldObj, int action) {
+ if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
+ return null;
+ }
+
+ List<XXTrxLogV2> trxLogList = new ArrayList<>();
+
+ try {
+ ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
+
+ for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
+ processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
+ }
+
+ if (objChangeInfo.getAttributes() != null && !objChangeInfo.getAttributes().isEmpty()) {
+ for (AttributeChangeInfo changeInfo : objChangeInfo.getAttributes()) {
+ if ("Password".equalsIgnoreCase(changeInfo.getAttributeName())) {
+ changeInfo.setNewValue(hiddenPasswordString);
+ changeInfo.setOldValue(hiddenPasswordString);
+ }
+ }
+
+ trxLogList.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
+ }
+ } catch (Exception e) {
+ logger.warn("failed to get transaction log for object: type={}, id={}", obj.getClass().getName(), obj.getId(), e);
+ }
+
+ return trxLogList;
+ }
+
+ public String getObjectName(V obj) {
+ String ret = null;
+
+ for (VTrxLogAttr attr : objNameAttrs) {
+ ret = attr.getAttrValue(obj, xaEnumUtil);
+
+ if (StringUtils.isNotBlank(ret)) {
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+ public int getParentObjectType(V obj, V oldObj) {
+ return parentClassType;
+ }
+
+ public String getParentObjectName(V obj, V oldObj) {
+ return null;
+ }
+
+ public Long getParentObjectId(V obj, V oldObj) {
+ return null;
+ }
+
+ public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
+ return false;
+ }
+
+ public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
+ return trxLogAttr.getAttrValue(obj, xaEnumUtil);
+ }
+
+ private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
+ if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
+ return;
+ }
+
+ String value = getTrxLogAttrValue(obj, trxLogAttr);
+
+ if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
+ return;
+ }
+
+ final String prevValue;
+ final String newValue;
+
+ if (action == OPERATION_CREATE_CONTEXT) {
+ prevValue = null;
+ newValue = value;
+ } else if (action == OPERATION_DELETE_CONTEXT) {
+ prevValue = value;
+ newValue = null;
+ } else if (action == OPERATION_UPDATE_CONTEXT) {
+ prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
+ newValue = value;
+ } else {
+ prevValue = null;
+ newValue = null;
+ }
+
+ if ((StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue)) || StringUtils.equals(prevValue, newValue)) {
+ return;
+ }
+
+ objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
+ }
+
+ private String toActionString(int action) {
+ switch (action) {
+ case OPERATION_CREATE_CONTEXT:
+ return "create";
+ case OPERATION_UPDATE_CONTEXT:
+ return "update";
+ case OPERATION_DELETE_CONTEXT:
+ return "delete";
+ }
+
+ return "unknown";
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java
index 020e1dff5..4b6c78a61 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java
@@ -17,27 +17,7 @@
* under the License.
*/
- package org.apache.ranger.service;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.TypeVariable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Expression;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.servlet.http.HttpServletResponse;
+package org.apache.ranger.service;
import org.apache.ranger.biz.RangerBizUtil;
import org.apache.ranger.common.ContextUtil;
@@ -66,776 +46,708 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletResponse;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import static org.apache.ranger.service.RangerBaseModelService.OPERATION_CREATE_CONTEXT;
import static org.apache.ranger.service.RangerBaseModelService.OPERATION_UPDATE_CONTEXT;
public abstract class AbstractBaseResourceService<T extends XXDBBase, V extends VXDataObject> {
- protected static final Logger logger = LoggerFactory.getLogger(AbstractBaseResourceService.class);
-
- protected static final Map<Class<?>, String> tEntityValueMap = new HashMap<>();
-
- protected final Class<T> tEntityClass;
- protected final Class<V> tViewClass;
- protected final String className;
- protected final String viewClassName;
- protected final String countQueryStr;
- protected final String queryStr;
- protected final String distinctCountQueryStr;
- protected final String distinctQueryStr;
-
- public final List<SortField> sortFields = new ArrayList<>();
- public final List<SearchField> searchFields = new ArrayList<>();
-
- static {
- tEntityValueMap.put(XXAuthSession.class, "Auth Session");
- tEntityValueMap.put(XXDBBase.class, "Base");
- }
-
- @Autowired
- BaseDao<T> entityDao;
-
- @Autowired
- StringUtil stringUtil;
-
- @Autowired
- protected RangerDaoManager daoManager;
-
- @Autowired
- protected SearchUtil searchUtil;
-
- @Autowired
- protected RESTErrorUtil restErrorUtil;
-
- @Autowired
- RangerDomainObjectSecurityHandler objectSecurityHandler;
-
- @Autowired
- RangerBizUtil bizUtil;
-
- @Autowired
- RangerConfigUtil msConfigUtil;
-
- protected abstract void validateForCreate(V viewBaseBean);
-
- protected abstract void validateForUpdate(V viewBaseBean, T t);
-
- protected abstract T mapViewToEntityBean(V viewBean, T t,
- int OPERATION_CONTEXT);
-
- protected abstract V mapEntityToViewBean(V viewBean, T t);
-
- protected String getResourceName() {
-
- String resourceName = tEntityValueMap.get(tEntityClass);
- if (resourceName == null || resourceName.isEmpty()) {
- resourceName = "Object";
- }
- return resourceName;
-
- // if (className.startsWith("M")) {
- // return className.substring(1);
- // } else if (className.startsWith("org.apache.ranger.entity.M")){
- // return className.substring(14);
- // }
- // return className;
- }
-
- protected BaseDao<T> getDao() {
- if (entityDao == null) {
- throw new NullPointerException("entityDao is not injected by Spring!");
- }
- return entityDao;
- }
-
- protected T createEntityObject() {
- try {
- return tEntityClass.newInstance();
- } catch (Throwable e) {
- logger.error("Error instantiating entity class. tEntityClass="
- + tEntityClass.toString(), e);
- }
- return null;
- }
-
- protected V createViewObject() {
- try {
- return tViewClass.newInstance();
- } catch (Throwable e) {
- logger.error("Error instantiating view class. tViewClass="
- + tViewClass.toString(), e);
- }
- return null;
- }
-
- /**
- * constructor
- */
- @SuppressWarnings("unchecked")
- public AbstractBaseResourceService() {
-
- 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];
- } else if (var.length > 0) {
- tEntityClass = (Class<T>) var[0].getBounds()[0];
- tViewClass = (Class<V>) var[1].getBounds()[0];
- } else {
- tEntityClass = null;
- tViewClass = null;
-
- logger.error("Cannot find class for template", new Throwable());
- }
- if (tEntityClass != null) {
- className = tEntityClass.getName();
- } else {
- className = null;
- }
-
- if (tViewClass != null) {
- viewClassName = tViewClass.getName();
- } else {
- viewClassName = null;
- }
-
- // Get total count of the rows which meet the search criteria
- countQueryStr = "SELECT COUNT(obj) FROM " + className
- + " obj ";
- queryStr = "SELECT obj FROM " + className + " obj ";
-
- distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM "
- + className + " obj ";
- distinctQueryStr = "SELECT distinct obj FROM " + className + " obj ";
- sortFields.add(new SortField("id", "obj.id",true,SORT_ORDER.ASC));
- }
-
- // ----------------------------------------------------------------------------------
- // Create Operation
- // ----------------------------------------------------------------------------------
- /**
- * Create Entity object and populate it from view object. Used in create
- * operation
- */
-
- protected void mapBaseAttributesToEntityBean(T resource, V viewBean) {
- if (resource.getCreateTime() == null) {
- resource.setCreateTime(DateUtil.getUTCDate());
- }
-
- resource.setUpdateTime(DateUtil.getUTCDate());
-
- if (resource.getAddedByUserId() == null) {
- resource.setAddedByUserId(ContextUtil.getCurrentUserId());
- }
-
- resource.setUpdatedByUserId(ContextUtil.getCurrentUserId());
- }
-
- protected T populateEntityBeanForCreate(T t, V viewBaseBean) {
- mapBaseAttributesToEntityBean(t, viewBaseBean);
- return mapViewToEntityBean(viewBaseBean, t, OPERATION_CREATE_CONTEXT);
- }
-
- protected T preCreate(V viewBaseBean) {
- validateGenericAttributes(viewBaseBean);
- validateForCreate(viewBaseBean);
-
- T t = createEntityObject();
- t = populateEntityBeanForCreate(t, viewBaseBean);
- return t;
- }
-
- public V createResource(V viewBaseBean) {
- T resource = preCreate(viewBaseBean);
-
- // object security
- if (!objectSecurityHandler.hasAccess(resource,
- Permission.PermissionType.CREATE)) {
- throw restErrorUtil.create403RESTException(getResourceName()
- + " access denied. classType=" + resource.getMyClassType()
- + ", className=" + resource.getClass().getName()
- + ", objectId=" + resource.getId());
- }
-
- resource = getDao().create(resource);
-
- V view = postCreate(resource);
- return view;
- }
-
- protected V postCreate(T resource) {
- V view = populateViewBean(resource);
- return view;
- }
-
- // ----------------------------------------------------------------------------------
- // Read Operation
- // ----------------------------------------------------------------------------------
-
- protected T preRead(Long id) {
- return null;
- }
-
- public V readResource(Long id) {
- // T resource = preRead(id);
-
- T resource = getDao().getById(id);
- if (resource == null) {
- // Returns code 404 with DATA_NOT_FOUND as the error message
- throw restErrorUtil.createRESTException(getResourceName()
- + " not found", MessageEnums.DATA_NOT_FOUND, id, null,
- "preRead: " + id + " not found.",HttpServletResponse.SC_NOT_FOUND);
- }
-
- V viewBean = readResource(resource);
- return viewBean;
- }
-
- /**
- * @param resource
- * @return
- */
- @SuppressWarnings("unchecked")
- private V readResource(T resource) {
- // object security
- if (!objectSecurityHandler.hasAccess(resource,
- Permission.PermissionType.READ)) {
-
- throw restErrorUtil.create403RESTException(getResourceName()
- + " access denied. classType=" + resource.getMyClassType()
- + ", className=" + resource.getClass().getName()
- + ", objectId=" + resource.getId() + ", object="
- + resource.toString());
- }
-
- V viewBean = postRead(resource);
- return viewBean;
- }
-
- protected V postRead(T resource) {
- V viewBean = populateViewBean(resource);
- return viewBean;
- }
-
- // ----------------------------------------------------------------------------------
- // Update Operation
- // ----------------------------------------------------------------------------------
-
- /**
- * Populate Entity object from view object. Used in update operation
- */
- protected T populateEntityBeanForUpdate(T t, V viewBaseBean) {
- mapBaseAttributesToEntityBean(t, viewBaseBean);
- return mapViewToEntityBean(viewBaseBean, t, OPERATION_UPDATE_CONTEXT);
- }
-
- protected T preUpdate(V viewBaseBean) {
- T resource = getDao().getById(viewBaseBean.getId());
- if (resource == null) {
- // Returns code 400 with DATA_NOT_FOUND as the error message
- throw restErrorUtil.createRESTException(getResourceName()
- + " not found", MessageEnums.DATA_NOT_FOUND,
- viewBaseBean.getId(), null, "preUpdate: id not found.");
- }
- validateForUpdate(viewBaseBean, resource);
-
- return populateEntityBeanForUpdate(resource, viewBaseBean);
- }
-
- public V updateResource(V viewBaseBean) {
- T resource = preUpdate(viewBaseBean);
-
- // object security
- if (!objectSecurityHandler.hasAccess(resource,
- Permission.PermissionType.UPDATE)) {
- throw restErrorUtil.create403RESTException(getResourceName()
- + " access denied. classType=" + resource.getMyClassType()
- + ", className=" + resource.getClass().getName()
- + ", objectId=" + resource.getId());
- }
-
- resource = getDao().update(resource);
- V viewBean = postUpdate(resource);
- return viewBean;
- }
-
- protected V postUpdate(T resource) {
- V view = populateViewBean(resource);
- return view;
- }
-
- // ----------------------------------------------------------------------------------
- // Delete Operation
- // ----------------------------------------------------------------------------------
- protected T preDelete(Long id) {
- T resource = getDao().getById(id);
- if (resource == null) {
- // Return without error
- logger.info("Delete ignored for non-existent " + getResourceName()
- + " id=" + id);
- }
- return resource;
- }
-
- public boolean deleteResource(Long id) {
- boolean result = false;
- T resource = preDelete(id);
- if (resource == null) {
- throw restErrorUtil.createRESTException(getResourceName()
- + " not found", MessageEnums.DATA_NOT_FOUND, id, null,
- getResourceName() + ":" + id);
- }
-
- // object security
- if (!objectSecurityHandler.hasAccess(resource,
- Permission.PermissionType.DELETE)) {
- // throw 401
- logger.debug("OBJECT SECURITY");
- }
- // Need to delete all dependent common objects like Notes and
- // UserDataPref
- try {
- result = getDao().remove(resource);
- } catch (Exception e) {
- logger.error("Error deleting " + getResourceName() + ". Id=" + id,
- e);
-
- throw restErrorUtil.createRESTException(getResourceName()
- + " can't be deleted",
- MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id
- + ", error=" + e.getMessage());
- }
-
- postDelete(resource);
-
- return result;
- }
-
- protected void postDelete(T resource) {
-
- }
-
- // ----------------------------------------------------------------------------------
- // Validation
- // ----------------------------------------------------------------------------------
- protected void validateGenericAttributes(V viewBaseBean) {
- }
-
- // ----------------------------------------------------------------------------------
- // mapping view bean attributes
- // ----------------------------------------------------------------------------------
- public V populateViewBean(T resource) {
- V viewBean = createViewObject();
- populateViewBean(resource, viewBean);
- return mapEntityToViewBean(viewBean, resource);
- }
-
- protected V populateViewBean(T resource, V viewBean) {
- mapBaseAttributesToViewBean(resource, viewBean);
- // TODO:Current:Open: Need to set original and updated
- // content
- return viewBean;
- }
-
- protected void mapBaseAttributesToViewBean(T resource, V viewBean) {
- viewBean.setId(resource.getId());
-
- // TBD: Need to review this change later
- viewBean.setMObj(resource);
- viewBean.setCreateDate(resource.getCreateTime());
- viewBean.setUpdateDate(resource.getUpdateTime());
-
- Long ownerId = resource.getAddedByUserId();
- UserSessionBase currentUserSession = ContextUtil
- .getCurrentUserSession();
-
- if (currentUserSession == null) {
- return;
- }
-
- if (ownerId != null) {
- XXPortalUser tUser = daoManager.getXXPortalUser().getById(
- resource.getAddedByUserId());
- if (tUser != null) {
- if (tUser.getPublicScreenName() != null
- && !tUser.getPublicScreenName().trim().isEmpty()
- && !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
- viewBean.setOwner(tUser.getPublicScreenName());
- } else {
- if (tUser.getFirstName() != null
- && !tUser.getFirstName().trim().isEmpty()
- && !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
- if (tUser.getLastName() != null
- && !tUser.getLastName().trim().isEmpty()
- && !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
- viewBean.setOwner(tUser.getFirstName() + " "
- + tUser.getLastName());
- } else {
- viewBean.setOwner(tUser.getFirstName());
- }
- } else {
- viewBean.setOwner(tUser.getLoginId());
- }
- }
- }
- }
- if (resource.getUpdatedByUserId() != null) {
- XXPortalUser tUser = daoManager.getXXPortalUser().getById(
- resource.getUpdatedByUserId());
- if (tUser != null) {
- if (tUser.getPublicScreenName() != null
- && !tUser.getPublicScreenName().trim().isEmpty()
- && !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
- viewBean.setUpdatedBy(tUser.getPublicScreenName());
- } else {
- if (tUser.getFirstName() != null
- && !tUser.getFirstName().trim().isEmpty()
- && !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
- if (tUser.getLastName() != null
- && !tUser.getLastName().trim().isEmpty()
- && !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
- viewBean.setUpdatedBy(tUser.getFirstName() + " "
- + tUser.getLastName());
- } else {
- viewBean.setUpdatedBy(tUser.getFirstName());
- }
- } else {
- viewBean.setUpdatedBy(tUser.getLoginId());
- }
- }
- }
- }
-
- }
-
- // ----------------------------------------------------------------------------------
- // Search Operation
- // ----------------------------------------------------------------------------------
-
- protected Query createQuery(String searchString, String sortString,
- SearchCriteria searchCriteria, List<SearchField> searchFieldList,
- boolean isCountQuery) {
-// EntityManager em = entityDao != null ? entityDao.getEntityManager() : daoManager.getEntityManager();
- EntityManager em = getDao().getEntityManager();
-
- Query query = searchUtil.createSearchQuery(em, searchString, sortString,
- searchCriteria, searchFieldList, false,
- isCountQuery);
- return query;
- }
-
- protected long getCountForSearchQuery(SearchCriteria searchCriteria,
- List<SearchField> searchFieldList) {
-
- String q = countQueryStr;
- // Get total count of the rows which meet the search criteria
- if (searchCriteria.isDistinct()) {
- q = distinctCountQueryStr;
- }
-
- // Get total count of the rows which meet the search criteria
- Query query = createQuery(q, null, searchCriteria, searchFieldList,
- true);
-
- // Make the database call to get the total count
- Long count = getDao().executeCountQueryInSecurityContext(tEntityClass,
- query);
- if (count == null) {
- // If no data that meets the criteria, return 0
- return 0;
- }
- return count.longValue();
- }
-
- public VXLong getSearchCount(SearchCriteria searchCriteria,
- List<SearchField> searchFieldList) {
- long count = getCountForSearchQuery(searchCriteria, searchFieldList);
-
- VXLong vXLong = new VXLong();
- vXLong.setValue(count);
- return vXLong;
- }
-
- protected List<T> searchResources(SearchCriteria searchCriteria,
- List<SearchField> searchFieldList, List<SortField> sortFieldList,
- VList vList) {
-
- // Get total count of the rows which meet the search criteria
- long count = -1;
- if (searchCriteria.isGetCount()) {
- count = getCountForSearchQuery(searchCriteria, searchFieldList);
- if (count == 0) {
- return Collections.emptyList();
- }
- }
- // construct the sort clause
- String sortClause = searchUtil.constructSortClause(searchCriteria,
- sortFieldList);
-
- String q = queryStr;
- if (searchCriteria.isDistinct()) {
- q = distinctQueryStr;
- }
- // construct the query object for retrieving the data
- Query query = createQuery(q, sortClause, searchCriteria,
- searchFieldList, false);
-
- List<T> resultList = getDao().executeQueryInSecurityContext(
- tEntityClass, query);
-
- if (vList != null) {
- // Set the meta values for the query result
- vList.setPageSize(query.getMaxResults());
- vList.setSortBy(searchCriteria.getSortBy());
- vList.setSortType(searchCriteria.getSortType());
- vList.setStartIndex(query.getFirstResult());
- vList.setTotalCount(count);
- vList.setResultSize(resultList.size());
- }
- return resultList;
- }
-
- // -------------Criteria Usage--------------------
- // -----------------------------------------------
- public VXLong getSearchCountUsingCriteria(SearchCriteria searchCriteria,
- List<SearchField> searchFieldList) {
- EntityManager em = getDao().getEntityManager();
- CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
- CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
-
- Root<T> from = criteria.from(tEntityClass);
- Expression<Long> countExpression = criteriaBuilder
- .count(from.get("id"));
- criteria.select(countExpression);
-
- Predicate resourceConditions = buildResourceSpecificConditions(
- criteriaBuilder, from, searchCriteria);
- Predicate userConditions = buildUserConditions(
- searchCriteria.getParamList(), searchFieldList,
- criteriaBuilder, from);
-
- if (resourceConditions != null) {
- criteria.where(criteriaBuilder.and(resourceConditions,
- userConditions));
- } else {
- criteria.where(criteriaBuilder.and(userConditions));
- }
-
- TypedQuery<Long> countQuery = em.createQuery(criteria);
- long count = getDao().executeCountQueryInSecurityContext(tEntityClass,
- countQuery);
-
- VXLong vXLong = new VXLong();
- vXLong.setValue(count);
- return vXLong;
- }
-
- protected List<T> searchResourcesUsingCriteria(
- SearchCriteria searchCriteria, List<SearchField> searchFieldList,
- List<SortField> sortFieldList, VList vList) {
- // boolean filterEnabled = getDao().enableVisiblityFilters(tClass,
- // true);
-
- EntityManager em = getDao().getEntityManager();
- CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
- CriteriaQuery criteria = criteriaBuilder.createQuery();
- Root<T> from = criteria.from(tEntityClass);
-
- Predicate resourceConditions = buildResourceSpecificConditions(
- criteriaBuilder, from, searchCriteria);
- Predicate userConditions = buildUserConditions(
- searchCriteria.getParamList(), searchFieldList,
- criteriaBuilder, from);
-
- if (resourceConditions != null) {
- criteria.where(criteriaBuilder.and(resourceConditions,
- userConditions));
- } else {
- criteria.where(criteriaBuilder.and(userConditions));
- }
-
- // Get total count of the rows which meet the search criteria
- long count = -1;
- if (searchCriteria.isGetCount()) {
-
- Expression<Long> countExpression = criteriaBuilder.count(from
- .get("id"));
- criteria.select(countExpression);
- TypedQuery<Long> countQuery = em.createQuery(criteria);
- count = getDao().executeCountQueryInSecurityContext(tEntityClass,
- countQuery);
- if (count == 0) {
- return Collections.emptyList();
- }
- }
-
- // construct the sort clause
- setSortClause(searchCriteria, sortFieldList, criteriaBuilder, criteria,
- from);
-
- criteria.select(from);
- TypedQuery<T> typedQuery = em.createQuery(criteria);
- searchUtil.updateQueryPageSize(typedQuery, searchCriteria);
-
- List<T> resultList = getDao().executeQueryInSecurityContext(
- tEntityClass, typedQuery);
-
- if (vList != null) {
- // Set the meta values for the query result
- vList.setPageSize(typedQuery.getMaxResults());
- vList.setSortBy(searchCriteria.getSortBy());
- vList.setSortType(searchCriteria.getSortType());
- vList.setStartIndex(typedQuery.getFirstResult());
- vList.setTotalCount(count);
- }
-
- // if (filterEnabled) {
- // getDao().disableVisiblityFilters(tClass);
- // }
-
- return resultList;
- }
-
- protected Predicate buildUserConditions(Map<String, Object> paramList,
- List<SearchField> searchFields, CriteriaBuilder cb,
- Root<? extends XXDBBase> from) {
- Predicate userConditions = cb.conjunction();
-
- for (SearchField searchField : searchFields) {
- if (paramList.containsKey(searchField.getClientFieldName())) {
- Path<Object> tableField = null;
- String fieldName = searchField.getFieldName();
-
- // stuff to handle jpql syntax (e.g. obj.id, obj.city.city etc).
- // There has to be better way of dealing with this. Will look
- // again.
- int dotIndex = fieldName.indexOf(".");
- if (dotIndex != -1) {
- fieldName = fieldName.substring(dotIndex + 1);
- }
- dotIndex = fieldName.indexOf(".");
- if (dotIndex == -1) {
- tableField = from.get(fieldName);
- } else {
- String joinTable = fieldName.substring(0, dotIndex);
- fieldName = fieldName.substring(dotIndex + 1);
- tableField = from.join(joinTable).get(fieldName);
- }
-
- Object value = paramList.get(searchField.getClientFieldName());
- if (value == null) {
- userConditions = cb.and(userConditions,
- cb.isNull(tableField));
- continue;
- }
-
- if (searchField.getDataType() == SearchField.DATA_TYPE.INTEGER
- || searchField.getDataType() == SearchField.DATA_TYPE.BOOLEAN) {
- userConditions = cb.and(userConditions,
- cb.equal(tableField, value));
- } else if (searchField.getDataType() == SearchField.DATA_TYPE.STRING) {
- String strFieldValue = (String) value;
- Expression<String> tableFieldWithLowerExpr = cb
- .lower(tableField.as(String.class));
-
- if (searchField.getSearchType() == SearchField.SEARCH_TYPE.FULL) {
- Expression<String> literal = cb.lower(cb
- .literal(strFieldValue));
- userConditions = cb.and(userConditions,
- cb.equal(tableFieldWithLowerExpr, literal));
- } else {
- Expression<String> literal = cb.lower(cb.literal("%"
- + strFieldValue + "%"));
- userConditions = cb.and(userConditions,
- cb.like(tableFieldWithLowerExpr, literal));
- }
- } else if (searchField.getDataType() == SearchField.DATA_TYPE.INT_LIST) {
-
- @SuppressWarnings("unchecked")
- Collection<Number> intValueList = (Collection<Number>) value;
- if (intValueList.size() == 1) {
- userConditions = cb.and(userConditions,
- cb.equal(tableField, value));
- } else if (intValueList.size() > 1) {
- userConditions = cb.and(userConditions,
- tableField.in(intValueList));
- }
- }
-
- }
-
- } // for
-
- return userConditions;
- }
-
- protected Predicate buildResourceSpecificConditions(
- CriteriaBuilder criteriaBuilder, Root<T> from, SearchCriteria sc) {
- return null;
- }
-
- public void setSortClause(SearchCriteria searchCriteria,
- List<SortField> sortFields, CriteriaBuilder criteriaBuilder,
- CriteriaQuery<? extends Object> criteria, Root<? extends XXDBBase> from) {
-
- String sortBy = searchCriteria.getSortBy();
- String sortByField = null;
-
- if (!stringUtil.isEmpty(sortBy)) {
- sortBy = sortBy.trim();
- for (SortField sortField : sortFields) {
- if (sortBy.equalsIgnoreCase(sortField.getParamName())) {
- sortByField = sortField.getFieldName();
- // Override the sortBy using the normalized value
- // searchCriteria.setSortBy(sortByField);
- break;
- }
- }
- }
-
- if (sortByField == null) {
- for (SortField sortField : sortFields) {
- if (sortField.isDefault()) {
- sortByField = sortField.getFieldName();
- // Override the sortBy using the default value
- searchCriteria.setSortBy(sortField.getParamName());
- searchCriteria.setSortType(sortField.getDefaultOrder()
- .name());
- break;
- }
- }
- }
-
- if (sortByField != null) {
- int dotIndex = sortByField.indexOf(".");
- if (dotIndex != -1) {
- sortByField = sortByField.substring(dotIndex + 1);
- }
-
- // Add sort type
- String sortType = searchCriteria.getSortType();
- if (sortType != null && "desc".equalsIgnoreCase(sortType)) {
- criteria.orderBy(criteriaBuilder.desc(from.get(sortByField)));
- } else {
- criteria.orderBy(criteriaBuilder.asc(from.get(sortByField)));
- }
-
- }
- }
-
- public Map<Long,V> convertVListToVMap(List<V> vObjList) {
- Map<Long,V> ret = new HashMap<Long,V>();
- if (vObjList == null) {
- return ret;
- }
- for (V vObj : vObjList) {
- ret.put(vObj.getId(), vObj);
- }
- return ret;
- }
+ protected static final Logger logger = LoggerFactory.getLogger(AbstractBaseResourceService.class);
+
+ protected static final Map<Class<?>, String> tEntityValueMap = new HashMap<>();
+
+ 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 className;
+ protected final String viewClassName;
+ protected final String countQueryStr;
+ protected final String queryStr;
+ protected final String distinctCountQueryStr;
+ protected final String distinctQueryStr;
+
+ @Autowired
+ protected RangerDaoManager daoManager;
+
+ @Autowired
+ protected SearchUtil searchUtil;
+
+ @Autowired
+ protected RESTErrorUtil restErrorUtil;
+
+ @Autowired
+ BaseDao<T> entityDao;
+
+ @Autowired
+ StringUtil stringUtil;
+
+ @Autowired
+ RangerDomainObjectSecurityHandler objectSecurityHandler;
+
+ @Autowired
+ RangerBizUtil bizUtil;
+
+ @Autowired
+ RangerConfigUtil msConfigUtil;
+
+ @SuppressWarnings("unchecked")
+ public AbstractBaseResourceService() {
+ 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];
+ } else if (var.length > 0) {
+ tEntityClass = (Class<T>) var[0].getBounds()[0];
+ tViewClass = (Class<V>) var[1].getBounds()[0];
+ } else {
+ tEntityClass = null;
+ tViewClass = null;
+
+ logger.error("Cannot find class for template", new Throwable());
+ }
+
+ if (tEntityClass != null) {
+ className = tEntityClass.getName();
+ } else {
+ className = null;
+ }
+
+ if (tViewClass != null) {
+ viewClassName = tViewClass.getName();
+ } else {
+ viewClassName = null;
+ }
+
+ // Get total count of the rows which meet the search criteria
+ countQueryStr = "SELECT COUNT(obj) FROM " + className + " obj ";
+ queryStr = "SELECT obj FROM " + className + " obj ";
+ distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM " + className + " obj ";
+ distinctQueryStr = "SELECT distinct obj FROM " + className + " obj ";
+
+ sortFields.add(new SortField("id", "obj.id", true, SORT_ORDER.ASC));
+ }
+
+ public V createResource(V viewBaseBean) {
+ T resource = preCreate(viewBaseBean);
+
+ // object security
+ if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.CREATE)) {
+ throw restErrorUtil.create403RESTException(getResourceName() + " access denied. classType=" + resource.getMyClassType() + ", className=" + resource.getClass().getName() + ", objectId=" + resource.getId());
+ }
+
+ resource = getDao().create(resource);
+
+ return postCreate(resource);
+ }
+
+ public V readResource(Long id) {
+ // T resource = preRead(id);
+
+ T resource = getDao().getById(id);
+
+ if (resource == null) {
+ // Returns code 404 with DATA_NOT_FOUND as the error message
+ throw restErrorUtil.createRESTException(getResourceName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, "preRead: " + id + " not found.", HttpServletResponse.SC_NOT_FOUND);
+ }
+
+ return readResource(resource);
+ }
+
+ public V updateResource(V viewBaseBean) {
+ T resource = preUpdate(viewBaseBean);
+
+ // object security
+ if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.UPDATE)) {
+ throw restErrorUtil.create403RESTException(getResourceName() + " access denied. classType=" + resource.getMyClassType() + ", className=" + resource.getClass().getName() + ", objectId=" + resource.getId());
+ }
+
+ resource = getDao().update(resource);
+
+ return postUpdate(resource);
+ }
+
+ public boolean deleteResource(Long id) {
+ boolean result;
+ T resource = preDelete(id);
+
+ if (resource == null) {
+ throw restErrorUtil.createRESTException(getResourceName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, getResourceName() + ":" + id);
+ }
+
+ // object security
+ if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.DELETE)) {
+ // throw 401
+ logger.debug("OBJECT SECURITY");
+ }
+
+ // Need to delete all dependent common objects like Notes and UserDataPref
+ try {
+ result = getDao().remove(resource);
+ } catch (Exception e) {
+ logger.error("Error deleting {} => Id = {}", getResourceName(), id, e);
+
+ throw restErrorUtil.createRESTException(getResourceName() + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id + ", error=" + e.getMessage());
+ }
+
+ postDelete(resource);
+
+ return result;
+ }
+
+ // ----------------------------------------------------------------------------------
+ // mapping view bean attributes
+ // ----------------------------------------------------------------------------------
+ public V populateViewBean(T resource) {
+ V viewBean = createViewObject();
+
+ populateViewBean(resource, viewBean);
+
+ return mapEntityToViewBean(viewBean, resource);
+ }
+
+ public VXLong getSearchCount(SearchCriteria searchCriteria, List<SearchField> searchFieldList) {
+ long count = getCountForSearchQuery(searchCriteria, searchFieldList);
+ VXLong vXLong = new VXLong();
+
+ vXLong.setValue(count);
+
+ return vXLong;
+ }
+
+ // -------------Criteria Usage--------------------
+ // -----------------------------------------------
+ public VXLong getSearchCountUsingCriteria(SearchCriteria searchCriteria, List<SearchField> searchFieldList) {
+ EntityManager em = getDao().getEntityManager();
+ CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
+ CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
+ Root<T> from = criteria.from(tEntityClass);
+ Expression<Long> countExpression = criteriaBuilder.count(from.get("id"));
+
+ criteria.select(countExpression);
+
+ Predicate resourceConditions = buildResourceSpecificConditions(criteriaBuilder, from, searchCriteria);
+ Predicate userConditions = buildUserConditions(searchCriteria.getParamList(), searchFieldList, criteriaBuilder, from);
+
+ if (resourceConditions != null) {
+ criteria.where(criteriaBuilder.and(resourceConditions, userConditions));
+ } else {
+ criteria.where(criteriaBuilder.and(userConditions));
+ }
+
+ TypedQuery<Long> countQuery = em.createQuery(criteria);
+ long count = getDao().executeCountQueryInSecurityContext(tEntityClass, countQuery);
+ VXLong vXLong = new VXLong();
+
+ vXLong.setValue(count);
+
+ return vXLong;
+ }
+
+ public void setSortClause(SearchCriteria searchCriteria, List<SortField> sortFields, CriteriaBuilder criteriaBuilder, CriteriaQuery<?> criteria, Root<? extends XXDBBase> from) {
+ String sortBy = searchCriteria.getSortBy();
+ String sortByField = null;
+
+ if (!stringUtil.isEmpty(sortBy)) {
+ sortBy = sortBy.trim();
+
+ for (SortField sortField : sortFields) {
+ if (sortBy.equalsIgnoreCase(sortField.getParamName())) {
+ sortByField = sortField.getFieldName();
+
+ // Override the sortBy using the normalized value
+ // searchCriteria.setSortBy(sortByField);
+ break;
+ }
+ }
+ }
+
+ if (sortByField == null) {
+ for (SortField sortField : sortFields) {
+ if (sortField.isDefault()) {
+ sortByField = sortField.getFieldName();
+
+ // Override the sortBy using the default value
+ searchCriteria.setSortBy(sortField.getParamName());
+ searchCriteria.setSortType(sortField.getDefaultOrder().name());
+ break;
+ }
+ }
+ }
+
+ if (sortByField != null) {
+ int dotIndex = sortByField.indexOf(".");
+
+ if (dotIndex != -1) {
+ sortByField = sortByField.substring(dotIndex + 1);
+ }
+
+ // Add sort type
+ String sortType = searchCriteria.getSortType();
+
+ if ("desc".equalsIgnoreCase(sortType)) {
+ criteria.orderBy(criteriaBuilder.desc(from.get(sortByField)));
+ } else {
+ criteria.orderBy(criteriaBuilder.asc(from.get(sortByField)));
+ }
+ }
+ }
+
+ public Map<Long, V> convertVListToVMap(List<V> vObjList) {
+ Map<Long, V> ret = new HashMap<>();
+
+ if (vObjList == null) {
+ return ret;
+ }
+
+ for (V vObj : vObjList) {
+ ret.put(vObj.getId(), vObj);
+ }
+
+ return ret;
+ }
+
+ // ----------------------------------------------------------------------------------
+ // Create Operation
+ // ----------------------------------------------------------------------------------
+
+ protected abstract void validateForCreate(V viewBaseBean);
+
+ protected abstract void validateForUpdate(V viewBaseBean, T t);
+
+ protected abstract T mapViewToEntityBean(V viewBean, T t, int operationContext);
+
+ protected abstract V mapEntityToViewBean(V viewBean, T t);
+
+ protected String getResourceName() {
+ String resourceName = tEntityValueMap.get(tEntityClass);
+
+ if (resourceName == null || resourceName.isEmpty()) {
+ resourceName = "Object";
+ }
+
+ return resourceName;
+ }
+
+ // ----------------------------------------------------------------------------------
+ // Read Operation
+ // ----------------------------------------------------------------------------------
+
+ protected BaseDao<T> getDao() {
+ if (entityDao == null) {
+ throw new NullPointerException("entityDao is not injected by Spring!");
+ }
+
+ return entityDao;
+ }
+
+ protected T createEntityObject() {
+ try {
+ return tEntityClass.newInstance();
+ } catch (Throwable e) {
+ logger.error("Error instantiating entity class. tEntityClass={}", tEntityClass.toString(), e);
+ }
+ return null;
+ }
+
+ protected V createViewObject() {
+ try {
+ return tViewClass.newInstance();
+ } catch (Throwable e) {
+ logger.error("Error instantiating view class. tViewClass={}", tViewClass.toString(), e);
+ }
+ return null;
+ }
+
+ /**
+ * Create Entity object and populate it from view object. Used in create operation
+ */
+ protected void mapBaseAttributesToEntityBean(T resource, V viewBean) {
+ if (resource.getCreateTime() == null) {
+ resource.setCreateTime(DateUtil.getUTCDate());
+ }
+
+ resource.setUpdateTime(DateUtil.getUTCDate());
+
+ if (resource.getAddedByUserId() == null) {
+ resource.setAddedByUserId(ContextUtil.getCurrentUserId());
+ }
+
+ resource.setUpdatedByUserId(ContextUtil.getCurrentUserId());
+ }
+
+ // ----------------------------------------------------------------------------------
+ // Update Operation
+ // ----------------------------------------------------------------------------------
+ protected T populateEntityBeanForCreate(T t, V viewBaseBean) {
+ mapBaseAttributesToEntityBean(t, viewBaseBean);
+
+ return mapViewToEntityBean(viewBaseBean, t, OPERATION_CREATE_CONTEXT);
+ }
+
+ protected T preCreate(V viewBaseBean) {
+ validateGenericAttributes(viewBaseBean);
+ validateForCreate(viewBaseBean);
+
+ T t = createEntityObject();
+
+ t = populateEntityBeanForCreate(t, viewBaseBean);
+
+ return t;
+ }
+
+ protected V postCreate(T resource) {
+ return populateViewBean(resource);
+ }
+
+ protected T preRead(Long id) {
+ return null;
+ }
+
+ protected V postRead(T resource) {
+ return populateViewBean(resource);
+ }
+
+ /**
+ * Populate Entity object from view object. Used in update operation
+ */
+ protected T populateEntityBeanForUpdate(T t, V viewBaseBean) {
+ mapBaseAttributesToEntityBean(t, viewBaseBean);
+
+ return mapViewToEntityBean(viewBaseBean, t, OPERATION_UPDATE_CONTEXT);
+ }
+
+ protected T preUpdate(V viewBaseBean) {
+ T resource = getDao().getById(viewBaseBean.getId());
+
+ if (resource == null) {
+ // Returns code 400 with DATA_NOT_FOUND as the error message
+ throw restErrorUtil.createRESTException(getResourceName() + " not found", MessageEnums.DATA_NOT_FOUND, viewBaseBean.getId(), null, "preUpdate: id not found.");
+ }
+
+ validateForUpdate(viewBaseBean, resource);
+
+ return populateEntityBeanForUpdate(resource, viewBaseBean);
+ }
+
+ protected V postUpdate(T resource) {
+ return populateViewBean(resource);
+ }
+
+ // ----------------------------------------------------------------------------------
+ // Delete Operation
+ // ----------------------------------------------------------------------------------
+ protected T preDelete(Long id) {
+ T resource = getDao().getById(id);
+
+ if (resource == null) {
+ // Return without error
+ logger.info("Delete ignored for non-existent {} id={}", getResourceName(), id);
+ }
+
+ return resource;
+ }
+
+ protected void postDelete(T resource) {
+ }
+
+ // ----------------------------------------------------------------------------------
+ // Validation
+ // ----------------------------------------------------------------------------------
+ protected void validateGenericAttributes(V viewBaseBean) {
+ }
+
+ // ----------------------------------------------------------------------------------
+ // Search Operation
+ // ----------------------------------------------------------------------------------
+
+ protected V populateViewBean(T resource, V viewBean) {
+ mapBaseAttributesToViewBean(resource, viewBean);
+
+ // TODO:Current:Open: Need to set original and updated content
+ return viewBean;
+ }
+
+ protected void mapBaseAttributesToViewBean(T resource, V viewBean) {
+ viewBean.setId(resource.getId());
+
+ // TBD: Need to review this change later
+ viewBean.setMObj(resource);
+ viewBean.setCreateDate(resource.getCreateTime());
+ viewBean.setUpdateDate(resource.getUpdateTime());
+
+ Long ownerId = resource.getAddedByUserId();
+ UserSessionBase currentUserSession = ContextUtil.getCurrentUserSession();
+
+ if (currentUserSession == null) {
+ return;
+ }
+
+ if (ownerId != null) {
+ XXPortalUser tUser = daoManager.getXXPortalUser().getById(resource.getAddedByUserId());
+
+ if (tUser != null) {
+ if (tUser.getPublicScreenName() != null && !tUser.getPublicScreenName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
+ viewBean.setOwner(tUser.getPublicScreenName());
+ } else {
+ if (tUser.getFirstName() != null && !tUser.getFirstName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
+ if (tUser.getLastName() != null && !tUser.getLastName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
+ viewBean.setOwner(tUser.getFirstName() + " " + tUser.getLastName());
+ } else {
+ viewBean.setOwner(tUser.getFirstName());
+ }
+ } else {
+ viewBean.setOwner(tUser.getLoginId());
+ }
+ }
+ }
+ }
+
+ if (resource.getUpdatedByUserId() != null) {
+ XXPortalUser tUser = daoManager.getXXPortalUser().getById(resource.getUpdatedByUserId());
+
+ if (tUser != null) {
+ if (tUser.getPublicScreenName() != null && !tUser.getPublicScreenName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
+ viewBean.setUpdatedBy(tUser.getPublicScreenName());
+ } else {
+ if (tUser.getFirstName() != null && !tUser.getFirstName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
+ if (tUser.getLastName() != null && !tUser.getLastName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
+ viewBean.setUpdatedBy(tUser.getFirstName() + " " + tUser.getLastName());
+ } else {
+ viewBean.setUpdatedBy(tUser.getFirstName());
+ }
+ } else {
+ viewBean.setUpdatedBy(tUser.getLoginId());
+ }
+ }
+ }
+ }
+ }
+
+ protected Query createQuery(String searchString, String sortString, SearchCriteria searchCriteria, List<SearchField> searchFieldList, boolean isCountQuery) {
+ EntityManager em = getDao().getEntityManager();
+
+ return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria, searchFieldList, false, isCountQuery);
+ }
+
+ protected long getCountForSearchQuery(SearchCriteria searchCriteria, List<SearchField> searchFieldList) {
+ String q = countQueryStr;
+
+ // Get total count of the rows which meet the search criteria
+ if (searchCriteria.isDistinct()) {
+ q = distinctCountQueryStr;
+ }
+
+ // Get total count of the rows which meet the search criteria
+ Query query = createQuery(q, null, searchCriteria, searchFieldList, true);
+
+ // Make the database call to get the total count
+ Long count = getDao().executeCountQueryInSecurityContext(tEntityClass, query);
+
+ if (count == null) {
+ // If no data that meets the criteria, return 0
+ return 0;
+ }
+
+ return count;
+ }
+
+ protected List<T> searchResources(SearchCriteria searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, VList vList) {
+ // Get total count of the rows which meet the search criteria
+ long count = -1;
+
+ if (searchCriteria.isGetCount()) {
+ count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+ if (count == 0) {
+ return Collections.emptyList();
+ }
+ }
+
+ // construct the sort clause
+ String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
+
+ String q = queryStr;
+
+ if (searchCriteria.isDistinct()) {
+ q = distinctQueryStr;
+ }
+
+ // construct the query object for retrieving the data
+ Query query = createQuery(q, sortClause, searchCriteria, searchFieldList, false);
+ List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query);
+
+ if (vList != null) {
+ // Set the meta values for the query result
+ vList.setPageSize(query.getMaxResults());
+ vList.setSortBy(searchCriteria.getSortBy());
+ vList.setSortType(searchCriteria.getSortType());
+ vList.setStartIndex(query.getFirstResult());
+ vList.setTotalCount(count);
+ vList.setResultSize(resultList.size());
+ }
+
+ return resultList;
+ }
+
+ protected List<T> searchResourcesUsingCriteria(SearchCriteria searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, VList vList) {
+ EntityManager em = getDao().getEntityManager();
+ CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
+ CriteriaQuery criteria = criteriaBuilder.createQuery();
+ Root<T> from = criteria.from(tEntityClass);
+
+ Predicate resourceConditions = buildResourceSpecificConditions(criteriaBuilder, from, searchCriteria);
+ Predicate userConditions = buildUserConditions(searchCriteria.getParamList(), searchFieldList, criteriaBuilder, from);
+
+ if (resourceConditions != null) {
+ criteria.where(criteriaBuilder.and(resourceConditions, userConditions));
+ } else {
+ criteria.where(criteriaBuilder.and(userConditions));
+ }
+
+ // Get total count of the rows which meet the search criteria
+ long count = -1;
+ if (searchCriteria.isGetCount()) {
+ Expression<Long> countExpression = criteriaBuilder.count(from.get("id"));
+
+ criteria.select(countExpression);
+
+ TypedQuery<Long> countQuery = em.createQuery(criteria);
+
+ count = getDao().executeCountQueryInSecurityContext(tEntityClass, countQuery);
+
+ if (count == 0) {
+ return Collections.emptyList();
+ }
+ }
+
+ // construct the sort clause
+ setSortClause(searchCriteria, sortFieldList, criteriaBuilder, criteria, from);
+
+ criteria.select(from);
+
+ TypedQuery<T> typedQuery = em.createQuery(criteria);
+
+ searchUtil.updateQueryPageSize(typedQuery, searchCriteria);
+
+ List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, typedQuery);
+
+ if (vList != null) {
+ // Set the meta values for the query result
+ vList.setPageSize(typedQuery.getMaxResults());
+ vList.setSortBy(searchCriteria.getSortBy());
+ vList.setSortType(searchCriteria.getSortType());
+ vList.setStartIndex(typedQuery.getFirstResult());
+ vList.setTotalCount(count);
+ }
+
+ return resultList;
+ }
+
+ protected Predicate buildUserConditions(Map<String, Object> paramList, List<SearchField> searchFields, CriteriaBuilder cb, Root<? extends XXDBBase> from) {
+ Predicate userConditions = cb.conjunction();
+
+ for (SearchField searchField : searchFields) {
+ if (paramList.containsKey(searchField.getClientFieldName())) {
+ Path<Object> tableField;
+ String fieldName = searchField.getFieldName();
+
+ // stuff to handle jpql syntax (e.g. obj.id, obj.city.city etc). There has to be better way of dealing with this. Will look again.
+ int dotIndex = fieldName.indexOf(".");
+
+ if (dotIndex != -1) {
+ fieldName = fieldName.substring(dotIndex + 1);
+ }
+
+ dotIndex = fieldName.indexOf(".");
+
+ if (dotIndex == -1) {
+ tableField = from.get(fieldName);
+ } else {
+ String joinTable = fieldName.substring(0, dotIndex);
+
+ fieldName = fieldName.substring(dotIndex + 1);
+ tableField = from.join(joinTable).get(fieldName);
+ }
+
+ Object value = paramList.get(searchField.getClientFieldName());
+
+ if (value == null) {
+ userConditions = cb.and(userConditions, cb.isNull(tableField));
+ continue;
+ }
+
+ if (searchField.getDataType() == SearchField.DATA_TYPE.INTEGER || searchField.getDataType() == SearchField.DATA_TYPE.BOOLEAN) {
+ userConditions = cb.and(userConditions, cb.equal(tableField, value));
+ } else if (searchField.getDataType() == SearchField.DATA_TYPE.STRING) {
+ String strFieldValue = (String) value;
+ Expression<String> tableFieldWithLowerExpr = cb.lower(tableField.as(String.class));
+
+ if (searchField.getSearchType() == SearchField.SEARCH_TYPE.FULL) {
+ Expression<String> literal = cb.lower(cb.literal(strFieldValue));
+
+ userConditions = cb.and(userConditions, cb.equal(tableFieldWithLowerExpr, literal));
+ } else {
+ Expression<String> literal = cb.lower(cb.literal("%" + strFieldValue + "%"));
+
+ userConditions = cb.and(userConditions, cb.like(tableFieldWithLowerExpr, literal));
+ }
+ } else if (searchField.getDataType() == SearchField.DATA_TYPE.INT_LIST) {
+ @SuppressWarnings("unchecked")
+ Collection<Number> intValueList = (Collection<Number>) value;
+ if (intValueList.size() == 1) {
+ userConditions = cb.and(userConditions, cb.equal(tableField, value));
+ } else if (intValueList.size() > 1) {
+ userConditions = cb.and(userConditions, tableField.in(intValueList));
+ }
+ }
+ }
+ }
+
+ return userConditions;
+ }
+
+ protected Predicate buildResourceSpecificConditions(CriteriaBuilder criteriaBuilder, Root<T> from, SearchCriteria sc) {
+ return null;
+ }
+
+ /**
+ * @param resource
+ * @return
+ */
+ private V readResource(T resource) {
+ // object security
+ if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.READ)) {
+ throw restErrorUtil.create403RESTException(getResourceName() + " access denied. classType=" + resource.getMyClassType() + ", className=" + resource.getClass().getName() + ", objectId=" + resource.getId() + ", object=" + resource);
+ }
+
+ return postRead(resource);
+ }
+
+ static {
+ tEntityValueMap.put(XXAuthSession.class, "Auth Session");
+ tEntityValueMap.put(XXDBBase.class, "Base");
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java b/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java
index 25ca9fbe3..1718717ea 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java
@@ -17,10 +17,7 @@
* under the License.
*/
- package org.apache.ranger.service;
-
-import java.util.ArrayList;
-import java.util.List;
+package org.apache.ranger.service;
import org.apache.ranger.common.RangerConstants;
import org.apache.ranger.common.SearchCriteria;
@@ -34,157 +31,116 @@ import org.apache.ranger.view.VXAuthSessionList;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.List;
+
@Service
@Scope("singleton")
-public class AuthSessionService extends
- AbstractBaseResourceService<XXAuthSession, VXAuthSession> {
-
- public static final String NAME = "AuthSession";
-
- public static final List<SortField> AUTH_SESSION_SORT_FLDS = new ArrayList<SortField>();
- static {
- AUTH_SESSION_SORT_FLDS.add(new SortField("id", "obj.id"));
- AUTH_SESSION_SORT_FLDS.add(new SortField("authTime", "obj.authTime",
- true, SortField.SORT_ORDER.DESC));
- }
-
- public static List<SearchField> AUTH_SESSION_SEARCH_FLDS = new ArrayList<SearchField>();
- static {
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("id", "obj.id"));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("loginId",
- "obj.loginId", SearchField.SEARCH_TYPE.PARTIAL,
- StringUtil.VALIDATION_LOGINID));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("userId",
- "obj.userId"));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authStatus",
- "obj.authStatus", "statusList", XXAuthSession.AuthStatus_MAX));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authType",
- "obj.authType", "Authentication Type",
- XXAuthSession.AuthType_MAX));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("deviceType",
- "obj.deviceType", "Device Type", RangerConstants.DeviceType_MAX));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP",
- "obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL,
- StringUtil.VALIDATION_IP_ADDRESS));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString(
- "requestUserAgent", "obj.requestUserAgent",
- SearchField.SEARCH_TYPE.PARTIAL, null));
- AUTH_SESSION_SEARCH_FLDS.add(new SearchField("firstName",
- "obj.user.firstName", SearchField.DATA_TYPE.STRING,
- SearchField.SEARCH_TYPE.PARTIAL));
- AUTH_SESSION_SEARCH_FLDS.add(new SearchField("lastName",
- "obj.user.lastName", SearchField.DATA_TYPE.STRING,
- SearchField.SEARCH_TYPE.PARTIAL));
- AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP",
- "obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL,
- StringUtil.VALIDATION_IP_ADDRESS));
- AUTH_SESSION_SEARCH_FLDS.add(new SearchField("startDate", "obj.createTime",
- SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
- AUTH_SESSION_SEARCH_FLDS.add(new SearchField("endDate", "obj.createTime",
- SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
- }
-
- @Override
- protected String getResourceName() {
- return NAME;
- }
-
- /*
- * (non-Javadoc)
- */
- @Override
- protected XXAuthSession createEntityObject() {
- return new XXAuthSession();
- }
-
- /*
- * (non-Javadoc)
- */
- @Override
- protected VXAuthSession createViewObject() {
- return new VXAuthSession();
- }
-
- /*
- * (non-Javadoc)
- */
- @Override
- protected void validateForCreate(VXAuthSession vXAuthSession) {
- logger.error("This method is not required and shouldn't be called.",
- new Throwable().fillInStackTrace());
- }
-
- /*
- * (non-Javadoc)
- */
- @Override
- protected void validateForUpdate(VXAuthSession vXAuthSession,
- XXAuthSession mObj) {
- logger.error("This method is not required and shouldn't be called.",
- new Throwable().fillInStackTrace());
- }
-
- /*
- * (non-Javadoc)
- */
- @Override
- protected XXAuthSession mapViewToEntityBean(VXAuthSession vXAuthSession,
- XXAuthSession t, int OPERATION_CONTEXT) {
- logger.error("This method is not required and shouldn't be called.",
- new Throwable().fillInStackTrace());
- return null;
- }
-
- /*
- * (non-Javadoc)
- */
- @Override
- protected VXAuthSession mapEntityToViewBean(VXAuthSession viewObj,
- XXAuthSession resource) {
- viewObj.setLoginId(resource.getLoginId());
- viewObj.setAuthTime(resource.getAuthTime());
- viewObj.setAuthStatus(resource.getAuthStatus());
- viewObj.setAuthType(resource.getAuthType());
- viewObj.setDeviceType(resource.getDeviceType());
- viewObj.setId(resource.getId());
- viewObj.setRequestIP(resource.getRequestIP());
-
- viewObj.setRequestUserAgent(resource.getRequestUserAgent());
-
- if (resource.getUserId() != null) {
- viewObj.setUserId(resource.getUserId());
-
- XXPortalUser gjUser = daoManager.getXXPortalUser().getById(resource.getUserId());
- if (gjUser != null) {
- viewObj.setEmailAddress(gjUser.getEmailAddress());
- viewObj.setFamilyScreenName(gjUser.getLastName());
- viewObj.setFirstName(gjUser.getFirstName());
- viewObj.setLastName(gjUser.getLastName());
- viewObj.setPublicScreenName(gjUser.getPublicScreenName());
- }
- }
-
- return viewObj;
- }
-
- /**
- * @param searchCriteria
- * @return
- */
- public VXAuthSessionList search(SearchCriteria searchCriteria) {
- VXAuthSessionList returnList = new VXAuthSessionList();
- List<VXAuthSession> viewList = new ArrayList<VXAuthSession>();
-
- List<XXAuthSession> resultList = searchResources(searchCriteria,
- AUTH_SESSION_SEARCH_FLDS, AUTH_SESSION_SORT_FLDS, returnList);
-
- // Iterate over the result list and create the return list
- for (XXAuthSession gjObj : resultList) {
- VXAuthSession viewObj = populateViewBean(gjObj);
- viewList.add(viewObj);
- }
-
- returnList.setVXAuthSessions(viewList);
- return returnList;
- }
+public class AuthSessionService extends AbstractBaseResourceService<XXAuthSession, VXAuthSession> {
+ public static final String NAME = "AuthSession";
+
+ public static final List<SortField> AUTH_SESSION_SORT_FLDS = new ArrayList<>();
+ public static final List<SearchField> AUTH_SESSION_SEARCH_FLDS = new ArrayList<>();
+
+ /**
+ * @param searchCriteria
+ * @return
+ */
+ public VXAuthSessionList search(SearchCriteria searchCriteria) {
+ VXAuthSessionList returnList = new VXAuthSessionList();
+ List<VXAuthSession> viewList = new ArrayList<>();
+
+ List<XXAuthSession> resultList = searchResources(searchCriteria, AUTH_SESSION_SEARCH_FLDS, AUTH_SESSION_SORT_FLDS, returnList);
+
+ // Iterate over the result list and create the return list
+ for (XXAuthSession gjObj : resultList) {
+ VXAuthSession viewObj = populateViewBean(gjObj);
+
+ viewList.add(viewObj);
+ }
+
+ returnList.setVXAuthSessions(viewList);
+
+ return returnList;
+ }
+
+ @Override
+ protected void validateForCreate(VXAuthSession vXAuthSession) {
+ logger.error("This method is not required and shouldn't be called.", new Throwable().fillInStackTrace());
+ }
+
+ @Override
+ protected void validateForUpdate(VXAuthSession vXAuthSession, XXAuthSession mObj) {
+ logger.error("This method is not required and shouldn't be called.", new Throwable().fillInStackTrace());
+ }
+
+ @Override
+ protected XXAuthSession mapViewToEntityBean(VXAuthSession vXAuthSession, XXAuthSession t, int operationContext) {
+ logger.error("This method is not required and shouldn't be called.", new Throwable().fillInStackTrace());
+
+ return null;
+ }
+
+ @Override
+ protected VXAuthSession mapEntityToViewBean(VXAuthSession viewObj, XXAuthSession resource) {
+ viewObj.setLoginId(resource.getLoginId());
+ viewObj.setAuthTime(resource.getAuthTime());
+ viewObj.setAuthStatus(resource.getAuthStatus());
+ viewObj.setAuthType(resource.getAuthType());
+ viewObj.setDeviceType(resource.getDeviceType());
+ viewObj.setId(resource.getId());
+ viewObj.setRequestIP(resource.getRequestIP());
+ viewObj.setRequestUserAgent(resource.getRequestUserAgent());
+
+ if (resource.getUserId() != null) {
+ viewObj.setUserId(resource.getUserId());
+
+ XXPortalUser gjUser = daoManager.getXXPortalUser().getById(resource.getUserId());
+ if (gjUser != null) {
+ viewObj.setEmailAddress(gjUser.getEmailAddress());
+ viewObj.setFamilyScreenName(gjUser.getLastName());
+ viewObj.setFirstName(gjUser.getFirstName());
+ viewObj.setLastName(gjUser.getLastName());
+ viewObj.setPublicScreenName(gjUser.getPublicScreenName());
+ }
+ }
+
+ return viewObj;
+ }
+
+ @Override
+ protected String getResourceName() {
+ return NAME;
+ }
+
+ @Override
+ protected XXAuthSession createEntityObject() {
+ return new XXAuthSession();
+ }
+
+ @Override
+ protected VXAuthSession createViewObject() {
+ return new VXAuthSession();
+ }
+
+ static {
+ AUTH_SESSION_SORT_FLDS.add(new SortField("id", "obj.id"));
+ AUTH_SESSION_SORT_FLDS.add(new SortField("authTime", "obj.authTime", true, SortField.SORT_ORDER.DESC));
+ }
+
+ static {
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("id", "obj.id"));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("loginId", "obj.loginId", SearchField.SEARCH_TYPE.PARTIAL, StringUtil.VALIDATION_LOGINID));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("userId", "obj.userId"));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authStatus", "obj.authStatus", "statusList", XXAuthSession.AuthStatus_MAX));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authType", "obj.authType", "Authentication Type", XXAuthSession.AuthType_MAX));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("deviceType", "obj.deviceType", "Device Type", RangerConstants.DeviceType_MAX));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP", "obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL, StringUtil.VALIDATION_IP_ADDRESS));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestUserAgent", "obj.requestUserAgent", SearchField.SEARCH_TYPE.PARTIAL, null));
+ AUTH_SESSION_SEARCH_FLDS.add(new SearchField("firstName", "obj.user.firstName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+ AUTH_SESSION_SEARCH_FLDS.add(new SearchField("lastName", "obj.user.lastName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+ AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP", "obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL, StringUtil.VALIDATION_IP_ADDRESS));
+ AUTH_SESSION_SEARCH_FLDS.add(new SearchField("startDate", "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+ AUTH_SESSION_SEARCH_FLDS.add(new SearchField("endDate", "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java
index ad79a2a7a..e94f27848 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java
@@ -17,29 +17,28 @@
* under the License.
*/
- package org.apache.ranger.service;
+package org.apache.ranger.service;
import org.apache.ranger.view.VXDataObject;
public abstract class PublicAPIServiceBase<VXA extends VXDataObject, VX extends VXDataObject> {
+ protected VX mapBaseAttributesToPublicObject(VXA vXAObj, VX vPublicObj) {
+ vPublicObj.setId(vXAObj.getId());
+ vPublicObj.setCreateDate(vXAObj.getCreateDate());
+ vPublicObj.setUpdateDate(vXAObj.getUpdateDate());
+ vPublicObj.setOwner(vXAObj.getOwner());
+ vPublicObj.setUpdatedBy(vXAObj.getUpdatedBy());
- protected VX mapBaseAttributesToPublicObject(VXA vXAObj, VX vPublicObj) {
- vPublicObj.setId(vXAObj.getId());
- vPublicObj.setCreateDate(vXAObj.getCreateDate());
- vPublicObj.setUpdateDate(vXAObj.getUpdateDate());
- vPublicObj.setOwner(vXAObj.getOwner());
- vPublicObj.setUpdatedBy(vXAObj.getUpdatedBy());
- return vPublicObj;
- }
+ return vPublicObj;
+ }
- protected VXA mapBaseAttributesToXAObject(VX vPublicObj, VXA vXAObj) {
- vXAObj.setId(vPublicObj.getId());
- vXAObj.setCreateDate(vPublicObj.getCreateDate());
- vXAObj.setUpdateDate(vPublicObj.getUpdateDate());
- vXAObj.setOwner(vPublicObj.getOwner());
- vXAObj.setUpdatedBy(vPublicObj.getUpdatedBy());
-
- return vXAObj;
- }
+ protected VXA mapBaseAttributesToXAObject(VX vPublicObj, VXA vXAObj) {
+ vXAObj.setId(vPublicObj.getId());
+ vXAObj.setCreateDate(vPublicObj.getCreateDate());
+ vXAObj.setUpdateDate(vPublicObj.getUpdateDate());
+ vXAObj.setOwner(vPublicObj.getOwner());
+ vXAObj.setUpdatedBy(vPublicObj.getUpdatedBy());
+ return vXAObj;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java
index fe1883dd1..91fd15afb 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java
@@ -24,21 +24,21 @@ import org.springframework.stereotype.Component;
@Component
public class RangerAuditFields<T extends XXDBBase> {
+ public <T extends XXDBBase, PARENT extends XXDBBase> T populateAuditFields(T xObj, PARENT parentObj) {
+ xObj.setCreateTime(parentObj.getCreateTime());
+ xObj.setUpdateTime(parentObj.getUpdateTime());
+ xObj.setAddedByUserId(parentObj.getAddedByUserId());
+ xObj.setUpdatedByUserId(parentObj.getUpdatedByUserId());
- public <T extends XXDBBase, PARENT extends XXDBBase> T populateAuditFields(T xObj, PARENT parentObj) {
- xObj.setCreateTime(parentObj.getCreateTime());
- xObj.setUpdateTime(parentObj.getUpdateTime());
- xObj.setAddedByUserId(parentObj.getAddedByUserId());
- xObj.setUpdatedByUserId(parentObj.getUpdatedByUserId());
- return xObj;
- }
+ return xObj;
+ }
- public <T extends XXDBBase> T populateAuditFieldsForCreate(T xObj) {
- xObj.setCreateTime(DateUtil.getUTCDate());
- xObj.setUpdateTime(DateUtil.getUTCDate());
- xObj.setAddedByUserId(ContextUtil.getCurrentUserId());
- xObj.setUpdatedByUserId(ContextUtil.getCurrentUserId());
- return xObj;
- }
+ public <T extends XXDBBase> T populateAuditFieldsForCreate(T xObj) {
+ xObj.setCreateTime(DateUtil.getUTCDate());
+ xObj.setUpdateTime(DateUtil.getUTCDate());
+ xObj.setAddedByUserId(ContextUtil.getCurrentUserId());
+ xObj.setUpdatedByUserId(ContextUtil.getCurrentUserId());
+ return xObj;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java
index dfecf720f..edf514b1f 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java
@@ -31,213 +31,219 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
-import java.util.*;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public abstract class RangerAuditedModelService<T extends XXDBBase, V extends RangerBaseModelObject> extends RangerBaseModelService<T, V> {
- private static final Logger LOG = LoggerFactory.getLogger(RangerAuditedModelService.class);
+ private static final Logger LOG = LoggerFactory.getLogger(RangerAuditedModelService.class);
+
+ protected final Map<String, VTrxLogAttr> trxLogAttrs = new HashMap<>();
+ protected final String hiddenPasswordString;
+
+ private final int classType;
+ private final int parentClassType;
+ private final List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
+
+ @Autowired
+ RangerDataHistService dataHistService;
+
+ @Autowired
+ RangerEnumUtil xaEnumUtil;
+
+ protected RangerAuditedModelService(int classType) {
+ this(classType, 0);
+ }
+
+ protected RangerAuditedModelService(int classType, int parentClassType) {
+ super();
+
+ this.classType = classType;
+ this.parentClassType = parentClassType;
+ this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
+
+ LOG.debug("RangerAuditedModelService({}, {})", this.classType, this.parentClassType);
+ }
+
+ @PostConstruct
+ public void init() {
+ for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
+ if (vTrxLog.isObjName()) {
+ objNameAttrs.add(vTrxLog);
+ }
+ }
- @Autowired
- RangerDataHistService dataHistService;
+ if (objNameAttrs.isEmpty()) {
+ objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
+ }
+ }
- @Autowired
- RangerEnumUtil xaEnumUtil;
- private final int classType;
- private final int parentClassType;
- private final List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
-
- protected final Map<String, VTrxLogAttr> trxLogAttrs = new HashMap<>();
- protected final String hiddenPasswordString;
-
- protected RangerAuditedModelService(int classType) {
- this(classType, 0);
- }
-
- protected RangerAuditedModelService(int classType, int parentClassType) {
- super();
-
- this.classType = classType;
- this.parentClassType = parentClassType;
- this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
-
- LOG.debug("RangerAuditedModelService({}, {})", this.classType, this.parentClassType);
- }
-
- @PostConstruct
- public void init() {
- for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
- if (vTrxLog.isObjName()) {
- objNameAttrs.add(vTrxLog);
- }
- }
-
- if (objNameAttrs.isEmpty()) {
- objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
- }
- }
+ public void onObjectChange(V current, V former, int action) {
+ switch (action) {
+ case RangerServiceService.OPERATION_CREATE_CONTEXT:
+ dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_CREATE);
+ break;
- public void onObjectChange(V current, V former, int action) {
- switch (action) {
- case RangerServiceService.OPERATION_CREATE_CONTEXT:
- dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_CREATE);
- break;
+ case RangerServiceService.OPERATION_UPDATE_CONTEXT:
+ dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_UPDATE);
+ break;
- case RangerServiceService.OPERATION_UPDATE_CONTEXT:
- dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_UPDATE);
- break;
+ case RangerServiceService.OPERATION_DELETE_CONTEXT:
+ if (current == null) {
+ current = former;
+ }
- case RangerServiceService.OPERATION_DELETE_CONTEXT:
- if (current == null) {
- current = former;
- }
+ dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_DELETE);
+ break;
+ }
- dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_DELETE);
- break;
- }
+ if (current != null && (former != null || action != OPERATION_UPDATE_CONTEXT) && action != 0) {
+ createTransactionLog(current, former, action);
+ }
+ }
- if (current != null && (former != null || action != OPERATION_UPDATE_CONTEXT) && action != 0) {
- createTransactionLog(current, former, action);
- }
- }
+ public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
+ try {
+ ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
- public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
- try {
- ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-
- objChangeInfo.addAttribute(attrName, oldValue, newValue);
-
- trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
- } catch (Exception excp) {
- LOG.warn("failed to convert attribute change info to json");
- }
-
- bizUtil.createTrxLog(Collections.singletonList(trxLog));
- }
-
- public void createTransactionLog(XXTrxLogV2 trxLog) {
- bizUtil.createTrxLog(Collections.singletonList(trxLog));
- }
-
- public void createTransactionLog(V obj, V oldObj, int action) {
- List<XXTrxLogV2> trxLogs = getTransactionLogs(obj, oldObj, action);
-
- if (trxLogs != null) {
- bizUtil.createTrxLog(trxLogs);
- }
- }
-
- private List<XXTrxLogV2> getTransactionLogs(V obj, V oldObj, int action) {
- if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
- return null;
- }
-
- List<XXTrxLogV2> ret = new ArrayList<>();
-
- try {
- ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-
- for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
- processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
- }
-
- if(objChangeInfo.getAttributes() != null && objChangeInfo.getAttributes().size() > 0) {
- ret.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
- }
- } catch (Exception excp) {
- LOG.warn("failed to get transaction log for object: type=" + obj.getClass().getName() + ", id=" + obj.getId(), excp);
- }
-
- return ret;
- }
-
- public int getParentObjectType(V obj, V oldObj) {
- return parentClassType;
- }
-
- public String getParentObjectName(V obj, V oldObj) {
- return null;
- }
-
- public Long getParentObjectId(V obj, V oldObj) {
- return null;
- }
-
- public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
- return false;
- }
-
- public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
- return trxLogAttr.getAttrValue(obj, xaEnumUtil);
- }
-
- private String getObjectName(V obj) {
- String ret = null;
-
- for (VTrxLogAttr attr : objNameAttrs) {
- ret = attr.getAttrValue(obj, xaEnumUtil);
-
- if (StringUtils.isNotBlank(ret)) {
- break;
- }
- }
-
- return ret;
- }
-
- private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
- if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
- return;
- }
-
- String value = getTrxLogAttrValue(obj, trxLogAttr);
-
- if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
- return;
- }
-
- final String prevValue;
- final String newValue;
-
- if (action == OPERATION_CREATE_CONTEXT) {
- prevValue = null;
- newValue = value;
- } else if (action == OPERATION_DELETE_CONTEXT) {
- prevValue = value;
- newValue = null;
- } else if (action == OPERATION_UPDATE_CONTEXT) {
- prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
- newValue = value;
- } else if (action == OPERATION_IMPORT_CREATE_CONTEXT) {
- prevValue = null;
- newValue = value;
- } else if (action == OPERATION_IMPORT_DELETE_CONTEXT) {
- prevValue = value;
- newValue = null;
- } else {
- prevValue = null;
- newValue = null;
- }
-
- if (StringUtils.equals(prevValue, newValue) || (StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue))) {
- return;
- }
-
- objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
- }
-
- private String toActionString(int action) {
- switch (action) {
- case OPERATION_CREATE_CONTEXT:
- return "create";
- case OPERATION_UPDATE_CONTEXT:
- return "update";
- case OPERATION_DELETE_CONTEXT:
- return "delete";
- case OPERATION_IMPORT_CREATE_CONTEXT:
- return "Import Create";
- case OPERATION_IMPORT_DELETE_CONTEXT:
- return "Import Delete";
- }
-
- return "unknown";
- }
+ objChangeInfo.addAttribute(attrName, oldValue, newValue);
+
+ trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
+ } catch (Exception excp) {
+ LOG.warn("failed to convert attribute change info to json");
+ }
+
+ bizUtil.createTrxLog(Collections.singletonList(trxLog));
+ }
+
+ public void createTransactionLog(XXTrxLogV2 trxLog) {
+ bizUtil.createTrxLog(Collections.singletonList(trxLog));
+ }
+
+ public void createTransactionLog(V obj, V oldObj, int action) {
+ List<XXTrxLogV2> trxLogs = getTransactionLogs(obj, oldObj, action);
+
+ if (trxLogs != null) {
+ bizUtil.createTrxLog(trxLogs);
+ }
+ }
+
+ public int getParentObjectType(V obj, V oldObj) {
+ return parentClassType;
+ }
+
+ public String getParentObjectName(V obj, V oldObj) {
+ return null;
+ }
+
+ public Long getParentObjectId(V obj, V oldObj) {
+ return null;
+ }
+
+ public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
+ return false;
+ }
+
+ public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
+ return trxLogAttr.getAttrValue(obj, xaEnumUtil);
+ }
+
+ private List<XXTrxLogV2> getTransactionLogs(V obj, V oldObj, int action) {
+ if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
+ return null;
+ }
+
+ List<XXTrxLogV2> ret = new ArrayList<>();
+
+ try {
+ ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
+
+ for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
+ processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
+ }
+
+ if (objChangeInfo.getAttributes() != null && !objChangeInfo.getAttributes().isEmpty()) {
+ ret.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
+ }
+ } catch (Exception excp) {
+ LOG.warn("failed to get transaction log for object: type={}, id={}", obj.getClass().getName(), obj.getId(), excp);
+ }
+
+ return ret;
+ }
+
+ private String getObjectName(V obj) {
+ String ret = null;
+
+ for (VTrxLogAttr attr : objNameAttrs) {
+ ret = attr.getAttrValue(obj, xaEnumUtil);
+
+ if (StringUtils.isNotBlank(ret)) {
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+ private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
+ if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
+ return;
+ }
+
+ String value = getTrxLogAttrValue(obj, trxLogAttr);
+
+ if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
+ return;
+ }
+
+ final String prevValue;
+ final String newValue;
+
+ if (action == OPERATION_CREATE_CONTEXT) {
+ prevValue = null;
+ newValue = value;
+ } else if (action == OPERATION_DELETE_CONTEXT) {
+ prevValue = value;
+ newValue = null;
+ } else if (action == OPERATION_UPDATE_CONTEXT) {
+ prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
+ newValue = value;
+ } else if (action == OPERATION_IMPORT_CREATE_CONTEXT) {
+ prevValue = null;
+ newValue = value;
+ } else if (action == OPERATION_IMPORT_DELETE_CONTEXT) {
+ prevValue = value;
+ newValue = null;
+ } else {
+ prevValue = null;
+ newValue = null;
+ }
+
+ if (StringUtils.equals(prevValue, newValue) || (StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue))) {
+ return;
+ }
+
+ objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
+ }
+
+ private String toActionString(int action) {
+ switch (action) {
+ case OPERATION_CREATE_CONTEXT:
+ return "create";
+ case OPERATION_UPDATE_CONTEXT:
+ return "update";
+ case OPERATION_DELETE_CONTEXT:
+ return "delete";
+ case OPERATION_IMPORT_CREATE_CONTEXT:
+ return "Import Create";
+ case OPERATION_IMPORT_DELETE_CONTEXT:
+ return "Import Delete";
+ }
+
+ return "unknown";
+ }
}
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
index 26f76578e..0484979d7 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
@@ -17,15 +17,6 @@
package org.apache.ranger.service;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.TypeVariable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
import org.apache.ranger.biz.RangerBizUtil;
import org.apache.ranger.common.ContextUtil;
import org.apache.ranger.common.DateUtil;
@@ -51,452 +42,424 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
public abstract class RangerBaseModelService<T extends XXDBBase, V extends RangerBaseModelObject> {
- 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;
-
- @Autowired
- protected StringUtil stringUtil;
-
- @Autowired
- protected RESTErrorUtil restErrorUtil;
-
- @Autowired
- protected RangerSearchUtil searchUtil;
-
- @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();
-
- if (genericSuperclass.getActualTypeArguments()[0] instanceof Class) {
- 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];
- } else {
- LOG.error("Cannot find class for template", new Throwable());
-
- tEntityClass = null;
- tViewClass = null;
- }
-
- tClassName = (tEntityClass != null) ? tEntityClass.getName() : "XXDBBase";
-
- populateExistingBaseFields = false;
-
- 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,
- int OPERATION_CONTEXT);
-
- protected abstract V mapEntityToViewBean(V viewBean, T t);
-
- protected T createEntityObject() {
- try {
- return tEntityClass.newInstance();
- } catch (Throwable e) {
- LOG.error("Error instantiating entity class. tEntityClass="
- + tEntityClass.toString(), e);
- }
- return null;
- }
-
- protected V createViewObject() {
- try {
- return tViewClass.newInstance();
- } catch (Throwable e) {
- LOG.error("Error instantiating view class. tViewClass="
- + tViewClass.toString(), e);
- }
- return null;
- }
-
- protected BaseDao<T> getDao() {
- if (entityDao == null) {
- throw new NullPointerException("entityDao is not injected by Spring!");
- }
- return entityDao;
- }
-
- protected V populateViewBean(T entityObj) {
- V vObj = createViewObject();
- vObj.setId(entityObj.getId());
- vObj.setCreateTime(entityObj.getCreateTime());
- vObj.setUpdateTime(entityObj.getUpdateTime());
- vObj.setCreatedBy(getUserScreenName(entityObj.getAddedByUserId()));
- vObj.setUpdatedBy(getUserScreenName(entityObj.getUpdatedByUserId()));
-
- return mapEntityToViewBean(vObj, entityObj);
- }
-
- protected T populateEntityBeanForCreate(T entityObj, V vObj) {
- if (!populateExistingBaseFields) {
- entityObj.setCreateTime(DateUtil.getUTCDate());
- entityObj.setUpdateTime(entityObj.getCreateTime());
- entityObj.setAddedByUserId(ContextUtil.getCurrentUserId());
- entityObj.setUpdatedByUserId(entityObj.getAddedByUserId());
- } else {
- XXPortalUser createdByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getCreatedBy());
- XXPortalUser updByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getUpdatedBy());
-
- entityObj.setId(vObj.getId());
- entityObj.setCreateTime(vObj.getCreateTime() != null ? vObj.getCreateTime() : DateUtil.getUTCDate());
- entityObj.setUpdateTime(vObj.getUpdateTime() != null ? vObj.getUpdateTime() : DateUtil.getUTCDate());
- entityObj.setAddedByUserId(createdByUser != null ? createdByUser.getId() : ContextUtil.getCurrentUserId());
- entityObj.setUpdatedByUserId(updByUser != null ? updByUser.getId() : ContextUtil.getCurrentUserId());
- }
-
- return mapViewToEntityBean(vObj, entityObj, OPERATION_CREATE_CONTEXT);
- }
-
- protected T populateEntityBeanForUpdate(T entityObj, V vObj) {
- if (entityObj == null) {
- throw restErrorUtil.createRESTException(
- "No Object found to update.",
- MessageEnums.DATA_NOT_FOUND);
- }
-
- T ret = mapViewToEntityBean(vObj, entityObj, OPERATION_UPDATE_CONTEXT);
-
- if (ret.getCreateTime() == null) {
- ret.setCreateTime(DateUtil.getUTCDate());
- }
-
- if (ret.getAddedByUserId() == null) {
- ret.setAddedByUserId(ContextUtil.getCurrentUserId());
- }
-
- if(!populateExistingBaseFields) {
- ret.setUpdateTime(DateUtil.getUTCDate());
- ret.setUpdatedByUserId(ContextUtil.getCurrentUserId());
- }
-
- return ret;
- }
-
- protected abstract void validateForCreate(V vObj);
-
- protected abstract void validateForUpdate(V vObj, T entityObj);
-
- public T preCreate(V vObj) {
- validateForCreate(vObj);
-
- T entityObj = createEntityObject();
-
- return populateEntityBeanForCreate(entityObj, vObj);
- }
-
- public V postCreate(T xObj) {
- return populateViewBean(xObj);
- }
-
- public V create(V vObj) {
- T resource = preCreate(vObj);
- resource = getDao().create(resource);
- vObj = postCreate(resource);
- return vObj;
- }
-
- public V create(V vObj, boolean flush) {
- T resource = preCreate(vObj);
- resource = getDao().create(resource, flush);
- vObj = postCreate(resource);
- return vObj;
- }
-
- public V read(Long id) {
- T resource = getDao().getById(id);
- if (resource == null) {
- throw restErrorUtil.createRESTException(tViewClass.getName()
- + " :Data Not Found for given Id",
- MessageEnums.DATA_NOT_FOUND, id, null,
- "readResource : No Object found with given id.");
- }
- return populateViewBean(resource);
- }
-
- public V update(V viewBaseBean) {
- T resource = preUpdate(viewBaseBean);
- resource = getDao().update(resource);
- V viewBean = postUpdate(resource);
- return viewBean;
- }
-
- public V postUpdate(T resource) {
- return populateViewBean(resource);
- }
-
- public T preUpdate(V viewBaseBean) {
- T resource = getDao().getById(viewBaseBean.getId());
- if (resource == null) {
- throw restErrorUtil.createRESTException(tEntityClass.getSimpleName()
- + " not found", MessageEnums.DATA_NOT_FOUND,
- viewBaseBean.getId(), null, "preUpdate: id not found.");
- }
- validateForUpdate(viewBaseBean, resource);
- return populateEntityBeanForUpdate(resource, viewBaseBean);
- }
-
- public boolean delete(V vObj) {
- boolean result = false;
- Long id = vObj.getId();
- T resource = preDelete(id);
- if (resource == null) {
- throw restErrorUtil.createRESTException(
- tEntityClass.getSimpleName() + " not found",
- MessageEnums.DATA_NOT_FOUND, id, null,
- tEntityClass.getSimpleName() + ":" + id);
- }
- try {
- result = getDao().remove(resource);
- } catch (Exception e) {
- LOG.error("Error deleting " + tEntityClass.getSimpleName()
- + ". Id=" + id, e);
-
- throw restErrorUtil.createRESTException(
- tEntityClass.getSimpleName() + " can't be deleted",
- MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id
- + ", error=" + e.getMessage());
- }
- return result;
- }
-
- public boolean delete(V vObj, boolean flush) {
- boolean result = false;
- Long id = vObj.getId();
- T resource = preDelete(id);
- if (resource == null) {
- throw restErrorUtil.createRESTException(
- tEntityClass.getSimpleName() + " not found",
- MessageEnums.DATA_NOT_FOUND, id, null,
- tEntityClass.getSimpleName() + ":" + id);
- }
- try {
- result = getDao().remove(resource);
- } catch (Exception e) {
- LOG.error("Error deleting " + tEntityClass.getSimpleName()
- + ". Id=" + id, e);
-
- throw restErrorUtil.createRESTException(
- tEntityClass.getSimpleName() + " can't be deleted",
- MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id
- + ", error=" + e.getMessage());
- }
- return result;
- }
-
- protected T preDelete(Long id) {
- T resource = getDao().getById(id);
- if (resource == null) {
- // Return without error
- LOG.info("Delete ignored for non-existent Object, id=" + id);
- }
- return resource;
- }
-
- public Boolean getPopulateExistingBaseFields() {
- return populateExistingBaseFields;
- }
-
- public void setPopulateExistingBaseFields(Boolean populateExistingBaseFields) {
- this.populateExistingBaseFields = populateExistingBaseFields;
- }
-
- /*
- * Search Operations
- *
- */
-
- public List<T> searchResources(SearchFilter searchCriteria,
- List<SearchField> searchFieldList, List<SortField> sortFieldList,
- VList vList) {
-
- // Get total count of the rows which meet the search criteria
- long count = -1;
- if (searchCriteria.isGetCount()) {
- count = getCountForSearchQuery(searchCriteria, searchFieldList);
- if (count == 0) {
- return Collections.emptyList();
- }
- }
-
- 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());
- vList.setPageSize(query.getMaxResults());
- vList.setSortBy(searchCriteria.getSortBy());
- vList.setSortType(searchCriteria.getSortType());
- vList.setStartIndex(query.getFirstResult());
- vList.setTotalCount(count);
- }
- return resultList;
- }
-
- protected List<T> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<V> pList) {
-
- // Get total count of the rows which meet the search criteria
- long count = -1;
- if (searchCriteria.isGetCount()) {
- count = getCountForSearchQuery(searchCriteria, searchFieldList);
- if (count == 0) {
- 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);
-
- if (pList != null) {
- pList.setResultSize(resultList.size());
- pList.setPageSize(query.getMaxResults());
- pList.setSortBy(searchCriteria.getSortBy());
- pList.setSortType(searchCriteria.getSortType());
- pList.setStartIndex(query.getFirstResult());
- pList.setTotalCount(count);
- }
- return resultList;
- }
-
- //If not efficient we need to review this and add jpa_named queries to get the count
- public 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);
-
- return (count == null) ? 0 : count.longValue();
- }
-
- protected Query createQuery(String searchString, String sortString, SearchFilter searchCriteria,
- List<SearchField> searchFieldList, boolean isCountQuery) {
-
- EntityManager em = getDao().getEntityManager();
- Query query = searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria,
- searchFieldList, false, isCountQuery);
- return query;
- }
-
- protected String getUserScreenName(Long userId) {
- String ret = null;
-
- XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
-
- if(xPortalUser != null) {
- ret = xPortalUser.getPublicScreenName();
-
- if (stringUtil.isEmpty(ret)) {
- ret = xPortalUser.getFirstName();
-
- if(stringUtil.isEmpty(ret)) {
- ret = xPortalUser.getLoginId();
- } else {
- if(!stringUtil.isEmpty(xPortalUser.getLastName())) {
- ret += (" " + xPortalUser.getLastName());
- }
- }
- }
- }
-
- return ret;
- }
-
- protected String getUserName(Long userId) {
- String ret = null;
-
- XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
-
- if(xPortalUser != null) {
- ret = xPortalUser.getLoginId();
- }
-
- return ret;
- }
-
- protected String getGroupName(Long groupId) {
- String ret = null;
-
- XXGroup xGroup = groupId == null ? null : daoMgr.getXXGroup().getById(groupId);
+ 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;
+
+ 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;
+
+ @Autowired
+ protected RangerDaoManager daoMgr;
+
+ @Autowired
+ protected StringUtil stringUtil;
+
+ @Autowired
+ protected RESTErrorUtil restErrorUtil;
+
+ @Autowired
+ protected RangerSearchUtil searchUtil;
+
+ @Autowired
+ protected BaseDao<T> entityDao;
+
+ @Autowired
+ RangerBizUtil bizUtil;
+
+ private Boolean populateExistingBaseFields;
+
+ @SuppressWarnings("unchecked")
+ public RangerBaseModelService() {
+ 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];
+ } else if (var.length > 0) {
+ tEntityClass = (Class<T>) var[0].getBounds()[0];
+ tViewClass = (Class<V>) var[1].getBounds()[0];
+ } else {
+ LOG.error("Cannot find class for template", new Throwable());
+
+ tEntityClass = null;
+ tViewClass = null;
+ }
+
+ tClassName = (tEntityClass != null) ? tEntityClass.getName() : "XXDBBase";
+ populateExistingBaseFields = false;
+ 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 ";
+ }
+
+ public T preCreate(V vObj) {
+ validateForCreate(vObj);
+
+ T entityObj = createEntityObject();
+
+ return populateEntityBeanForCreate(entityObj, vObj);
+ }
+
+ public V postCreate(T xObj) {
+ return populateViewBean(xObj);
+ }
+
+ public V create(V vObj) {
+ T resource = preCreate(vObj);
+
+ resource = getDao().create(resource);
+ vObj = postCreate(resource);
+
+ return vObj;
+ }
+
+ public V create(V vObj, boolean flush) {
+ T resource = preCreate(vObj);
+
+ resource = getDao().create(resource, flush);
+ vObj = postCreate(resource);
+
+ return vObj;
+ }
+
+ public V read(Long id) {
+ T resource = getDao().getById(id);
+
+ if (resource == null) {
+ throw restErrorUtil.createRESTException(tViewClass.getName() + " :Data Not Found for given Id", MessageEnums.DATA_NOT_FOUND, id, null, "readResource : No Object found with given id.");
+ }
+
+ return populateViewBean(resource);
+ }
+
+ public V update(V viewBaseBean) {
+ T resource = preUpdate(viewBaseBean);
+
+ resource = getDao().update(resource);
+
+ return postUpdate(resource);
+ }
+
+ public V postUpdate(T resource) {
+ return populateViewBean(resource);
+ }
+
+ public T preUpdate(V viewBaseBean) {
+ T resource = getDao().getById(viewBaseBean.getId());
+
+ if (resource == null) {
+ throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " not found", MessageEnums.DATA_NOT_FOUND, viewBaseBean.getId(), null, "preUpdate: id not found.");
+ }
+
+ validateForUpdate(viewBaseBean, resource);
+
+ return populateEntityBeanForUpdate(resource, viewBaseBean);
+ }
+
+ public boolean delete(V vObj) {
+ boolean result;
+ Long id = vObj.getId();
+ T resource = preDelete(id);
+
+ if (resource == null) {
+ throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, tEntityClass.getSimpleName() + ":" + id);
+ }
+
+ try {
+ result = getDao().remove(resource);
+ } catch (Exception e) {
+ LOG.error("Error deleting {}. Id={}", tEntityClass.getSimpleName(), id, e);
+
+ throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, id + ", error=" + e.getMessage());
+ }
+
+ return result;
+ }
+
+ public boolean delete(V vObj, boolean flush) {
+ boolean result;
+ Long id = vObj.getId();
+ T resource = preDelete(id);
+
+ if (resource == null) {
+ throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, tEntityClass.getSimpleName() + ":" + id);
+ }
+
+ try {
+ result = getDao().remove(resource);
+ } catch (Exception e) {
+ LOG.error("Error deleting {}. Id={}", tEntityClass.getSimpleName(), id, e);
+
+ throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, id + ", error=" + e.getMessage());
+ }
+
+ return result;
+ }
+
+ public Boolean getPopulateExistingBaseFields() {
+ return populateExistingBaseFields;
+ }
+
+ public void setPopulateExistingBaseFields(Boolean populateExistingBaseFields) {
+ this.populateExistingBaseFields = populateExistingBaseFields;
+ }
+
+ public List<T> searchResources(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, VList vList) {
+ // Get total count of the rows which meet the search criteria
+ long count = -1;
+
+ if (searchCriteria.isGetCount()) {
+ count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+ if (count == 0) {
+ return Collections.emptyList();
+ }
+ }
+
+ 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());
+ vList.setPageSize(query.getMaxResults());
+ vList.setSortBy(searchCriteria.getSortBy());
+ vList.setSortType(searchCriteria.getSortType());
+ vList.setStartIndex(query.getFirstResult());
+ vList.setTotalCount(count);
+ }
+
+ return resultList;
+ }
+
+ //If not efficient we need to review this and add jpa_named queries to get the count
+ public 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);
+
+ return (count == null) ? 0 : count;
+ }
+
+ protected abstract T mapViewToEntityBean(V viewBean, T t, int operationContext);
+
+ protected abstract V mapEntityToViewBean(V viewBean, T t);
+
+ protected T createEntityObject() {
+ try {
+ return tEntityClass.newInstance();
+ } catch (Throwable e) {
+ LOG.error("Error instantiating entity class. tEntityClass={}", tEntityClass.toString(), e);
+ }
+
+ return null;
+ }
+
+ protected V createViewObject() {
+ try {
+ return tViewClass.newInstance();
+ } catch (Throwable e) {
+ LOG.error("Error instantiating view class. tViewClass={}", tViewClass.toString(), e);
+ }
+
+ return null;
+ }
+
+ protected BaseDao<T> getDao() {
+ if (entityDao == null) {
+ throw new NullPointerException("entityDao is not injected by Spring!");
+ }
+
+ return entityDao;
+ }
+
+ protected V populateViewBean(T entityObj) {
+ V vObj = createViewObject();
+
+ vObj.setId(entityObj.getId());
+ vObj.setCreateTime(entityObj.getCreateTime());
+ vObj.setUpdateTime(entityObj.getUpdateTime());
+ vObj.setCreatedBy(getUserScreenName(entityObj.getAddedByUserId()));
+ vObj.setUpdatedBy(getUserScreenName(entityObj.getUpdatedByUserId()));
+
+ return mapEntityToViewBean(vObj, entityObj);
+ }
+
+ protected T populateEntityBeanForCreate(T entityObj, V vObj) {
+ if (!populateExistingBaseFields) {
+ entityObj.setCreateTime(DateUtil.getUTCDate());
+ entityObj.setUpdateTime(entityObj.getCreateTime());
+ entityObj.setAddedByUserId(ContextUtil.getCurrentUserId());
+ entityObj.setUpdatedByUserId(entityObj.getAddedByUserId());
+ } else {
+ XXPortalUser createdByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getCreatedBy());
+ XXPortalUser updByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getUpdatedBy());
+
+ entityObj.setId(vObj.getId());
+ entityObj.setCreateTime(vObj.getCreateTime() != null ? vObj.getCreateTime() : DateUtil.getUTCDate());
+ entityObj.setUpdateTime(vObj.getUpdateTime() != null ? vObj.getUpdateTime() : DateUtil.getUTCDate());
+ entityObj.setAddedByUserId(createdByUser != null ? createdByUser.getId() : ContextUtil.getCurrentUserId());
+ entityObj.setUpdatedByUserId(updByUser != null ? updByUser.getId() : ContextUtil.getCurrentUserId());
+ }
+
+ return mapViewToEntityBean(vObj, entityObj, OPERATION_CREATE_CONTEXT);
+ }
+
+ protected T populateEntityBeanForUpdate(T entityObj, V vObj) {
+ if (entityObj == null) {
+ throw restErrorUtil.createRESTException("No Object found to update.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ T ret = mapViewToEntityBean(vObj, entityObj, OPERATION_UPDATE_CONTEXT);
+
+ if (ret.getCreateTime() == null) {
+ ret.setCreateTime(DateUtil.getUTCDate());
+ }
+
+ if (ret.getAddedByUserId() == null) {
+ ret.setAddedByUserId(ContextUtil.getCurrentUserId());
+ }
+
+ if (!populateExistingBaseFields) {
+ ret.setUpdateTime(DateUtil.getUTCDate());
+ ret.setUpdatedByUserId(ContextUtil.getCurrentUserId());
+ }
+
+ return ret;
+ }
+
+ protected abstract void validateForCreate(V vObj);
+
+ /*
+ * Search Operations
+ *
+ */
+
+ protected abstract void validateForUpdate(V vObj, T entityObj);
+
+ protected T preDelete(Long id) {
+ T resource = getDao().getById(id);
+
+ if (resource == null) {
+ // Return without error
+ LOG.info("Delete ignored for non-existent Object, id={}", id);
+ }
+
+ return resource;
+ }
+
+ protected List<T> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<V> pList) {
+ // Get total count of the rows which meet the search criteria
+ long count = -1;
+
+ if (searchCriteria.isGetCount()) {
+ count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+ if (count == 0) {
+ 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);
+
+ if (pList != null) {
+ pList.setResultSize(resultList.size());
+ pList.setPageSize(query.getMaxResults());
+ pList.setSortBy(searchCriteria.getSortBy());
+ pList.setSortType(searchCriteria.getSortType());
+ pList.setStartIndex(query.getFirstResult());
+ pList.setTotalCount(count);
+ }
+
+ return resultList;
+ }
+
+ protected Query createQuery(String searchString, String sortString, SearchFilter searchCriteria, List<SearchField> searchFieldList, boolean isCountQuery) {
+ EntityManager em = getDao().getEntityManager();
+
+ return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria, searchFieldList, false, isCountQuery);
+ }
+
+ protected String getUserScreenName(Long userId) {
+ String ret = null;
+ XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
- if(xGroup != null) {
- ret = xGroup.getName();
- }
+ if (xPortalUser != null) {
+ ret = xPortalUser.getPublicScreenName();
- return ret;
- }
+ if (stringUtil.isEmpty(ret)) {
+ ret = xPortalUser.getFirstName();
- protected String getAccessTypeName(Long accessTypeDefId) {
- String ret = null;
+ if (stringUtil.isEmpty(ret)) {
+ ret = xPortalUser.getLoginId();
+ } else {
+ if (!stringUtil.isEmpty(xPortalUser.getLastName())) {
+ ret += (" " + xPortalUser.getLastName());
+ }
+ }
+ }
+ }
- XXAccessTypeDef accessTypeDef = accessTypeDefId == null ? null : daoMgr.getXXAccessTypeDef().getById(accessTypeDefId);
+ return ret;
+ }
- if(accessTypeDef != null) {
- ret = accessTypeDef.getName();
- }
+ protected String getUserName(Long userId) {
+ XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
- return ret;
- }
+ return xPortalUser != null ? xPortalUser.getLoginId() : null;
+ }
- protected String getConditionName(Long conditionDefId) {
- String ret = null;
+ protected String getGroupName(Long groupId) {
+ XXGroup xGroup = groupId == null ? null : daoMgr.getXXGroup().getById(groupId);
- XXPolicyConditionDef conditionDef = conditionDefId == null ? null : daoMgr.getXXPolicyConditionDef().getById(conditionDefId);
+ return xGroup != null ? xGroup.getName() : null;
+ }
- if(conditionDef != null) {
- ret = conditionDef.getName();
- }
+ protected String getAccessTypeName(Long accessTypeDefId) {
+ XXAccessTypeDef accessTypeDef = accessTypeDefId == null ? null : daoMgr.getXXAccessTypeDef().getById(accessTypeDefId);
- return ret;
- }
+ return accessTypeDef != null ? accessTypeDef.getName() : null;
+ }
- protected String getResourceName(Long resourceDefId) {
- String ret = null;
+ protected String getConditionName(Long conditionDefId) {
+ XXPolicyConditionDef conditionDef = conditionDefId == null ? null : daoMgr.getXXPolicyConditionDef().getById(conditionDefId);
- XXResourceDef resourceDef = resourceDefId == null ? null : daoMgr.getXXResourceDef().getById(resourceDefId);
+ return conditionDef != null ? conditionDef.getName() : null;
+ }
- if(resourceDef != null) {
- ret = resourceDef.getName();
- }
+ protected String getResourceName(Long resourceDefId) {
+ XXResourceDef resourceDef = resourceDefId == null ? null : daoMgr.getXXResourceDef().getById(resourceDefId);
- return ret;
- }
+ return resourceDef != null ? resourceDef.getName() : null;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
index 38edcea12..1ca1018ad 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
@@ -17,8 +17,6 @@
package org.apache.ranger.service;
-import java.util.Date;
-
import org.apache.ranger.common.AppConstants;
import org.apache.ranger.common.DateUtil;
import org.apache.ranger.common.JSONUtil;
@@ -27,136 +25,135 @@ import org.apache.ranger.common.RESTErrorUtil;
import org.apache.ranger.db.RangerDaoManager;
import org.apache.ranger.entity.XXDataHist;
import org.apache.ranger.plugin.model.RangerBaseModelObject;
-import org.apache.ranger.plugin.model.RangerPolicy;
-import org.apache.ranger.plugin.model.RangerService;
-import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataShare;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataShareInDataset;
import org.apache.ranger.plugin.model.RangerGds.RangerDataset;
import org.apache.ranger.plugin.model.RangerGds.RangerDatasetInProject;
-import org.apache.ranger.plugin.model.RangerGds.RangerDataShare;
import org.apache.ranger.plugin.model.RangerGds.RangerProject;
-import org.apache.ranger.plugin.model.RangerGds.RangerDataShareInDataset;
import org.apache.ranger.plugin.model.RangerGds.RangerSharedResource;
+import org.apache.ranger.plugin.model.RangerPolicy;
+import org.apache.ranger.plugin.model.RangerService;
+import org.apache.ranger.plugin.model.RangerServiceDef;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
+import java.util.Date;
+
@Service
@Scope("singleton")
public class RangerDataHistService {
+ public static final String ACTION_CREATE = "Create";
+ public static final String ACTION_UPDATE = "Update";
+ public static final String ACTION_DELETE = "Delete";
+
+ @Autowired
+ RESTErrorUtil restErrorUtil;
+
+ @Autowired
+ RangerDaoManager daoMgr;
+
+ @Autowired
+ JSONUtil jsonUtil;
+
+ public void createObjectDataHistory(RangerBaseModelObject baseModelObj, String action) {
+ if (baseModelObj == null || action == null) {
+ throw restErrorUtil.createRESTException("Error while creating DataHistory. " + "Object or Action can not be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ Integer classType = null;
+ String objectName = null;
+ String content = null;
+ Long objectId = baseModelObj.getId();
+ String objectGuid = baseModelObj.getGuid();
+ Date currentDate = DateUtil.getUTCDate();
+ XXDataHist xDataHist = new XXDataHist();
+
+ xDataHist.setObjectId(baseModelObj.getId());
+ xDataHist.setObjectGuid(objectGuid);
+ xDataHist.setCreateTime(currentDate);
+ xDataHist.setAction(action);
+ xDataHist.setVersion(baseModelObj.getVersion());
+ xDataHist.setUpdateTime(currentDate);
+ xDataHist.setFromTime(currentDate);
+
+ if (baseModelObj instanceof RangerServiceDef) {
+ RangerServiceDef serviceDef = (RangerServiceDef) baseModelObj;
+
+ objectName = serviceDef.getName();
+ classType = AppConstants.CLASS_TYPE_XA_SERVICE_DEF;
+ content = jsonUtil.writeObjectAsString(serviceDef);
+ } else if (baseModelObj instanceof RangerService) {
+ RangerService service = (RangerService) baseModelObj;
+
+ objectName = service.getName();
+ classType = AppConstants.CLASS_TYPE_XA_SERVICE;
+ content = jsonUtil.writeObjectAsString(service);
+ } else if (baseModelObj instanceof RangerPolicy) {
+ RangerPolicy policy = (RangerPolicy) baseModelObj;
+
+ objectName = policy.getName();
+ classType = AppConstants.CLASS_TYPE_RANGER_POLICY;
+
+ policy.setServiceType(policy.getServiceType());
+
+ content = jsonUtil.writeObjectAsString(policy);
+ } else if (baseModelObj instanceof RangerDataset) {
+ RangerDataset dataset = (RangerDataset) baseModelObj;
+
+ objectName = dataset.getName();
+ classType = AppConstants.CLASS_TYPE_GDS_DATASET;
+ content = jsonUtil.writeObjectAsString(dataset);
+ } else if (baseModelObj instanceof RangerProject) {
+ RangerProject project = (RangerProject) baseModelObj;
+
+ objectName = project.getName();
+ classType = AppConstants.CLASS_TYPE_GDS_PROJECT;
+ content = jsonUtil.writeObjectAsString(project);
+ } else if (baseModelObj instanceof RangerDataShare) {
+ RangerDataShare dataShare = (RangerDataShare) baseModelObj;
+
+ objectName = dataShare.getName();
+ classType = AppConstants.CLASS_TYPE_GDS_DATA_SHARE;
+ content = jsonUtil.writeObjectAsString(dataShare);
+ } else if (baseModelObj instanceof RangerSharedResource) {
+ RangerSharedResource sharedResource = (RangerSharedResource) baseModelObj;
+
+ objectName = sharedResource.getName();
+ classType = AppConstants.CLASS_TYPE_GDS_SHARED_RESOURCE;
+ content = jsonUtil.writeObjectAsString(sharedResource);
+ } else if (baseModelObj instanceof RangerDataShareInDataset) {
+ RangerDataShareInDataset dataShareInDataset = (RangerDataShareInDataset) baseModelObj;
+
+ objectName = dataShareInDataset.getGuid();
+ classType = AppConstants.CLASS_TYPE_GDS_DATA_SHARE_IN_DATASET;
+ content = jsonUtil.writeObjectAsString(dataShareInDataset);
+ } else if (baseModelObj instanceof RangerDatasetInProject) {
+ RangerDatasetInProject datasetInProject = (RangerDatasetInProject) baseModelObj;
+
+ objectName = datasetInProject.getGuid();
+ classType = AppConstants.CLASS_TYPE_GDS_DATASET_IN_PROJECT;
+ content = jsonUtil.writeObjectAsString(datasetInProject);
+ }
+
+ xDataHist.setObjectClassType(classType);
+ xDataHist.setObjectName(objectName);
+ xDataHist.setContent(content);
+
+ daoMgr.getXXDataHist().create(xDataHist);
+
+ if (ACTION_UPDATE.equalsIgnoreCase(action) || ACTION_DELETE.equalsIgnoreCase(action)) {
+ XXDataHist prevHist = daoMgr.getXXDataHist().findLatestByObjectClassTypeAndObjectId(classType, objectId);
+
+ if (prevHist == null) {
+ throw restErrorUtil.createRESTException("Error updating DataHistory Object. ObjectName: " + objectName, MessageEnums.DATA_NOT_UPDATABLE);
+ }
- @Autowired
- RESTErrorUtil restErrorUtil;
-
- @Autowired
- RangerDaoManager daoMgr;
-
- @Autowired
- JSONUtil jsonUtil;
-
- public static final String ACTION_CREATE = "Create";
- public static final String ACTION_UPDATE = "Update";
- public static final String ACTION_DELETE = "Delete";
-
- public void createObjectDataHistory(RangerBaseModelObject baseModelObj, String action) {
- if(baseModelObj == null || action == null) {
- throw restErrorUtil
- .createRESTException("Error while creating DataHistory. "
- + "Object or Action can not be null.",
- MessageEnums.DATA_NOT_FOUND);
- }
-
-
- Integer classType = null;
- String objectName = null;
- String content = null;
-
- Long objectId = baseModelObj.getId();
- String objectGuid = baseModelObj.getGuid();
- Date currentDate = DateUtil.getUTCDate();
-
- XXDataHist xDataHist = new XXDataHist();
-
- xDataHist.setObjectId(baseModelObj.getId());
- xDataHist.setObjectGuid(objectGuid);
- xDataHist.setCreateTime(currentDate);
- xDataHist.setAction(action);
- xDataHist.setVersion(baseModelObj.getVersion());
- xDataHist.setUpdateTime(currentDate);
- xDataHist.setFromTime(currentDate);
-
- if(baseModelObj instanceof RangerServiceDef) {
- RangerServiceDef serviceDef = (RangerServiceDef) baseModelObj;
- objectName = serviceDef.getName();
- classType = AppConstants.CLASS_TYPE_XA_SERVICE_DEF;
- content = jsonUtil.writeObjectAsString(serviceDef);
- } else if(baseModelObj instanceof RangerService) {
- RangerService service = (RangerService) baseModelObj;
- objectName = service.getName();
- classType = AppConstants.CLASS_TYPE_XA_SERVICE;
- content = jsonUtil.writeObjectAsString(service);
- } else if(baseModelObj instanceof RangerPolicy) {
- RangerPolicy policy = (RangerPolicy) baseModelObj;
- objectName = policy.getName();
- classType = AppConstants.CLASS_TYPE_RANGER_POLICY;
- policy.setServiceType(policy.getServiceType());
- content = jsonUtil.writeObjectAsString(policy);
- } else if (baseModelObj instanceof RangerDataset) {
- RangerDataset dataset = (RangerDataset) baseModelObj;
-
- objectName = dataset.getName();
- classType = AppConstants.CLASS_TYPE_GDS_DATASET;
- content = jsonUtil.writeObjectAsString(dataset);
- } else if (baseModelObj instanceof RangerProject) {
- RangerProject project = (RangerProject) baseModelObj;
-
- objectName = project.getName();
- classType = AppConstants.CLASS_TYPE_GDS_PROJECT;
- content = jsonUtil.writeObjectAsString(project);
- } else if (baseModelObj instanceof RangerDataShare) {
- RangerDataShare dataShare = (RangerDataShare) baseModelObj;
-
- objectName = dataShare.getName();
- classType = AppConstants.CLASS_TYPE_GDS_DATA_SHARE;
- content = jsonUtil.writeObjectAsString(dataShare);
- } else if (baseModelObj instanceof RangerSharedResource) {
- RangerSharedResource sharedResource = (RangerSharedResource) baseModelObj;
-
- objectName = sharedResource.getName();
- classType = AppConstants.CLASS_TYPE_GDS_SHARED_RESOURCE;
- content = jsonUtil.writeObjectAsString(sharedResource);
- } else if (baseModelObj instanceof RangerDataShareInDataset) {
- RangerDataShareInDataset dataShareInDataset = (RangerDataShareInDataset) baseModelObj;
-
- objectName = dataShareInDataset.getGuid();
- classType = AppConstants.CLASS_TYPE_GDS_DATA_SHARE_IN_DATASET;
- content = jsonUtil.writeObjectAsString(dataShareInDataset);
- } else if (baseModelObj instanceof RangerDatasetInProject) {
- RangerDatasetInProject datasetInProject = (RangerDatasetInProject) baseModelObj;
-
- objectName = datasetInProject.getGuid();
- classType = AppConstants.CLASS_TYPE_GDS_DATASET_IN_PROJECT;
- content = jsonUtil.writeObjectAsString(datasetInProject);
- }
-
- xDataHist.setObjectClassType(classType);
- xDataHist.setObjectName(objectName);
- xDataHist.setContent(content);
- xDataHist = daoMgr.getXXDataHist().create(xDataHist);
-
- if (ACTION_UPDATE.equalsIgnoreCase(action) || ACTION_DELETE.equalsIgnoreCase(action)) {
- XXDataHist prevHist = daoMgr.getXXDataHist().findLatestByObjectClassTypeAndObjectId(classType, objectId);
-
- if(prevHist == null) {
- throw restErrorUtil.createRESTException(
- "Error updating DataHistory Object. ObjectName: "
- + objectName, MessageEnums.DATA_NOT_UPDATABLE);
- }
-
- prevHist.setUpdateTime(currentDate);
- prevHist.setToTime(currentDate);
- prevHist.setObjectName(objectName);
- prevHist = daoMgr.getXXDataHist().update(prevHist);
- }
- }
+ prevHist.setUpdateTime(currentDate);
+ prevHist.setToTime(currentDate);
+ prevHist.setObjectName(objectName);
+ daoMgr.getXXDataHist().update(prevHist);
+ }
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java
index d94aab013..f0f4bec22 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java
@@ -29,24 +29,22 @@ import java.util.ArrayList;
import java.util.List;
public abstract class RangerGdsBaseModelService<T extends XXDBBase, V extends RangerGdsBaseModelObject> extends RangerAuditedModelService<T, V> {
-
protected RangerGdsBaseModelService(int classType) {
super(classType, -1);
}
-
protected RangerGdsBaseModelService(int classType, int parentClassType) {
super(classType, parentClassType);
- 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.CREATE_TIME_START, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
- searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
- searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_START, "obj.updateTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
- searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+ 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.CREATE_TIME_START, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+ searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+ searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_START, "obj.updateTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+ searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
- trxLogAttrs.put("description", new VTrxLogAttr("description", "Description"));
- trxLogAttrs.put("options", new VTrxLogAttr("options", "Options"));
+ trxLogAttrs.put("description", new VTrxLogAttr("description", "Description"));
+ trxLogAttrs.put("options", new VTrxLogAttr("options", "Options"));
trxLogAttrs.put("additionalInfo", new VTrxLogAttr("additionalInfo", "Additional info"));
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java
index 866c742ca..cfe623eae 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
@@ -61,36 +60,36 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
public RangerGdsDataShareInDatasetService() {
super(AppConstants.CLASS_TYPE_GDS_DATA_SHARE_IN_DATASET, AppConstants.CLASS_TYPE_GDS_DATASET);
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_IN_DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXService s", "obj.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, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
- searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.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, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
- searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d", "obj.datasetId = d.id"));
- searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
- searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d, XXGdsDatasetInProject dip", "obj.datasetId = d.id and d.id = dip.datasetId"));
- searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = 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, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = dip.datasetId and dip.projectId = p.id"));
- searchFields.add(new SearchField(SearchFilter.APPROVER, "obj.approverId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.CREATED_BY, "obj.addedByUserId",SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SHARE_STATUS, "obj.status", 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"));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_IN_DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXService s", "obj.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, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
+ searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.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, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
+ searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d", "obj.datasetId = d.id"));
+ searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d, XXGdsDatasetInProject dip", "obj.datasetId = d.id and d.id = dip.datasetId"));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = 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, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = dip.datasetId and dip.projectId = p.id"));
+ searchFields.add(new SearchField(SearchFilter.APPROVER, "obj.approverId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.CREATED_BY, "obj.addedByUserId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.SHARE_STATUS, "obj.status", 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"));
sortFields.add(new SortField(SearchFilter.DATA_SHARE_IN_DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
- trxLogAttrs.put("dataShareId", new VTrxLogAttr("dataShareId", "DataShare ID"));
- trxLogAttrs.put("datasetId", new VTrxLogAttr("datasetId", "Dataset ID"));
- trxLogAttrs.put("status", new VTrxLogAttr("status", "Status", true));
+ trxLogAttrs.put("dataShareId", new VTrxLogAttr("dataShareId", "DataShare ID"));
+ trxLogAttrs.put("datasetId", new VTrxLogAttr("datasetId", "Dataset ID"));
+ trxLogAttrs.put("status", new VTrxLogAttr("status", "Status", true));
trxLogAttrs.put("validitySchedule", new VTrxLogAttr("validitySchedule", "Validity Schedule"));
- trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
- trxLogAttrs.put("approver", new VTrxLogAttr("approver", "Approver"));
+ trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
+ trxLogAttrs.put("approver", new VTrxLogAttr("approver", "Approver"));
}
@Override
@@ -112,26 +111,53 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
}
@Override
- public XXGdsDataShareInDataset preDelete(Long id) {
- // Update ServiceVersionInfo for each service in the zone
- XXGdsDataShareInDataset ret = super.preDelete(id);
+ protected XXGdsDataShareInDataset mapViewToEntityBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj, int operationContext) {
+ XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
- // TODO:
+ if (xDataShare == null) {
+ throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
+ }
- return ret;
- }
+ XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
- @Override
- public String getParentObjectName(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
- Long datasetId = obj != null ? obj.getDatasetId() : null;
- XXGdsDataset dataset = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
+ if (xDataset == null) {
+ throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
+ }
- return dataset != null ? dataset.getName() : null;
+ xObj.setGuid(vObj.getGuid());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setDataShareId(vObj.getDataShareId());
+ xObj.setDatasetId(vObj.getDatasetId());
+ xObj.setStatus((short) vObj.getStatus().ordinal());
+ xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
+ xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
+ xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+ xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+
+ final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
+
+ xObj.setApproverId(user == null ? null : user.getId());
+
+ return xObj;
}
@Override
- public Long getParentObjectId(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
- return obj != null ? obj.getDatasetId() : null;
+ protected RangerDataShareInDataset mapEntityToViewBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setDataShareId(xObj.getDataShareId());
+ vObj.setDatasetId(xObj.getDatasetId());
+ vObj.setStatus(toShareStatus(xObj.getStatus()));
+ vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
+ vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
+ vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+ vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+ vObj.setApprover(getUserName(xObj.getApproverId()));
+
+ return vObj;
}
@Override
@@ -237,52 +263,26 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
}
@Override
- protected XXGdsDataShareInDataset mapViewToEntityBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj, int OPERATION_CONTEXT) {
- XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
-
- if (xDataShare == null) {
- throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
- }
-
- XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
+ public XXGdsDataShareInDataset preDelete(Long id) {
+ // Update ServiceVersionInfo for each service in the zone
+ XXGdsDataShareInDataset ret = super.preDelete(id);
- if (xDataset == null) {
- throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
- }
+ // TODO:
- xObj.setGuid(vObj.getGuid());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setDescription(vObj.getDescription());
- xObj.setDataShareId(vObj.getDataShareId());
- xObj.setDatasetId(vObj.getDatasetId());
- xObj.setStatus((short) vObj.getStatus().ordinal());
- xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
- xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
- xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
- xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+ return ret;
+ }
- final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
- xObj.setApproverId(user == null? null : user.getId());
+ @Override
+ public String getParentObjectName(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
+ Long datasetId = obj != null ? obj.getDatasetId() : null;
+ XXGdsDataset dataset = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
- return xObj;
+ return dataset != null ? dataset.getName() : null;
}
@Override
- protected RangerDataShareInDataset mapEntityToViewBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setVersion(xObj.getVersion());
- vObj.setDescription(xObj.getDescription());
- vObj.setDataShareId(xObj.getDataShareId());
- vObj.setDatasetId(xObj.getDatasetId());
- vObj.setStatus(toShareStatus(xObj.getStatus()));
- vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
- vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
- vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
- vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
- vObj.setApprover(getUserName(xObj.getApproverId()));
-
- return vObj;
+ public Long getParentObjectId(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
+ return obj != null ? obj.getDatasetId() : null;
}
public RangerDataShareInDataset getPopulatedViewObject(XXGdsDataShareInDataset xObj) {
@@ -292,7 +292,7 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
public RangerDataShareInDatasetList searchDataShareInDatasets(SearchFilter filter) {
LOG.debug("==> searchDataShareInDatasets({})", filter);
- RangerDataShareInDatasetList ret = new RangerDataShareInDatasetList();
+ RangerDataShareInDatasetList ret = new RangerDataShareInDatasetList();
List<XXGdsDataShareInDataset> datasets = super.searchResources(filter, searchFields, sortFields, ret);
if (datasets != null) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
index 861b624aa..153edfa14 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
@@ -57,36 +56,35 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa
public RangerGdsDataShareService() {
super(AppConstants.CLASS_TYPE_GDS_DATA_SHARE, AppConstants.CLASS_TYPE_XA_SERVICE);
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- 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.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.dataShareId"));
- 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.SERVICE_ID, "obj.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- 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.ZONE_ID, "obj.zoneId", 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.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.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"));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- sortFields.add(new SortField(SearchFilter.DATA_SHARE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ 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.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.dataShareId"));
+ 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.SERVICE_ID, "obj.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ 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.ZONE_ID, "obj.zoneId", 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.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.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"));
+
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ sortFields.add(new SortField(SearchFilter.DATA_SHARE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.DATA_SHARE_NAME, "obj.name"));
-
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
- trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
- trxLogAttrs.put("service", new VTrxLogAttr("service", "Service name"));
- trxLogAttrs.put("zone", new VTrxLogAttr("zone", "Zone name"));
- trxLogAttrs.put("conditionExpr", new VTrxLogAttr("conditionExpr", "Condition expression"));
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+ trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
+ trxLogAttrs.put("service", new VTrxLogAttr("service", "Service name"));
+ trxLogAttrs.put("zone", new VTrxLogAttr("zone", "Zone name"));
+ trxLogAttrs.put("conditionExpr", new VTrxLogAttr("conditionExpr", "Condition expression"));
trxLogAttrs.put("defaultAccessTypes", new VTrxLogAttr("defaultAccessTypes", "Default access types"));
- trxLogAttrs.put("defaultTagMasks", new VTrxLogAttr("defaultTagMasks", "Default tag masks"));
- trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
+ trxLogAttrs.put("defaultTagMasks", new VTrxLogAttr("defaultTagMasks", "Default tag masks"));
+ trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
}
@Override
@@ -108,26 +106,67 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa
}
@Override
- public XXGdsDataShare preDelete(Long id) {
- // Update ServiceVersionInfo for each service in the zone
- XXGdsDataShare ret = super.preDelete(id);
+ protected XXGdsDataShare mapViewToEntityBean(RangerDataShare vObj, XXGdsDataShare xObj, int operationContext) {
+ XXService xService = daoMgr.getXXService().findByName(vObj.getService());
- // TODO:
+ if (xService == null) {
+ throw restErrorUtil.createRESTException("No service found with name: " + vObj.getService(), MessageEnums.INVALID_INPUT_DATA);
+ }
- return ret;
- }
+ final Long zoneId;
- @Override
- public String getParentObjectName(RangerDataShare obj, RangerDataShare oldObj) {
- return obj != null ? obj.getService() : null;
+ if (StringUtils.isBlank(vObj.getZone())) {
+ zoneId = RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
+ } else {
+ XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().findByZoneName(vObj.getZone());
+
+ if (xSecurityZone == null) {
+ throw restErrorUtil.createRESTException("No security zone found with name: " + vObj.getZone(), MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ zoneId = xSecurityZone.getId();
+ }
+
+ xObj.setGuid(vObj.getGuid());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setName(vObj.getName());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
+ xObj.setServiceId(xService.getId());
+ xObj.setZoneId(zoneId);
+ xObj.setConditionExpr(vObj.getConditionExpr());
+ xObj.setDefaultAccessTypes(JsonUtils.objectToJson(vObj.getDefaultAccessTypes()));
+ xObj.setDefaultTagMasks(JsonUtils.objectToJson(vObj.getDefaultTagMasks()));
+ xObj.setTermsOfUse(vObj.getTermsOfUse());
+ xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+ xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+
+ return xObj;
}
@Override
- public Long getParentObjectId(RangerDataShare obj, RangerDataShare oldObj) {
- String serviceName = obj != null ? obj.getService() : null;
- XXService service = serviceName != null ? daoMgr.getXXService().findByName(serviceName) : null;
+ protected RangerDataShare mapEntityToViewBean(RangerDataShare vObj, XXGdsDataShare xObj) {
+ XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
+ XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().getById(xObj.getZoneId());
+ String serviceName = xService != null ? xService.getName() : null;
+ String zoneName = xSecurityZone != null ? xSecurityZone.getName() : null;
- return service != null ? service.getId() : null;
+ vObj.setGuid(xObj.getGuid());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setName(xObj.getName());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
+ vObj.setService(serviceName);
+ vObj.setZone(zoneName);
+ vObj.setConditionExpr(xObj.getConditionExpr());
+ vObj.setDefaultAccessTypes(JsonUtils.jsonToSetString(xObj.getDefaultAccessTypes()));
+ vObj.setDefaultTagMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getDefaultTagMasks()));
+ vObj.setTermsOfUse(xObj.getTermsOfUse());
+ vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+ vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+
+ return vObj;
}
@Override
@@ -229,68 +268,26 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa
}
@Override
- protected XXGdsDataShare mapViewToEntityBean(RangerDataShare vObj, XXGdsDataShare xObj, int OPERATION_CONTEXT) {
- XXService xService = daoMgr.getXXService().findByName(vObj.getService());
-
- if (xService == null) {
- throw restErrorUtil.createRESTException("No service found with name: " + vObj.getService(), MessageEnums.INVALID_INPUT_DATA);
- }
-
- final Long zoneId;
-
- if (StringUtils.isBlank(vObj.getZone())) {
- zoneId = RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
- } else {
- XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().findByZoneName(vObj.getZone());
-
- if (xSecurityZone == null) {
- throw restErrorUtil.createRESTException("No security zone found with name: " + vObj.getZone(), MessageEnums.INVALID_INPUT_DATA);
- }
-
- zoneId = xSecurityZone.getId();
- }
+ public XXGdsDataShare preDelete(Long id) {
+ // Update ServiceVersionInfo for each service in the zone
+ XXGdsDataShare ret = super.preDelete(id);
- xObj.setGuid(vObj.getGuid());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setName(vObj.getName());
- xObj.setDescription(vObj.getDescription());
- xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
- xObj.setServiceId(xService.getId());
- xObj.setZoneId(zoneId);
- xObj.setConditionExpr(vObj.getConditionExpr());
- xObj.setDefaultAccessTypes(JsonUtils.objectToJson(vObj.getDefaultAccessTypes()));
- xObj.setDefaultTagMasks(JsonUtils.objectToJson(vObj.getDefaultTagMasks()));
- xObj.setTermsOfUse(vObj.getTermsOfUse());
- xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
- xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+ // TODO:
- return xObj;
+ return ret;
}
@Override
- protected RangerDataShare mapEntityToViewBean(RangerDataShare vObj, XXGdsDataShare xObj) {
- XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
- XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().getById(xObj.getZoneId());
-
- String serviceName = xService != null ? xService.getName() : null;
- String zoneName = xSecurityZone != null ? xSecurityZone.getName() : null;
+ public String getParentObjectName(RangerDataShare obj, RangerDataShare oldObj) {
+ return obj != null ? obj.getService() : null;
+ }
- vObj.setGuid(xObj.getGuid());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setVersion(xObj.getVersion());
- vObj.setName(xObj.getName());
- vObj.setDescription(xObj.getDescription());
- vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
- vObj.setService(serviceName);
- vObj.setZone(zoneName);
- vObj.setConditionExpr(xObj.getConditionExpr());
- vObj.setDefaultAccessTypes(JsonUtils.jsonToSetString(xObj.getDefaultAccessTypes()));
- vObj.setDefaultTagMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getDefaultTagMasks()));
- vObj.setTermsOfUse(xObj.getTermsOfUse());
- vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
- vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+ @Override
+ public Long getParentObjectId(RangerDataShare obj, RangerDataShare oldObj) {
+ String serviceName = obj != null ? obj.getService() : null;
+ XXService service = serviceName != null ? daoMgr.getXXService().findByName(serviceName) : null;
- return vObj;
+ return service != null ? service.getId() : null;
}
public RangerDataShare getPopulatedViewObject(XXGdsDataShare xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java
index 73274ec5a..1038f3464 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
@@ -28,9 +27,9 @@ import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SortField;
import org.apache.ranger.common.view.VTrxLogAttr;
import org.apache.ranger.db.XXPortalUserDao;
-import org.apache.ranger.entity.XXGdsProject;
-import org.apache.ranger.entity.XXGdsDatasetInProject;
import org.apache.ranger.entity.XXGdsDataset;
+import org.apache.ranger.entity.XXGdsDatasetInProject;
+import org.apache.ranger.entity.XXGdsProject;
import org.apache.ranger.entity.XXPortalUser;
import org.apache.ranger.plugin.model.RangerGds.RangerDatasetInProject;
import org.apache.ranger.plugin.model.RangerValiditySchedule;
@@ -61,27 +60,27 @@ public class RangerGdsDatasetInProjectService extends RangerGdsBaseModelService<
public RangerGdsDatasetInProjectService() {
super(AppConstants.CLASS_TYPE_GDS_DATASET_IN_PROJECT, AppConstants.CLASS_TYPE_GDS_DATASET);
- searchFields.add(new SearchField(SearchFilter.DATASET_IN_PROJECT_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d", "obj.datasetId = d.id"));
- searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
- searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "obj.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsProject p", "obj.projectId = p.id"));
- searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsProject p", "obj.projectId = p.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.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, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ searchFields.add(new SearchField(SearchFilter.DATASET_IN_PROJECT_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d", "obj.datasetId = d.id"));
+ searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "obj.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsProject p", "obj.projectId = p.id"));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsProject p", "obj.projectId = p.id"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.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, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
sortFields.add(new SortField(SearchFilter.DATASET_IN_PROJECT_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
- trxLogAttrs.put("datasetId", new VTrxLogAttr("datasetId", "Dataset ID"));
- trxLogAttrs.put("projectId", new VTrxLogAttr("projectId", "Project ID"));
- trxLogAttrs.put("status", new VTrxLogAttr("status", "Status", true));
+ trxLogAttrs.put("datasetId", new VTrxLogAttr("datasetId", "Dataset ID"));
+ trxLogAttrs.put("projectId", new VTrxLogAttr("projectId", "Project ID"));
+ trxLogAttrs.put("status", new VTrxLogAttr("status", "Status", true));
trxLogAttrs.put("validitySchedule", new VTrxLogAttr("validitySchedule", "Validity Schedule"));
- trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
- trxLogAttrs.put("approver", new VTrxLogAttr("approver", "Approver"));
+ trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
+ trxLogAttrs.put("approver", new VTrxLogAttr("approver", "Approver"));
}
@Override
@@ -103,26 +102,53 @@ public class RangerGdsDatasetInProjectService extends RangerGdsBaseModelService<
}
@Override
- public XXGdsDatasetInProject preDelete(Long id) {
- // Update ServiceVersionInfo for each service in the zone
- XXGdsDatasetInProject ret = super.preDelete(id);
+ protected XXGdsDatasetInProject mapViewToEntityBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj, int operationContext) {
+ XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
- // TODO:
+ if (xDataset == null) {
+ throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
+ }
- return ret;
- }
+ XXGdsProject xProject = daoMgr.getXXGdsProject().getById(vObj.getProjectId());
- @Override
- public String getParentObjectName(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
- Long datasetId = obj != null ? obj.getDatasetId() : null;
- XXGdsDataset dataset = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
+ if (xProject == null) {
+ throw restErrorUtil.createRESTException("No project found with ID: " + vObj.getProjectId(), MessageEnums.INVALID_INPUT_DATA);
+ }
- return dataset != null ? dataset.getName() : null;
+ xObj.setGuid(vObj.getGuid());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setProjectId(vObj.getProjectId());
+ xObj.setDatasetId(vObj.getDatasetId());
+ xObj.setStatus((short) vObj.getStatus().ordinal());
+ xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
+ xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
+ xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+ xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+
+ final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
+
+ xObj.setApproverId(user == null ? null : user.getId());
+
+ return xObj;
}
@Override
- public Long getParentObjectId(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
- return obj != null ? obj.getDatasetId() : null;
+ protected RangerDatasetInProject mapEntityToViewBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setProjectId(xObj.getProjectId());
+ vObj.setDatasetId(xObj.getDatasetId());
+ vObj.setStatus(toShareStatus(xObj.getStatus()));
+ vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
+ vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
+ vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+ vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+ vObj.setApprover(getUserName(xObj.getApproverId()));
+
+ return vObj;
}
@Override
@@ -228,52 +254,26 @@ public class RangerGdsDatasetInProjectService extends RangerGdsBaseModelService<
}
@Override
- protected XXGdsDatasetInProject mapViewToEntityBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj, int OPERATION_CONTEXT) {
- XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
-
- if (xDataset == null) {
- throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
- }
-
- XXGdsProject xProject = daoMgr.getXXGdsProject().getById(vObj.getProjectId());
+ public XXGdsDatasetInProject preDelete(Long id) {
+ // Update ServiceVersionInfo for each service in the zone
+ XXGdsDatasetInProject ret = super.preDelete(id);
- if (xProject == null) {
- throw restErrorUtil.createRESTException("No project found with ID: " + vObj.getProjectId(), MessageEnums.INVALID_INPUT_DATA);
- }
+ // TODO:
- xObj.setGuid(vObj.getGuid());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setDescription(vObj.getDescription());
- xObj.setProjectId(vObj.getProjectId());
- xObj.setDatasetId(vObj.getDatasetId());
- xObj.setStatus((short) vObj.getStatus().ordinal());
- xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
- xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
- xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
- xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+ return ret;
+ }
- final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
- xObj.setApproverId(user == null? null : user.getId());
+ @Override
+ public String getParentObjectName(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
+ Long datasetId = obj != null ? obj.getDatasetId() : null;
+ XXGdsDataset dataset = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
- return xObj;
+ return dataset != null ? dataset.getName() : null;
}
@Override
- protected RangerDatasetInProject mapEntityToViewBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setVersion(xObj.getVersion());
- vObj.setDescription(xObj.getDescription());
- vObj.setProjectId(xObj.getProjectId());
- vObj.setDatasetId(xObj.getDatasetId());
- vObj.setStatus(toShareStatus(xObj.getStatus()));
- vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
- vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
- vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
- vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
- vObj.setApprover(getUserName(xObj.getApproverId()));
-
- return vObj;
+ public Long getParentObjectId(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
+ return obj != null ? obj.getDatasetId() : null;
}
public RangerDatasetInProject getPopulatedViewObject(XXGdsDatasetInProject xObj) {
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 0e3b733b1..8ace32a53 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
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
@@ -27,7 +26,7 @@ import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SortField;
import org.apache.ranger.common.view.VTrxLogAttr;
-import org.apache.ranger.entity.*;
+import org.apache.ranger.entity.XXGdsDataset;
import org.apache.ranger.plugin.model.RangerGds;
import org.apache.ranger.plugin.model.RangerGds.RangerDataset;
import org.apache.ranger.plugin.model.RangerValiditySchedule;
@@ -41,7 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
-import java.util.*;
+import java.util.List;
@Service
@Scope("singleton")
@@ -54,32 +53,32 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData
public RangerGdsDatasetService() {
super(AppConstants.CLASS_TYPE_GDS_DATASET);
- searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- 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.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.datasetId"));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.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_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.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.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.ZONE_ID, "dsh.zoneId", 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.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.datasetId"));
- 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"));
- sortFields.add(new SortField(SearchFilter.DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
+ searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ 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.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.datasetId"));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.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_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.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.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.ZONE_ID, "dsh.zoneId", 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.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.datasetId"));
+ 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"));
+ sortFields.add(new SortField(SearchFilter.DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name"));
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
- trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+ trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
}
@@ -102,13 +101,38 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData
}
@Override
- public XXGdsDataset preDelete(Long id) {
- // Update ServiceVersionInfo for each service in the zone
- XXGdsDataset ret = super.preDelete(id);
+ protected XXGdsDataset mapViewToEntityBean(RangerDataset vObj, XXGdsDataset xObj, int operationContext) {
+ xObj.setGuid(vObj.getGuid());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setName(vObj.getName());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
+ 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()));
- // TODO:
+ return xObj;
+ }
- return ret;
+ @Override
+ protected RangerDataset mapEntityToViewBean(RangerDataset vObj, XXGdsDataset xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setName(xObj.getName());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
+ 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;
}
@Override
@@ -170,38 +194,13 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData
}
@Override
- protected XXGdsDataset mapViewToEntityBean(RangerDataset vObj, XXGdsDataset xObj, int OPERATION_CONTEXT) {
- xObj.setGuid(vObj.getGuid());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setName(vObj.getName());
- xObj.setDescription(vObj.getDescription());
- xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
- 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;
- }
+ public XXGdsDataset preDelete(Long id) {
+ // Update ServiceVersionInfo for each service in the zone
+ XXGdsDataset ret = super.preDelete(id);
- @Override
- protected RangerDataset mapEntityToViewBean(RangerDataset vObj, XXGdsDataset xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setVersion(xObj.getVersion());
- vObj.setName(xObj.getName());
- vObj.setDescription(xObj.getDescription());
- vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
- 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()));
+ // TODO:
- return vObj;
+ return ret;
}
public RangerDataset getPopulatedViewObject(XXGdsDataset xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
index 4298834f9..7ef6ed214 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
@@ -53,29 +52,29 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj
public RangerGdsProjectService() {
super(AppConstants.CLASS_TYPE_GDS_PROJECT);
- 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.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_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShareInDataset dsid", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId"));
- 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.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.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.ZONE_ID, "dsh.zoneId", 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"));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- sortFields.add(new SortField(SearchFilter.PROJECT_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
+ 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.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_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShareInDataset dsid", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId"));
+ 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.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.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.ZONE_ID, "dsh.zoneId", 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"));
+
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ sortFields.add(new SortField(SearchFilter.PROJECT_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.PROJECT_NAME, "obj.name"));
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
- trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+ trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
}
@@ -98,13 +97,32 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj
}
@Override
- public XXGdsProject preDelete(Long id) {
- // Update ServiceVersionInfo for each service in the zone
- XXGdsProject ret = super.preDelete(id);
+ protected XXGdsProject mapViewToEntityBean(RangerProject vObj, XXGdsProject xObj, int operationContext) {
+ xObj.setGuid(vObj.getGuid());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setName(vObj.getName());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
+ xObj.setTermsOfUse(vObj.getTermsOfUse());
+ xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+ xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
- // TODO:
+ return xObj;
+ }
- return ret;
+ @Override
+ protected RangerProject mapEntityToViewBean(RangerProject vObj, XXGdsProject xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setName(xObj.getName());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
+ vObj.setTermsOfUse(xObj.getTermsOfUse());
+ vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+ vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+
+ return vObj;
}
@Override
@@ -166,32 +184,13 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj
}
@Override
- protected XXGdsProject mapViewToEntityBean(RangerProject vObj, XXGdsProject xObj, int OPERATION_CONTEXT) {
- xObj.setGuid(vObj.getGuid());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setName(vObj.getName());
- xObj.setDescription(vObj.getDescription());
- xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
- xObj.setTermsOfUse(vObj.getTermsOfUse());
- xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
- xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
-
- return xObj;
- }
+ public XXGdsProject preDelete(Long id) {
+ // Update ServiceVersionInfo for each service in the zone
+ XXGdsProject ret = super.preDelete(id);
- @Override
- protected RangerProject mapEntityToViewBean(RangerProject vObj, XXGdsProject xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setVersion(xObj.getVersion());
- vObj.setName(xObj.getName());
- vObj.setDescription(xObj.getDescription());
- vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
- vObj.setTermsOfUse(xObj.getTermsOfUse());
- vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
- vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+ // TODO:
- return vObj;
+ return ret;
}
public RangerProject getPopulatedViewObject(XXGdsProject xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
index 1c58692ef..f0b7cba72 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
@@ -17,12 +17,11 @@
package org.apache.ranger.service;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
-import org.apache.ranger.common.GUIDUtil;
import org.apache.ranger.common.AppConstants;
+import org.apache.ranger.common.GUIDUtil;
import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SortField;
@@ -56,40 +55,40 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX
public RangerGdsSharedResourceService() {
super(AppConstants.CLASS_TYPE_GDS_SHARED_RESOURCE, AppConstants.CLASS_TYPE_GDS_DATA_SHARE);
- searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXService s", "obj.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, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
- searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
- searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.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, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
- searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId"));
- searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.dataShareId = dsh.id and dsh.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, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = d.id"));
- searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId"));
- searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.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, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
+ searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXService s", "obj.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, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
+ searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+ searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.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, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
+ searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId"));
+ searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.dataShareId = dsh.id and dsh.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, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = d.id"));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId"));
+ searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.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, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_NAME, "obj.name"));
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
- trxLogAttrs.put("dataShareId", new VTrxLogAttr("dataShareId", "DataShare ID"));
- trxLogAttrs.put("resource", new VTrxLogAttr("resource", "Resource"));
- trxLogAttrs.put("subResource", new VTrxLogAttr("subResource", "Subresource"));
- trxLogAttrs.put("subResourceType", new VTrxLogAttr("subResourceType", "Subresource Type"));
- trxLogAttrs.put("conditionExpr", new VTrxLogAttr("conditionExpr", "Condition expression"));
- trxLogAttrs.put("accessTypes", new VTrxLogAttr("accessTypes", "Access types"));
- trxLogAttrs.put("rowFilter", new VTrxLogAttr("rowFilter", "Row filter"));
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+ trxLogAttrs.put("dataShareId", new VTrxLogAttr("dataShareId", "DataShare ID"));
+ trxLogAttrs.put("resource", new VTrxLogAttr("resource", "Resource"));
+ trxLogAttrs.put("subResource", new VTrxLogAttr("subResource", "Subresource"));
+ trxLogAttrs.put("subResourceType", new VTrxLogAttr("subResourceType", "Subresource Type"));
+ trxLogAttrs.put("conditionExpr", new VTrxLogAttr("conditionExpr", "Condition expression"));
+ trxLogAttrs.put("accessTypes", new VTrxLogAttr("accessTypes", "Access types"));
+ trxLogAttrs.put("rowFilter", new VTrxLogAttr("rowFilter", "Row filter"));
trxLogAttrs.put("subResourceMasks", new VTrxLogAttr("subResourceMasks", "Subresource Masks"));
- trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
+ trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
}
@Override
@@ -111,26 +110,53 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX
}
@Override
- public XXGdsSharedResource preDelete(Long id) {
- // Update ServiceVersionInfo for each service in the zone
- XXGdsSharedResource ret = super.preDelete(id);
-
- // TODO:
+ protected XXGdsSharedResource mapViewToEntityBean(RangerSharedResource vObj, XXGdsSharedResource xObj, int operationContext) {
+ XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
- return ret;
- }
+ if (xDataShare == null) {
+ throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
+ }
- @Override
- public String getParentObjectName(RangerSharedResource obj, RangerSharedResource oldObj) {
- Long dataShareId = obj != null ? obj.getDataShareId() : null;
- XXGdsDataShare dataShare = dataShareId != null ? daoMgr.getXXGdsDataShare().getById(dataShareId) : null;
+ xObj.setGuid(vObj.getGuid());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setName(vObj.getName());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setDataShareId(vObj.getDataShareId());
+ xObj.setResource(JsonUtils.mapToJson(vObj.getResource()));
+ xObj.setSubResource(JsonUtils.objectToJson(vObj.getSubResource()));
+ xObj.setSubResourceType(vObj.getSubResourceType());
+ xObj.setResourceSignature(new RangerPolicyResourceSignature(vObj).getSignature());
+ xObj.setConditionExpr(vObj.getConditionExpr());
+ xObj.setAccessTypes(JsonUtils.objectToJson(vObj.getAccessTypes()));
+ xObj.setRowFilter(JsonUtils.objectToJson(vObj.getRowFilter()));
+ xObj.setSubResourceMasks(JsonUtils.objectToJson(vObj.getSubResourceMasks()));
+ xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
+ xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+ xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
- return dataShare != null ? dataShare.getName() : null;
+ return xObj;
}
@Override
- public Long getParentObjectId(RangerSharedResource obj, RangerSharedResource oldObj) {
- return obj != null ? obj.getDataShareId() : null;
+ protected RangerSharedResource mapEntityToViewBean(RangerSharedResource vObj, XXGdsSharedResource xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setName(xObj.getName());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setDataShareId(xObj.getDataShareId());
+ vObj.setResource(JsonUtils.jsonToMapPolicyResource(xObj.getResource()));
+ vObj.setSubResource(JsonUtils.jsonToObject(xObj.getSubResource(), RangerPolicy.RangerPolicyResource.class));
+ vObj.setSubResourceType(xObj.getSubResourceType());
+ vObj.setConditionExpr(xObj.getConditionExpr());
+ vObj.setAccessTypes(JsonUtils.jsonToSetString(xObj.getAccessTypes()));
+ vObj.setRowFilter(JsonUtils.jsonToObject(xObj.getRowFilter(), RangerPolicy.RangerPolicyItemRowFilterInfo.class));
+ vObj.setSubResourceMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getSubResourceMasks()));
+ vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
+ vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+ vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+
+ return vObj;
}
@Override
@@ -214,53 +240,26 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX
}
@Override
- protected XXGdsSharedResource mapViewToEntityBean(RangerSharedResource vObj, XXGdsSharedResource xObj, int OPERATION_CONTEXT) {
- XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
-
- if (xDataShare == null) {
- throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
- }
+ public XXGdsSharedResource preDelete(Long id) {
+ // Update ServiceVersionInfo for each service in the zone
+ XXGdsSharedResource ret = super.preDelete(id);
- xObj.setGuid(vObj.getGuid());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setName(vObj.getName());
- xObj.setDescription(vObj.getDescription());
- xObj.setDataShareId(vObj.getDataShareId());
- xObj.setResource(JsonUtils.mapToJson(vObj.getResource()));
- xObj.setSubResource(JsonUtils.objectToJson(vObj.getSubResource()));
- xObj.setSubResourceType(vObj.getSubResourceType());
- xObj.setResourceSignature(new RangerPolicyResourceSignature(vObj).getSignature());
- xObj.setConditionExpr(vObj.getConditionExpr());
- xObj.setAccessTypes(JsonUtils.objectToJson(vObj.getAccessTypes()));
- xObj.setRowFilter(JsonUtils.objectToJson(vObj.getRowFilter()));
- xObj.setSubResourceMasks(JsonUtils.objectToJson(vObj.getSubResourceMasks()));
- xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
- xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
- xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+ // TODO:
- return xObj;
+ return ret;
}
@Override
- protected RangerSharedResource mapEntityToViewBean(RangerSharedResource vObj, XXGdsSharedResource xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setVersion(xObj.getVersion());
- vObj.setName(xObj.getName());
- vObj.setDescription(xObj.getDescription());
- vObj.setDataShareId(xObj.getDataShareId());
- vObj.setResource(JsonUtils.jsonToMapPolicyResource(xObj.getResource()));
- vObj.setSubResource(JsonUtils.jsonToObject(xObj.getSubResource(), RangerPolicy.RangerPolicyResource.class));
- vObj.setSubResourceType(xObj.getSubResourceType());
- vObj.setConditionExpr(xObj.getConditionExpr());
- vObj.setAccessTypes(JsonUtils.jsonToSetString(xObj.getAccessTypes()));
- vObj.setRowFilter(JsonUtils.jsonToObject(xObj.getRowFilter(), RangerPolicy.RangerPolicyItemRowFilterInfo.class));
- vObj.setSubResourceMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getSubResourceMasks()));
- vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
- vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
- vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+ public String getParentObjectName(RangerSharedResource obj, RangerSharedResource oldObj) {
+ Long dataShareId = obj != null ? obj.getDataShareId() : null;
+ XXGdsDataShare dataShare = dataShareId != null ? daoMgr.getXXGdsDataShare().getById(dataShareId) : null;
- return vObj;
+ return dataShare != null ? dataShare.getName() : null;
+ }
+
+ @Override
+ public Long getParentObjectId(RangerSharedResource obj, RangerSharedResource oldObj) {
+ return obj != null ? obj.getDataShareId() : null;
}
public RangerSharedResource getPopulatedViewObject(XXGdsSharedResource xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
index 9dc26ceb7..747abd223 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
@@ -17,13 +17,6 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.biz.RangerBizUtil;
@@ -47,273 +40,287 @@ import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.Query;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
@Service
public class RangerPluginInfoService {
+ private static final Logger LOG = LoggerFactory.getLogger(RangerPluginInfoService.class);
+
+ private final List<SortField> sortFields = new ArrayList<>();
+ private final List<SearchField> searchFields = new ArrayList<>();
+
+ @Autowired
+ RangerSearchUtil searchUtil;
+
+ @Autowired
+ RangerBizUtil bizUtil;
+
+ @Autowired
+ JSONUtil jsonUtil;
+
+ @Autowired
+ RangerDaoManager daoManager;
+
+ RangerPluginInfoService() {
+ searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "obj.serviceName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.PLUGIN_IP_ADDRESS, "obj.ipAddress", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+
+ sortFields.add(new SortField(SearchFilter.SERVICE_NAME, "obj.serviceName", true, SortField.SORT_ORDER.ASC));
+ sortFields.add(new SortField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", true, SortField.SORT_ORDER.ASC));
+ sortFields.add(new SortField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", true, SortField.SORT_ORDER.ASC));
+ }
+
+ public List<SearchField> getSearchFields() {
+ return searchFields;
+ }
+
+ public List<SortField> getSortFields() {
+ return sortFields;
+ }
+
+ public PList<RangerPluginInfo> searchRangerPluginInfo(SearchFilter searchFilter) {
+ PList<RangerPluginInfo> retList = new PList<>();
+ List<RangerPluginInfo> objList = new ArrayList<>();
+
+ List<XXService> servicesWithTagService = daoManager.getXXService().getAllServicesWithTagService();
+ String serviceTypeToSearch = searchFilter.getParam(SearchFilter.SERVICE_TYPE);
+ String clusterNameToSearch = searchFilter.getParam(SearchFilter.CLUSTER_NAME);
+
+ // Rebuild searchFilter without serviceType
+ if (StringUtils.isNotBlank(serviceTypeToSearch)) {
+ searchFilter.removeParam(SearchFilter.SERVICE_TYPE);
+ }
+
+ List<XXPluginInfo> xObjList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
+
+ List<Object[]> objectsList = null;
+
+ if (CollectionUtils.isNotEmpty(xObjList)) {
+ objectsList = daoManager.getXXServiceVersionInfo().getAllWithServiceNames();
+ }
+
+ for (XXPluginInfo xObj : xObjList) {
+ XXServiceVersionInfo xxServiceVersionInfo = null;
+ boolean hasAssociatedTagService = false;
+
+ if (CollectionUtils.isNotEmpty(objectsList)) {
+ for (Object[] objects : objectsList) {
+ if (objects.length == 2) {
+ if (xObj.getServiceName().equals(objects[1])) {
+ if (objects[0] instanceof XXServiceVersionInfo) {
+ xxServiceVersionInfo = (XXServiceVersionInfo) objects[0];
+
+ for (XXService service : servicesWithTagService) {
+ if (service.getName().equals(xObj.getServiceName())) {
+ hasAssociatedTagService = true;
+ break;
+ }
+ }
+ } else {
+ LOG.warn("Expected first object to be XXServiceVersionInfo, got {}", objects[0]);
+ }
+ break;
+ }
+ } else {
+ LOG.warn("Expected 2 objects in the list returned by getAllWithServiceNames(), received {}", objects.length);
+ }
+ }
+ }
- private static final Logger LOG = LoggerFactory.getLogger(RangerPluginInfoService.class);
+ RangerPluginInfo obj = populateViewObjectWithServiceVersionInfo(xObj, xxServiceVersionInfo, hasAssociatedTagService);
- @Autowired
- RangerSearchUtil searchUtil;
+ if (StringUtils.isBlank(serviceTypeToSearch) || StringUtils.equals(serviceTypeToSearch, obj.getServiceType())) {
+ objList.add(obj);
+ }
- @Autowired
- RangerBizUtil bizUtil;
+ if (StringUtils.isNotBlank(clusterNameToSearch)) {
+ Map<String, String> infoMap = obj.getInfo();
+ Set<Map.Entry<String, String>> infoSet = infoMap.entrySet();
- @Autowired
- JSONUtil jsonUtil;
+ for (Map.Entry<String, String> info : infoSet) {
+ if (StringUtils.equals(info.getKey(), SearchFilter.CLUSTER_NAME)) {
+ if (!StringUtils.equals(info.getValue(), clusterNameToSearch)) {
+ objList.remove(obj);
+ }
+ break;
+ }
+ }
+ }
+ }
- @Autowired
- RangerDaoManager daoManager;
+ retList.setList(objList);
- private List<SortField> sortFields = new ArrayList<SortField>();
- private List<SearchField> searchFields = new ArrayList<SearchField>();
+ return retList;
+ }
- RangerPluginInfoService() {
+ public RangerPluginInfo populateViewObject(XXPluginInfo xObj) {
+ RangerPluginInfo ret = new RangerPluginInfo();
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "obj.serviceName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.PLUGIN_IP_ADDRESS, "obj.ipAddress", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ ret.setId(xObj.getId());
+ ret.setCreateTime(xObj.getCreateTime());
+ ret.setUpdateTime(xObj.getUpdateTime());
+ ret.setServiceName(xObj.getServiceName());
- sortFields.add(new SortField(SearchFilter.SERVICE_NAME, "obj.serviceName", true, SortField.SORT_ORDER.ASC));
- sortFields.add(new SortField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", true, SortField.SORT_ORDER.ASC));
- sortFields.add(new SortField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", true, SortField.SORT_ORDER.ASC));
+ String serviceType = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
- }
+ if (StringUtils.isNotBlank(serviceType)) {
+ ret.setServiceType(serviceType);
+ }
- public List<SearchField> getSearchFields() {
- return searchFields;
- }
+ ret.setHostName(xObj.getHostName());
+ ret.setAppType(xObj.getAppType());
+ ret.setIpAddress(xObj.getIpAddress());
+ ret.setInfo(jsonStringToMap(xObj.getInfo(), null, false));
- public List<SortField> getSortFields() {
- return sortFields;
- }
+ return ret;
+ }
- public PList<RangerPluginInfo> searchRangerPluginInfo(SearchFilter searchFilter) {
- PList<RangerPluginInfo> retList = new PList<RangerPluginInfo>();
- List<RangerPluginInfo> objList = new ArrayList<RangerPluginInfo>();
+ public XXPluginInfo populateDBObject(RangerPluginInfo modelObj) {
+ XXPluginInfo ret = new XXPluginInfo();
- List<XXService> servicesWithTagService = daoManager.getXXService().getAllServicesWithTagService();
+ ret.setId(modelObj.getId());
+ ret.setCreateTime(modelObj.getCreateTime());
+ ret.setUpdateTime(modelObj.getUpdateTime());
+ ret.setServiceName(modelObj.getServiceName());
+ ret.setHostName(modelObj.getHostName());
+ ret.setAppType(modelObj.getAppType());
+ ret.setIpAddress(modelObj.getIpAddress());
+ ret.setInfo(mapToJsonString(modelObj.getInfo()));
- // Rebuild searchFilter without serviceType
+ return ret;
+ }
- String serviceTypeToSearch = searchFilter.getParam(SearchFilter.SERVICE_TYPE);
- if (StringUtils.isNotBlank(serviceTypeToSearch)) {
- searchFilter.removeParam(SearchFilter.SERVICE_TYPE);
- }
- String clusterNameToSearch = searchFilter.getParam(SearchFilter.CLUSTER_NAME);
-
- List<XXPluginInfo> xObjList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
-
- List<Object[]> objectsList = null;
- if (CollectionUtils.isNotEmpty(xObjList)) {
- objectsList = daoManager.getXXServiceVersionInfo().getAllWithServiceNames();
- }
-
- for (XXPluginInfo xObj : xObjList) {
- XXServiceVersionInfo xxServiceVersionInfo = null;
- boolean hasAssociatedTagService = false;
-
- if (CollectionUtils.isNotEmpty(objectsList)) {
- for (Object[] objects : objectsList) {
- if (objects.length == 2) {
- if (xObj.getServiceName().equals(objects[1])) {
- if (objects[0] instanceof XXServiceVersionInfo) {
- xxServiceVersionInfo = (XXServiceVersionInfo) objects[0];
- for (XXService service : servicesWithTagService) {
- if (service.getName().equals(xObj.getServiceName())) {
- hasAssociatedTagService = true;
- break;
- }
- }
- } else {
- LOG.warn("Expected first object to be XXServiceVersionInfo, got " + objects[0]);
- }
- break;
- }
- } else {
- LOG.warn("Expected 2 objects in the list returned by getAllWithServiceNames(), received " + objects.length);
- }
- }
- }
-
- RangerPluginInfo obj = populateViewObjectWithServiceVersionInfo(xObj, xxServiceVersionInfo, hasAssociatedTagService);
-
- if (StringUtils.isBlank(serviceTypeToSearch) || StringUtils.equals(serviceTypeToSearch, obj.getServiceType())) {
- objList.add(obj);
- }
+ private RangerPluginInfo populateViewObjectWithServiceVersionInfo(XXPluginInfo xObj, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
+ RangerPluginInfo ret = new RangerPluginInfo();
+
+ ret.setId(xObj.getId());
+ ret.setCreateTime(xObj.getCreateTime());
+ ret.setUpdateTime(xObj.getUpdateTime());
+ ret.setServiceName(xObj.getServiceName());
+
+ String serviceDefName = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
+
+ if (StringUtils.isNotBlank(serviceDefName)) {
+ ret.setServiceType(serviceDefName);
+
+ XXServiceDef xxServiceDef = daoManager.getXXServiceDef().findByName(serviceDefName);
+
+ ret.setServiceTypeDisplayName(xxServiceDef.getDisplayName());
+ }
+
+ ret.setHostName(xObj.getHostName());
+ ret.setAppType(xObj.getAppType());
+ ret.setIpAddress(xObj.getIpAddress());
+ ret.setInfo(jsonStringToMap(xObj.getInfo(), xxServiceVersionInfo, hasAssociatedTagService));
+
+ XXService xxService = daoManager.getXXService().findByName(ret.getServiceName());
+
+ if (xxService != null) {
+ ret.setServiceDisplayName(xxService.getDisplayName());
+ }
+
+ return ret;
+ }
+
+ private List<XXPluginInfo> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<RangerPluginInfo> pList) {
+ // Get total count of the rows which meet the search criteria
+ long count = -1;
+
+ if (searchCriteria.isGetCount()) {
+ count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+ if (count == 0) {
+ return Collections.emptyList();
+ }
+ }
+
+ String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
+ String queryStr = "SELECT obj FROM " + XXPluginInfo.class.getName() + " obj ";
+ Query query = createQuery(queryStr, sortClause, searchCriteria, searchFieldList, false);
+ List<XXPluginInfo> resultList = daoManager.getXXPluginInfo().executeQueryInSecurityContext(XXPluginInfo.class, query);
+
+ if (pList != null) {
+ pList.setResultSize(resultList.size());
+ pList.setPageSize(query.getMaxResults());
+ pList.setSortBy(searchCriteria.getSortBy());
+ pList.setSortType(searchCriteria.getSortType());
+ pList.setStartIndex(query.getFirstResult());
+ pList.setTotalCount(count);
+ }
+
+ return resultList;
+ }
+
+ private Query createQuery(String searchString, String sortString, SearchFilter searchCriteria, List<SearchField> searchFieldList, boolean isCountQuery) {
+ EntityManager em = daoManager.getEntityManager();
+
+ return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria, searchFieldList, false, isCountQuery);
+ }
+
+ private long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
+ String countQueryStr = "SELECT COUNT(obj) FROM " + XXPluginInfo.class.getName() + " obj ";
+ Query query = createQuery(countQueryStr, null, searchCriteria, searchFieldList, true);
+ Long count = daoManager.getXXPluginInfo().executeCountQueryInSecurityContext(XXPluginInfo.class, query);
+
+ if (count == null) {
+ return 0;
+ }
+
+ return count;
+ }
+
+ private String mapToJsonString(Map<String, String> map) {
+ String ret = null;
+
+ if (map != null) {
+ try {
+ ret = jsonUtil.readMapToString(map);
+ } catch (Exception excp) {
+ LOG.error("Failed to convert map to JSON string: {}", map, excp);
+ }
+ }
+
+ return ret;
+ }
+
+ private Map<String, String> jsonStringToMap(String jsonStr, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
+ Map<String, String> ret = null;
- if (StringUtils.isNotBlank(clusterNameToSearch)) {
- Map<String, String> infoMap = obj.getInfo();
- Set<Map.Entry<String, String>> infoSet = infoMap.entrySet();
- for (Map.Entry<String, String> info : infoSet) {
- if (StringUtils.equals(info.getKey(), SearchFilter.CLUSTER_NAME)) {
- if (!StringUtils.equals(info.getValue(), clusterNameToSearch)) {
- objList.remove(obj);
- }
- break;
- }
- }
- }
- }
-
- retList.setList(objList);
-
- return retList;
- }
-
- public RangerPluginInfo populateViewObject(XXPluginInfo xObj) {
- RangerPluginInfo ret = new RangerPluginInfo();
- ret.setId(xObj.getId());
- ret.setCreateTime(xObj.getCreateTime());
- ret.setUpdateTime(xObj.getUpdateTime());
- ret.setServiceName(xObj.getServiceName());
-
- String serviceType = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
- if (StringUtils.isNotBlank(serviceType)) {
- ret.setServiceType(serviceType);
+ try {
+ ret = jsonUtil.jsonToMap(jsonStr);
+
+ if (xxServiceVersionInfo != null) {
+ Long latestPolicyVersion = xxServiceVersionInfo.getPolicyVersion();
+ Date lastPolicyUpdateTime = xxServiceVersionInfo.getPolicyUpdateTime();
+ Long latestTagVersion = xxServiceVersionInfo.getTagVersion();
+ Date lastTagUpdateTime = xxServiceVersionInfo.getTagUpdateTime();
+ Long latestGdsVersion = xxServiceVersionInfo.getGdsVersion();
+ Date lastGdsUpdateTime = xxServiceVersionInfo.getGdsUpdateTime();
+
+ ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_POLICY_VERSION, Long.toString(latestPolicyVersion));
+ ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_POLICY_UPDATE_TIME, Long.toString(lastPolicyUpdateTime.getTime()));
+ ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_GDS_VERSION, Long.toString(latestGdsVersion));
+ ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_GDS_UPDATE_TIME, Long.toString(lastGdsUpdateTime.getTime()));
+
+ if (hasAssociatedTagService) {
+ ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION, Long.toString(latestTagVersion));
+ ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME, Long.toString(lastTagUpdateTime.getTime()));
+ } else {
+ ret.remove(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION);
+ ret.remove(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME);
}
- ret.setHostName(xObj.getHostName());
- ret.setAppType(xObj.getAppType());
- ret.setIpAddress(xObj.getIpAddress());
- ret.setInfo(jsonStringToMap(xObj.getInfo(), null, false));
- return ret;
- }
-
- public XXPluginInfo populateDBObject(RangerPluginInfo modelObj) {
- XXPluginInfo ret = new XXPluginInfo();
- ret.setId(modelObj.getId());
- ret.setCreateTime(modelObj.getCreateTime());
- ret.setUpdateTime(modelObj.getUpdateTime());
- ret.setServiceName(modelObj.getServiceName());
- ret.setHostName(modelObj.getHostName());
- ret.setAppType(modelObj.getAppType());
- ret.setIpAddress(modelObj.getIpAddress());
- ret.setInfo(mapToJsonString(modelObj.getInfo()));
- return ret;
- }
-
- private RangerPluginInfo populateViewObjectWithServiceVersionInfo(XXPluginInfo xObj, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
- RangerPluginInfo ret = new RangerPluginInfo();
- ret.setId(xObj.getId());
- ret.setCreateTime(xObj.getCreateTime());
- ret.setUpdateTime(xObj.getUpdateTime());
- ret.setServiceName(xObj.getServiceName());
-
- String serviceDefName = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
- if (StringUtils.isNotBlank(serviceDefName)) {
- ret.setServiceType(serviceDefName);
- XXServiceDef xxServiceDef = daoManager.getXXServiceDef().findByName(serviceDefName);
-
- ret.setServiceTypeDisplayName(xxServiceDef.getDisplayName());
- }
- ret.setHostName(xObj.getHostName());
- ret.setAppType(xObj.getAppType());
- ret.setIpAddress(xObj.getIpAddress());
- ret.setInfo(jsonStringToMap(xObj.getInfo(), xxServiceVersionInfo, hasAssociatedTagService));
-
- XXService xxService = daoManager.getXXService().findByName(ret.getServiceName());
- if (xxService != null) {
- ret.setServiceDisplayName(xxService.getDisplayName());
- }
- return ret;
- }
-
- private List<XXPluginInfo> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<RangerPluginInfo> pList) {
-
- // Get total count of the rows which meet the search criteria
- long count = -1;
- if (searchCriteria.isGetCount()) {
- count = getCountForSearchQuery(searchCriteria, searchFieldList);
- if (count == 0) {
- return Collections.emptyList();
- }
- }
-
- String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
-
- String queryStr = "SELECT obj FROM " + XXPluginInfo.class.getName() + " obj ";
- Query query = createQuery(queryStr, sortClause, searchCriteria, searchFieldList, false);
-
- List<XXPluginInfo> resultList = daoManager.getXXPluginInfo().executeQueryInSecurityContext(XXPluginInfo.class, query);
-
- if (pList != null) {
- pList.setResultSize(resultList.size());
- pList.setPageSize(query.getMaxResults());
- pList.setSortBy(searchCriteria.getSortBy());
- pList.setSortType(searchCriteria.getSortType());
- pList.setStartIndex(query.getFirstResult());
- pList.setTotalCount(count);
- }
- return resultList;
- }
-
- private Query createQuery(String searchString, String sortString, SearchFilter searchCriteria,
- List<SearchField> searchFieldList, boolean isCountQuery) {
-
- EntityManager em = daoManager.getEntityManager();
- return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria,
- searchFieldList, false, isCountQuery);
- }
-
- private long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
-
- String countQueryStr = "SELECT COUNT(obj) FROM " + XXPluginInfo.class.getName() + " obj ";
-
- Query query = createQuery(countQueryStr, null, searchCriteria, searchFieldList, true);
- Long count = daoManager.getXXPluginInfo().executeCountQueryInSecurityContext(XXPluginInfo.class, query);
-
- if (count == null) {
- return 0;
- }
- return count;
- }
-
- private String mapToJsonString(Map<String, String> map) {
- String ret = null;
-
- if(map != null) {
- try {
- ret = jsonUtil.readMapToString(map);
- } catch(Exception excp) {
- LOG.error("Failed to convert map to JSON string: '" + map + "'", excp);
- }
- }
-
- return ret;
- }
-
- private Map<String, String> jsonStringToMap(String jsonStr, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
-
- Map<String, String> ret = null;
-
- try {
- ret = jsonUtil.jsonToMap(jsonStr);
-
- if (xxServiceVersionInfo != null) {
- Long latestPolicyVersion = xxServiceVersionInfo.getPolicyVersion();
- Date lastPolicyUpdateTime = xxServiceVersionInfo.getPolicyUpdateTime();
- Long latestTagVersion = xxServiceVersionInfo.getTagVersion();
- Date lastTagUpdateTime = xxServiceVersionInfo.getTagUpdateTime();
- Long latestGdsVersion = xxServiceVersionInfo.getGdsVersion();
- Date lastGdsUpdateTime = xxServiceVersionInfo.getGdsUpdateTime();
-
- ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_POLICY_VERSION, Long.toString(latestPolicyVersion));
- ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_POLICY_UPDATE_TIME, Long.toString(lastPolicyUpdateTime.getTime()));
- ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_GDS_VERSION, Long.toString(latestGdsVersion));
- ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_GDS_UPDATE_TIME, Long.toString(lastGdsUpdateTime.getTime()));
- if (hasAssociatedTagService) {
- ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION, Long.toString(latestTagVersion));
- ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME, Long.toString(lastTagUpdateTime.getTime()));
- } else {
- ret.remove(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION);
- ret.remove(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME);
- }
- }
- }
- catch(Exception excp) {
- LOG.error("Failed to convert JSON string to Map: '" + jsonStr + "'", excp);
- }
-
- return ret;
- }
-}
\ No newline at end of file
+ }
+ } catch (Exception excp) {
+ LOG.error("Failed to convert JSON string to Map: {}", jsonStr, excp);
+ }
+
+ return ret;
+ }
+}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java
index ece9997e7..e9e21a8cb 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java
@@ -31,41 +31,36 @@ import org.springframework.stereotype.Service;
@Service
@Scope("singleton")
-public class RangerPolicyLabelsService<T extends XXPolicyLabel, V extends RangerPolicy>
- extends RangerBaseModelService<T, V> {
+public class RangerPolicyLabelsService<T extends XXPolicyLabel, V extends RangerPolicy> extends RangerBaseModelService<T, V> {
+ @Autowired
+ RangerAuditFields<?> rangerAuditFields;
- @Autowired
- RangerAuditFields<?> rangerAuditFields;
+ public RangerPolicyLabelsService() {
+ super();
- public RangerPolicyLabelsService() {
- super();
- searchFields.add(
- new SearchField(SearchFilter.POLICY_LABEL, "obj.policyLabel", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
- sortFields.add(new SortField(SearchFilter.POLICY_LABEL_ID, "obj.id", true, SORT_ORDER.ASC));
- }
+ searchFields.add(new SearchField(SearchFilter.POLICY_LABEL, "obj.policyLabel", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+ sortFields.add(new SortField(SearchFilter.POLICY_LABEL_ID, "obj.id", true, SORT_ORDER.ASC));
+ }
- @Override
- protected T mapViewToEntityBean(V viewBean, T t, int OPERATION_CONTEXT) {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ protected T mapViewToEntityBean(V viewBean, T t, int operationContext) {
+ // TODO Auto-generated method stub
+ return null;
+ }
- @Override
- protected V mapEntityToViewBean(V viewBean, T t) {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ protected V mapEntityToViewBean(V viewBean, T t) {
+ // TODO Auto-generated method stub
+ return null;
+ }
- @Override
- protected void validateForCreate(V vObj) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- protected void validateForUpdate(V vObj, T entityObj) {
- // TODO Auto-generated method stub
-
- }
+ @Override
+ protected void validateForCreate(V vObj) {
+ // TODO Auto-generated method stub
+ }
+ @Override
+ protected void validateForUpdate(V vObj, T entityObj) {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index a0381da8b..193face94 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.ranger.biz.RangerPolicyRetriever;
import org.apache.ranger.entity.XXPolicy;
import org.apache.ranger.plugin.model.RangerPolicy;
@@ -27,39 +26,38 @@ import org.springframework.stereotype.Service;
@Service
@Scope("singleton")
public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, RangerPolicy> {
-
- public RangerPolicyService() {
- super();
- }
-
- @Override
- protected XXPolicy mapViewToEntityBean(RangerPolicy vObj, XXPolicy xObj, int OPERATION_CONTEXT) {
- return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
- }
-
- @Override
- protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicy xObj) {
- return super.mapEntityToViewBean(vObj, xObj);
- }
-
- @Override
- protected void validateForCreate(RangerPolicy vObj) {
- // TODO Auto-generated method stub
- }
-
- @Override
- protected void validateForUpdate(RangerPolicy vObj, XXPolicy entityObj) {
- // TODO Auto-generated method stub
- }
-
- @Override
- protected RangerPolicy populateViewBean(XXPolicy xPolicy) {
- RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
-
- return retriever.getPolicy(xPolicy);
- }
-
- public RangerPolicy getPopulatedViewObject(XXPolicy xPolicy) {
- return this.populateViewBean(xPolicy);
- }
+ public RangerPolicyService() {
+ super();
+ }
+
+ public RangerPolicy getPopulatedViewObject(XXPolicy xPolicy) {
+ return this.populateViewBean(xPolicy);
+ }
+
+ @Override
+ protected XXPolicy mapViewToEntityBean(RangerPolicy vObj, XXPolicy xObj, int operationContext) {
+ return super.mapViewToEntityBean(vObj, xObj, operationContext);
+ }
+
+ @Override
+ protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicy xObj) {
+ return super.mapEntityToViewBean(vObj, xObj);
+ }
+
+ @Override
+ protected RangerPolicy populateViewBean(XXPolicy xPolicy) {
+ RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
+
+ return retriever.getPolicy(xPolicy);
+ }
+
+ @Override
+ protected void validateForCreate(RangerPolicy vObj) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ protected void validateForUpdate(RangerPolicy vObj, XXPolicy entityObj) {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
index 7d5727a76..03ec978ac 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
@@ -20,15 +20,20 @@ package org.apache.ranger.service;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
-import org.apache.ranger.common.*;
+import org.apache.ranger.common.AppConstants;
+import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SearchField.DATA_TYPE;
import org.apache.ranger.common.SearchField.SEARCH_TYPE;
+import org.apache.ranger.common.SortField;
import org.apache.ranger.common.SortField.SORT_ORDER;
import org.apache.ranger.common.view.VTrxLogAttr;
import org.apache.ranger.entity.XXPolicyBase;
import org.apache.ranger.entity.XXSecurityZone;
import org.apache.ranger.entity.XXService;
import org.apache.ranger.entity.XXServiceDef;
+import org.apache.ranger.plugin.model.RangerBaseModelObject;
import org.apache.ranger.plugin.model.RangerPolicy;
import org.apache.ranger.plugin.model.RangerSecurityZone;
import org.apache.ranger.plugin.util.SearchFilter;
@@ -37,236 +42,228 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.util.Map;
public abstract class RangerPolicyServiceBase<T extends XXPolicyBase, V extends RangerPolicy> extends RangerAuditedModelService<T, V> {
-
public static final String OPTION_POLICY_VALIDITY_SCHEDULES = "POLICY_VALIDITY_SCHEDULES";
@Autowired
- GUIDUtil guidUtil;
-
- public RangerPolicyServiceBase() {
- super(AppConstants.CLASS_TYPE_RANGER_POLICY, AppConstants.CLASS_TYPE_XA_SERVICE);
-
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "xSvcDef.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
- "XXServiceDef xSvcDef, XXService xSvc", "xSvc.type = xSvcDef.id and xSvc.id = obj.service"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, "xSvc.type", DATA_TYPE.INTEGER,
- SEARCH_TYPE.FULL, "XXService xSvc", "xSvc.id = obj.service"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "xSvc.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
- "XXService xSvc", "xSvc.id = obj.service"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "xSvc.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL,
- "XXService xSvc", "xSvc.id = obj.service"));
- searchFields
- .add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
- //might need updation
- /*searchFields.add(new SearchField(SearchFilter.IS_RECURSIVE,"xPolRes.isRecursive",DATA_TYPE.BOOLEAN,SEARCH_TYPE.FULL,
- "XXPolicyResource xPolRes","obj.id=xPolRes.policyId"));*/
- searchFields.add(new SearchField(SearchFilter.POLICY_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.POLICY_NAME, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.USER, "xUser.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
- "XXUser xUser, XXPolicyRefUser refUser", "obj.id = refUser.policyId "
- + "and xUser.id = refUser.userId"));
- searchFields.add(new SearchField(SearchFilter.GROUP, "xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
- "XXGroup xGrp , XXPolicyRefGroup refGroup", "obj.id = refGroup.policyId "
- + "and xGrp.id = refGroup.groupId"));
- searchFields.add(new SearchField(SearchFilter.ROLE, "xRole.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
- "XXRole xRole , XXPolicyRefRole refRole", "obj.id = refRole.policyId "
- + "and xRole.id = refRole.roleId"));
- //might need updation
- /*searchFields.add(new SearchField(SearchFilter.POL_RESOURCE, "resMap.value", DATA_TYPE.STRING,
- SEARCH_TYPE.PARTIAL, "XXPolicyResourceMap resMap, XXPolicyResource polRes",
- "resMap.resourceId = polRes.id and polRes.policyId = obj.id"));
- /*searchFields.add(new SearchField(SearchFilter.POLICY_LABELS_PARTIAL, "obj.label_name", DATA_TYPE.STRING,
- SEARCH_TYPE.PARTIAL));*/
- searchFields.add(new SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING,
- SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField(SearchFilter.POLICY_TYPE, "obj.policyType", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "xZone.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
- "XXSecurityZone xZone", "xZone.id = obj.zoneId"));
- searchFields.add(new SearchField(SearchFilter.ZONE_ID, "xZone.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL,
- "XXSecurityZone xZone", "xZone.id = obj.zoneId"));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- sortFields.add(new SortField(SearchFilter.POLICY_ID, "obj.id", true, SORT_ORDER.ASC));
- sortFields.add(new SortField(SearchFilter.POLICY_NAME, "obj.name"));
-
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Policy Name", false, true));
- trxLogAttrs.put("description", new VTrxLogAttr("description", "Policy Description"));
- trxLogAttrs.put("isEnabled", new VTrxLogAttr("isEnabled", "Policy Status"));
- trxLogAttrs.put("resources", new VTrxLogAttr("resources", "Policy Resources"));
- trxLogAttrs.put("additionalResources", new VTrxLogAttr("additionalResources", "Policy Additional Resources"));
- trxLogAttrs.put("conditions", new VTrxLogAttr("conditions", "Policy Conditions"));
- trxLogAttrs.put("policyItems", new VTrxLogAttr("policyItems", "Policy Items"));
- trxLogAttrs.put("denyPolicyItems", new VTrxLogAttr("denyPolicyItems", "DenyPolicy Items"));
- trxLogAttrs.put("allowExceptions", new VTrxLogAttr("allowExceptions", "Allow Exceptions"));
- trxLogAttrs.put("denyExceptions", new VTrxLogAttr("denyExceptions", "Deny Exceptions"));
- trxLogAttrs.put("dataMaskPolicyItems", new VTrxLogAttr("dataMaskPolicyItems", "Masked Policy Items"));
- trxLogAttrs.put("rowFilterPolicyItems", new VTrxLogAttr("rowFilterPolicyItems", "Row level filter Policy Items"));
- trxLogAttrs.put("isAuditEnabled", new VTrxLogAttr("isAuditEnabled", "Audit Status"));
- trxLogAttrs.put("policyLabels", new VTrxLogAttr("policyLabels", "Policy Labels"));
- trxLogAttrs.put("validitySchedules", new VTrxLogAttr("validitySchedules", "Validity Schedules"));
- trxLogAttrs.put("policyPriority", new VTrxLogAttr("policyPriority", "Priority"));
- trxLogAttrs.put("zoneName", new VTrxLogAttr("zoneName", "Zone Name"));
- trxLogAttrs.put("isDenyAllElse", new VTrxLogAttr("isDenyAllElse", "Deny All Other Accesses"));
- }
-
- @Override
- public String getParentObjectName(V obj, V oldObj) {
- return obj != null ? obj.getService() : null;
- }
-
- @Override
- public Long getParentObjectId(V obj, V oldObj) {
- String serviceName = obj != null ? obj.getService() : null;
- XXService service = serviceName != null ? daoMgr.getXXService().findByName(obj.getService()) : null;
-
- return service != null ? service.getId() : null;
- }
-
- @Override
- public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
- final boolean ret;
-
- int policyType = (obj == null || obj.getPolicyType() == null) ? RangerPolicy.POLICY_TYPE_ACCESS : obj.getPolicyType();
-
- switch (trxLogAttr.getAttribName()) {
- case "dataMaskPolicyItems":
- ret = policyType != RangerPolicy.POLICY_TYPE_DATAMASK;
- break;
-
- case "rowFilterPolicyItems":
- ret = policyType != RangerPolicy.POLICY_TYPE_ROWFILTER;
- break;
-
- case "policyItems":
- case "allowExceptions":
- case "denyPolicyItems":
- case "denyExceptions":
- case "isDenyAllElse":
+ GUIDUtil guidUtil;
+
+ public RangerPolicyServiceBase() {
+ super(AppConstants.CLASS_TYPE_RANGER_POLICY, AppConstants.CLASS_TYPE_XA_SERVICE);
+
+ searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "xSvcDef.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXServiceDef xSvcDef, XXService xSvc", "xSvc.type = xSvcDef.id and xSvc.id = obj.service"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, "xSvc.type", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL, "XXService xSvc", "xSvc.id = obj.service"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "xSvc.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXService xSvc", "xSvc.id = obj.service"));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "xSvc.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL, "XXService xSvc", "xSvc.id = obj.service"));
+ searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.POLICY_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.POLICY_NAME, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.USER, "xUser.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXUser xUser, XXPolicyRefUser refUser", "obj.id = refUser.policyId and xUser.id = refUser.userId"));
+ searchFields.add(new SearchField(SearchFilter.GROUP, "xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXGroup xGrp , XXPolicyRefGroup refGroup", "obj.id = refGroup.policyId and xGrp.id = refGroup.groupId"));
+ searchFields.add(new SearchField(SearchFilter.ROLE, "xRole.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXRole xRole , XXPolicyRefRole refRole", "obj.id = refRole.policyId and xRole.id = refRole.roleId"));
+ searchFields.add(new SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+ searchFields.add(new SearchField(SearchFilter.POLICY_TYPE, "obj.policyType", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "xZone.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXSecurityZone xZone", "xZone.id = obj.zoneId"));
+ searchFields.add(new SearchField(SearchFilter.ZONE_ID, "xZone.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL, "XXSecurityZone xZone", "xZone.id = obj.zoneId"));
+
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ sortFields.add(new SortField(SearchFilter.POLICY_ID, "obj.id", true, SORT_ORDER.ASC));
+ sortFields.add(new SortField(SearchFilter.POLICY_NAME, "obj.name"));
+
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Policy Name", false, true));
+ trxLogAttrs.put("description", new VTrxLogAttr("description", "Policy Description"));
+ trxLogAttrs.put("isEnabled", new VTrxLogAttr("isEnabled", "Policy Status"));
+ trxLogAttrs.put("resources", new VTrxLogAttr("resources", "Policy Resources"));
+ trxLogAttrs.put("additionalResources", new VTrxLogAttr("additionalResources", "Policy Additional Resources"));
+ trxLogAttrs.put("conditions", new VTrxLogAttr("conditions", "Policy Conditions"));
+ trxLogAttrs.put("policyItems", new VTrxLogAttr("policyItems", "Policy Items"));
+ trxLogAttrs.put("denyPolicyItems", new VTrxLogAttr("denyPolicyItems", "DenyPolicy Items"));
+ trxLogAttrs.put("allowExceptions", new VTrxLogAttr("allowExceptions", "Allow Exceptions"));
+ trxLogAttrs.put("denyExceptions", new VTrxLogAttr("denyExceptions", "Deny Exceptions"));
+ trxLogAttrs.put("dataMaskPolicyItems", new VTrxLogAttr("dataMaskPolicyItems", "Masked Policy Items"));
+ trxLogAttrs.put("rowFilterPolicyItems", new VTrxLogAttr("rowFilterPolicyItems", "Row level filter Policy Items"));
+ trxLogAttrs.put("isAuditEnabled", new VTrxLogAttr("isAuditEnabled", "Audit Status"));
+ trxLogAttrs.put("policyLabels", new VTrxLogAttr("policyLabels", "Policy Labels"));
+ trxLogAttrs.put("validitySchedules", new VTrxLogAttr("validitySchedules", "Validity Schedules"));
+ trxLogAttrs.put("policyPriority", new VTrxLogAttr("policyPriority", "Priority"));
+ trxLogAttrs.put("zoneName", new VTrxLogAttr("zoneName", "Zone Name"));
+ trxLogAttrs.put("isDenyAllElse", new VTrxLogAttr("isDenyAllElse", "Deny All Other Accesses"));
+ }
+
+ @Override
+ public String getParentObjectName(V obj, V oldObj) {
+ return obj != null ? obj.getService() : null;
+ }
+
+ @Override
+ public Long getParentObjectId(V obj, V oldObj) {
+ String serviceName = obj != null ? obj.getService() : null;
+ XXService service = serviceName != null ? daoMgr.getXXService().findByName(obj.getService()) : null;
+
+ return service != null ? service.getId() : null;
+ }
+
+ @Override
+ public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
+ final boolean ret;
+
+ int policyType = (obj == null || obj.getPolicyType() == null) ? RangerPolicy.POLICY_TYPE_ACCESS : obj.getPolicyType();
+
+ switch (trxLogAttr.getAttribName()) {
+ case "dataMaskPolicyItems":
+ ret = policyType != RangerPolicy.POLICY_TYPE_DATAMASK;
+ break;
+
+ case "rowFilterPolicyItems":
+ ret = policyType != RangerPolicy.POLICY_TYPE_ROWFILTER;
+ break;
+
+ case "policyItems":
+ case "allowExceptions":
+ case "denyPolicyItems":
+ case "denyExceptions":
+ case "isDenyAllElse":
ret = policyType != RangerPolicy.POLICY_TYPE_ACCESS;
- break;
-
- default:
- ret = false;
- break;
- }
-
- return ret;
- }
-
- @Override
- protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
- XXService xService = daoMgr.getXXService().findByName(vObj.getService());
- if (xService == null) {
- throw restErrorUtil.createRESTException("No corresponding service found for policyName: " + vObj.getName()
- + "Service Not Found : " + vObj.getService(), MessageEnums.INVALID_INPUT_DATA);
- }
- Long zoneId = convertZoneNameToZoneId(vObj.getZoneName(), vObj);
- xObj.setZoneId(zoneId);
-
- XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
- if (xServiceDef != null) {
- vObj.setServiceType(xServiceDef.getName());
- }
-
- String guid = vObj.getGuid();
- if (StringUtils.isEmpty(guid)) {
- guid = guidUtil.genGUID();
- vObj.setGuid(guid);
- }
- Integer policyPriority = vObj.getPolicyPriority();
- if (policyPriority == null) {
- policyPriority = RangerPolicy.POLICY_PRIORITY_NORMAL;
- vObj.setPolicyPriority(policyPriority);
- }
- Integer policyType = vObj.getPolicyType();
- if (policyType == null) {
- policyType = RangerPolicy.POLICY_TYPE_ACCESS;
- vObj.setPolicyType(policyType);
- }
-
- xObj.setGuid(guid);
- xObj.setVersion(vObj.getVersion());
- xObj.setService(xService.getId());
- xObj.setName(StringUtils.trim(vObj.getName()));
- xObj.setPolicyType(policyType);
- xObj.setPolicyPriority(policyPriority);
- xObj.setDescription(vObj.getDescription());
- xObj.setResourceSignature(vObj.getResourceSignature());
- xObj.setIsAuditEnabled(vObj.getIsAuditEnabled());
- xObj.setIsEnabled(vObj.getIsEnabled());
-
- String validitySchedules = JsonUtils.listToJson(vObj.getValiditySchedules());
- Map<String, Object> options = vObj.getOptions();
-
- if (StringUtils.isNotBlank(validitySchedules)) {
- options = vObj.getUpdatableMap(options);
- options.put(OPTION_POLICY_VALIDITY_SCHEDULES, validitySchedules);
- } else if (MapUtils.isNotEmpty(options)) {
- options.remove(OPTION_POLICY_VALIDITY_SCHEDULES);
- }
-
- xObj.setOptions(JsonUtils.mapToJson(options));
-
- xObj.setPolicyText(JsonUtils.objectToJson(vObj));
-
- return xObj;
- }
-
- @Override
- protected V mapEntityToViewBean(V vObj, T xObj) {
- XXService xService = daoMgr.getXXService().getById(xObj.getService());
- XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
- vObj.setGuid(xObj.getGuid());
- vObj.setVersion(xObj.getVersion());
- vObj.setService(xService.getName());
- vObj.setServiceType(xServiceDef.getName());
- vObj.setName(StringUtils.trim(xObj.getName()));
- vObj.setPolicyType(xObj.getPolicyType() == null ? RangerPolicy.POLICY_TYPE_ACCESS : xObj.getPolicyType());
- vObj.setPolicyPriority(xObj.getPolicyPriority() == null ? RangerPolicy.POLICY_PRIORITY_NORMAL : xObj.getPolicyPriority());
- vObj.setDescription(xObj.getDescription());
- vObj.setResourceSignature(xObj.getResourceSignature());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setIsAuditEnabled(xObj.getIsAuditEnabled());
- String zoneName = convertZoneIdToZoneName(xObj.getZoneId(), vObj);
- vObj.setZoneName(zoneName);
-
- String policyText = xObj.getPolicyText();
-
- RangerPolicy ret = JsonUtils.jsonToObject(policyText, RangerPolicy.class);
-
- if (ret != null) {
- vObj.setOptions(ret.getOptions());
- vObj.setValiditySchedules(ret.getValiditySchedules());
- vObj.setPolicyLabels(ret.getPolicyLabels());
- }
-
- return vObj;
- }
-
- private Long convertZoneNameToZoneId(String zoneName, V vObj) {
- if (StringUtils.isEmpty(zoneName)) return RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
- XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneName(zoneName);
- if (zone == null) {
- throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName()
- + "Zone Not Found : " + zoneName, MessageEnums.INVALID_INPUT_DATA);
- }
- return zone.getId();
- }
-
- private String convertZoneIdToZoneName(Long zoneId, V vObj) {
- if (zoneId == null) {
- throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName()
- + "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
- }
- if (zoneId.equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
- return StringUtils.EMPTY;
- }
- XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneId(zoneId);
- if (zone == null) {
- throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName()
- + "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
- }
- return zone.getName();
- }
+ break;
+
+ default:
+ ret = false;
+ break;
+ }
+
+ return ret;
+ }
+
+ @Override
+ protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+ XXService xService = daoMgr.getXXService().findByName(vObj.getService());
+
+ if (xService == null) {
+ throw restErrorUtil.createRESTException("No corresponding service found for policyName: " + vObj.getName() + "Service Not Found : " + vObj.getService(), MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ Long zoneId = convertZoneNameToZoneId(vObj.getZoneName(), vObj);
+
+ xObj.setZoneId(zoneId);
+
+ XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
+
+ if (xServiceDef != null) {
+ vObj.setServiceType(xServiceDef.getName());
+ }
+
+ String guid = vObj.getGuid();
+
+ if (StringUtils.isEmpty(guid)) {
+ guid = guidUtil.genGUID();
+ vObj.setGuid(guid);
+ }
+
+ Integer policyPriority = vObj.getPolicyPriority();
+
+ if (policyPriority == null) {
+ policyPriority = RangerPolicy.POLICY_PRIORITY_NORMAL;
+ vObj.setPolicyPriority(policyPriority);
+ }
+
+ Integer policyType = vObj.getPolicyType();
+
+ if (policyType == null) {
+ policyType = RangerPolicy.POLICY_TYPE_ACCESS;
+ vObj.setPolicyType(policyType);
+ }
+
+ xObj.setGuid(guid);
+ xObj.setVersion(vObj.getVersion());
+ xObj.setService(xService.getId());
+ xObj.setName(StringUtils.trim(vObj.getName()));
+ xObj.setPolicyType(policyType);
+ xObj.setPolicyPriority(policyPriority);
+ xObj.setDescription(vObj.getDescription());
+ xObj.setResourceSignature(vObj.getResourceSignature());
+ xObj.setIsAuditEnabled(vObj.getIsAuditEnabled());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+
+ String validitySchedules = JsonUtils.listToJson(vObj.getValiditySchedules());
+ Map<String, Object> options = vObj.getOptions();
+
+ if (StringUtils.isNotBlank(validitySchedules)) {
+ options = RangerBaseModelObject.getUpdatableMap(options);
+ options.put(OPTION_POLICY_VALIDITY_SCHEDULES, validitySchedules);
+ } else if (MapUtils.isNotEmpty(options)) {
+ options.remove(OPTION_POLICY_VALIDITY_SCHEDULES);
+ }
+
+ xObj.setOptions(JsonUtils.mapToJson(options));
+ xObj.setPolicyText(JsonUtils.objectToJson(vObj));
+
+ return xObj;
+ }
+
+ @Override
+ protected V mapEntityToViewBean(V vObj, T xObj) {
+ XXService xService = daoMgr.getXXService().getById(xObj.getService());
+ XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
+
+ vObj.setGuid(xObj.getGuid());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setService(xService.getName());
+ vObj.setServiceType(xServiceDef.getName());
+ vObj.setName(StringUtils.trim(xObj.getName()));
+ vObj.setPolicyType(xObj.getPolicyType() == null ? RangerPolicy.POLICY_TYPE_ACCESS : xObj.getPolicyType());
+ vObj.setPolicyPriority(xObj.getPolicyPriority() == null ? RangerPolicy.POLICY_PRIORITY_NORMAL : xObj.getPolicyPriority());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setResourceSignature(xObj.getResourceSignature());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setIsAuditEnabled(xObj.getIsAuditEnabled());
+
+ String zoneName = convertZoneIdToZoneName(xObj.getZoneId(), vObj);
+
+ vObj.setZoneName(zoneName);
+
+ String policyText = xObj.getPolicyText();
+
+ RangerPolicy ret = JsonUtils.jsonToObject(policyText, RangerPolicy.class);
+
+ if (ret != null) {
+ vObj.setOptions(ret.getOptions());
+ vObj.setValiditySchedules(ret.getValiditySchedules());
+ vObj.setPolicyLabels(ret.getPolicyLabels());
+ }
+
+ return vObj;
+ }
+
+ private Long convertZoneNameToZoneId(String zoneName, V vObj) {
+ if (StringUtils.isEmpty(zoneName)) {
+ return RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
+ }
+
+ XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneName(zoneName);
+
+ if (zone == null) {
+ throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName() + "Zone Not Found : " + zoneName, MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ return zone.getId();
+ }
+
+ private String convertZoneIdToZoneName(Long zoneId, V vObj) {
+ if (zoneId == null) {
+ throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName() + "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ if (zoneId.equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
+ return StringUtils.EMPTY;
+ }
+
+ XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneId(zoneId);
+
+ if (zone == null) {
+ throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName() + "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ return zone.getName();
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
index 540a29eb2..2e61df41d 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
@@ -17,7 +17,6 @@
package org.apache.ranger.service;
-
import org.apache.ranger.biz.RangerPolicyRetriever;
import org.apache.ranger.common.JSONUtil;
import org.apache.ranger.entity.XXPolicyWithAssignedId;
@@ -27,44 +26,37 @@ import org.springframework.stereotype.Service;
@Service
public class RangerPolicyWithAssignedIdService extends RangerPolicyServiceBase<XXPolicyWithAssignedId, RangerPolicy> {
-
- @Autowired
- JSONUtil jsonUtil;
-
- @Override
- protected XXPolicyWithAssignedId mapViewToEntityBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj,
- int OPERATION_CONTEXT) {
- return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
- }
-
- @Override
- protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj) {
- return super.mapEntityToViewBean(vObj, xObj);
- }
-
- @Override
- protected void validateForCreate(RangerPolicy vObj) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- protected void validateForUpdate(RangerPolicy vObj, XXPolicyWithAssignedId entityObj) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- protected RangerPolicy populateViewBean(XXPolicyWithAssignedId xPolicy) {
- RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
-
- RangerPolicy vPolicy = retriever.getPolicy(xPolicy.getId());
-
- return vPolicy;
- }
-
- public RangerPolicy getPopulatedViewObject(XXPolicyWithAssignedId xPolicy) {
- return this.populateViewBean(xPolicy);
- }
-
+ @Autowired
+ JSONUtil jsonUtil;
+
+ public RangerPolicy getPopulatedViewObject(XXPolicyWithAssignedId xPolicy) {
+ return this.populateViewBean(xPolicy);
+ }
+
+ @Override
+ protected XXPolicyWithAssignedId mapViewToEntityBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj, int operationContext) {
+ return super.mapViewToEntityBean(vObj, xObj, operationContext);
+ }
+
+ @Override
+ protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj) {
+ return super.mapEntityToViewBean(vObj, xObj);
+ }
+
+ @Override
+ protected RangerPolicy populateViewBean(XXPolicyWithAssignedId xPolicy) {
+ RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
+
+ return retriever.getPolicy(xPolicy.getId());
+ }
+
+ @Override
+ protected void validateForCreate(RangerPolicy vObj) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ protected void validateForUpdate(RangerPolicy vObj, XXPolicyWithAssignedId entityObj) {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java
index eb8ed8bfa..bc9156085 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java
@@ -17,11 +17,6 @@
package org.apache.ranger.service;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
@@ -38,16 +33,43 @@ import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
@Service
@Scope("singleton")
public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole> {
-
private static final Logger logger = LoggerFactory.getLogger(RangerRoleService.class);
public RangerRoleService() {
super();
}
+ public void updatePolicyVersions(Long roleId) {
+ logger.debug("==> updatePolicyVersions(roleId={})", roleId);
+ // Get all roles which include this role because change to this affects all these roles
+ Set<Long> containingRoles = getContainingRoles(roleId);
+
+ logger.debug("All containing Roles for roleId:[{}] are [{}]", roleId, containingRoles);
+
+ updatePolicyVersions(containingRoles);
+
+ logger.debug("<== updatePolicyVersions(roleId={})", roleId);
+ }
+
+ public void updateRoleVersions(Long roleId) {
+ logger.debug("==> updateRoleVersions(roleId={})", roleId);
+ // Get all roles which include this role because change to this affects all these roles
+ Set<Long> containingRoles = getContainingRoles(roleId);
+
+ logger.debug("All containing Roles for roleId:[{}] are [{}]", roleId, containingRoles);
+
+ updateRoleVersions(containingRoles);
+
+ logger.debug("<== updateRoleVersions(roleId={})", roleId);
+ }
+
@Override
protected void validateForCreate(RangerRole vObj) {
}
@@ -57,25 +79,26 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
}
@Override
- protected XXRole mapViewToEntityBean(RangerRole rangerRole, XXRole xxRole, int OPERATION_CONTEXT) {
- XXRole ret = super.mapViewToEntityBean(rangerRole, xxRole, OPERATION_CONTEXT);
+ protected XXRole mapViewToEntityBean(RangerRole rangerRole, XXRole xxRole, int operationContext) {
+ XXRole ret = super.mapViewToEntityBean(rangerRole, xxRole, operationContext);
+
ret.setRoleText(JsonUtils.objectToJson(rangerRole));
+
return ret;
}
+
@Override
protected RangerRole mapEntityToViewBean(RangerRole rangerRole, XXRole xxRole) {
RangerRole ret = super.mapEntityToViewBean(rangerRole, xxRole);
if (StringUtils.isNotEmpty(xxRole.getRoleText())) {
- if (logger.isDebugEnabled()) {
- logger.debug("roleText=" + xxRole.getRoleText());
- }
+ logger.debug("roleText={}", xxRole.getRoleText());
+
RangerRole roleFromJsonData = JsonUtils.jsonToObject(xxRole.getRoleText(), RangerRole.class);
if (roleFromJsonData != null) {
- if (logger.isDebugEnabled()) {
- logger.debug("Role object built from JSON :[" + roleFromJsonData +"]");
- }
+ logger.debug("Role object built from JSON :[{}]", roleFromJsonData);
+
ret.setOptions(roleFromJsonData.getOptions());
ret.setUsers(roleFromJsonData.getUsers());
ret.setGroups(roleFromJsonData.getGroups());
@@ -83,30 +106,12 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
ret.setCreatedByUser(roleFromJsonData.getCreatedByUser());
}
} else {
- logger.info("Empty string representing jsonData in [" + xxRole + "]!!");
+ logger.info("Empty string representing jsonData in [{}]!!", xxRole);
}
return ret;
}
- public void updatePolicyVersions(Long roleId) {
- if (logger.isDebugEnabled()) {
- logger.debug("==> updatePolicyVersions(roleId=" + roleId + ")");
- }
- // Get all roles which include this role because change to this affects all these roles
- Set<Long> containingRoles = getContainingRoles(roleId);
-
- if (logger.isDebugEnabled()) {
- logger.debug("All containing Roles for roleId:[" + roleId +"] are [" + containingRoles + "]");
- }
-
- updatePolicyVersions(containingRoles);
-
- if (logger.isDebugEnabled()) {
- logger.debug("<== updatePolicyVersions(roleId=" + roleId + ")");
- }
- }
-
private Set<Long> getContainingRoles(Long roleId) {
Set<Long> ret = new HashSet<>();
@@ -115,28 +120,9 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
return ret;
}
- public void updateRoleVersions(Long roleId) {
- if (logger.isDebugEnabled()) {
- logger.debug("==> updateRoleVersions(roleId=" + roleId + ")");
- }
- // Get all roles which include this role because change to this affects all these roles
- Set<Long> containingRoles = getContainingRoles(roleId);
-
- if (logger.isDebugEnabled()) {
- logger.debug("All containing Roles for roleId:[" + roleId +"] are [" + containingRoles + "]");
- }
-
- updateRoleVersions(containingRoles);
-
- if (logger.isDebugEnabled()) {
- logger.debug("<== updateRoleVersions(roleId=" + roleId + ")");
- }
- }
-
private void addContainingRoles(Long roleId, Set<Long> allRoles) {
- if (logger.isDebugEnabled()) {
- logger.debug("==> addContainingRoles(roleId=" + roleId + ")");
- }
+ logger.debug("==> addContainingRoles(roleId={})", roleId);
+
if (!allRoles.contains(roleId)) {
allRoles.add(roleId);
@@ -146,15 +132,12 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
addContainingRoles(role, allRoles);
}
}
- if (logger.isDebugEnabled()) {
- logger.debug("<== addContainingRoles(roleId=" + roleId + ")");
- }
+
+ logger.debug("<== addContainingRoles(roleId={})", roleId);
}
private void updatePolicyVersions(Set<Long> roleIds) {
- if (logger.isDebugEnabled()) {
- logger.debug("==> updatePolicyVersions(roleIds=" + roleIds + ")");
- }
+ logger.debug("==> updatePolicyVersions(roleIds={})", roleIds);
if (CollectionUtils.isNotEmpty(roleIds)) {
Set<Long> allAffectedServiceIds = new HashSet<>();
@@ -172,31 +155,32 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
}
}
- if (logger.isDebugEnabled()) {
- logger.debug("<== updatePolicyVersions(roleIds=" + roleIds + ")");
- }
+ logger.debug("<== updatePolicyVersions(roleIds={})", roleIds);
}
private void updateRoleVersions(Set<Long> roleIds) {
- if (logger.isDebugEnabled()) {
- logger.debug("==> updatePolicyVersions(roleIds=" + roleIds + ")");
- }
+ logger.debug("==> updatePolicyVersions(roleIds={})", roleIds);
if (CollectionUtils.isNotEmpty(roleIds)) {
Set<Long> allAffectedServiceIds = new HashSet<>();
for (Long roleId : roleIds) {
List<Long> affectedServiceIds = daoMgr.getXXPolicy().findServiceIdsByRoleId(roleId);
+
allAffectedServiceIds.addAll(affectedServiceIds);
}
XXServiceDao serviceDao = daoMgr.getXXService();
+
if (CollectionUtils.isNotEmpty(allAffectedServiceIds)) {
for (final Long serviceId : allAffectedServiceIds) {
Runnable serviceVersionUpdater = new ServiceDBStore.ServiceVersionUpdater(daoMgr, serviceId, ServiceDBStore.VERSION_TYPE.ROLE_VERSION, null, RangerPolicyDelta.CHANGE_TYPE_ROLE_UPDATE, null);
+
daoMgr.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(serviceVersionUpdater);
+
XXService serviceDbObj = serviceDao.getById(serviceId);
boolean isTagService = serviceDbObj.getType() == EmbeddedServiceDefsUtil.instance().getTagServiceDefId();
+
if (isTagService) {
updateRoleVersionOfAllServicesRefferingTag(daoMgr, serviceDao, serviceId);
}
@@ -204,20 +188,19 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
}
}
- if (logger.isDebugEnabled()) {
- logger.debug("<== updatePolicyVersions(roleIds=" + roleIds + ")");
- }
+ logger.debug("<== updatePolicyVersions(roleIds={})", roleIds);
}
private void updateRoleVersionOfAllServicesRefferingTag(RangerDaoManager daoManager, XXServiceDao serviceDao, Long serviceId) {
List<XXService> referringServices = serviceDao.findByTagServiceId(serviceId);
- if(CollectionUtils.isNotEmpty(referringServices)) {
- for(XXService referringService : referringServices) {
+
+ if (CollectionUtils.isNotEmpty(referringServices)) {
+ for (XXService referringService : referringServices) {
final Long referringServiceId = referringService.getId();
Runnable roleVersionUpdater = new ServiceDBStore.ServiceVersionUpdater(daoManager, referringServiceId, ServiceDBStore.VERSION_TYPE.ROLE_VERSION, null, RangerPolicyDelta.CHANGE_TYPE_ROLE_UPDATE, null);
+
daoMgr.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(roleVersionUpdater);
}
}
}
}
-
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java
index 22867cbe5..e5832850c 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java
@@ -30,52 +30,45 @@ import java.util.HashMap;
import java.util.Map;
public abstract class RangerRoleServiceBase<T extends XXRole, V extends RangerRole> extends RangerAuditedModelService<T, V> {
-
public RangerRoleServiceBase() {
super(AppConstants.CLASS_TYPE_RANGER_ROLE);
searchFields.add(new SearchField(SearchFilter.ROLE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
searchFields.add(new SearchField(SearchFilter.ROLE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.GROUP_NAME, "xXRoleRefGroup.groupName",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXRoleRefGroup xXRoleRefGroup",
- "xXRoleRefGroup.roleId = obj.id"));
- searchFields.add(new SearchField(SearchFilter.USER_NAME, "xXRoleRefUser.userName", SearchField.DATA_TYPE.STRING,
- SearchField.SEARCH_TYPE.FULL, "XXRoleRefUser xXRoleRefUser", "xXRoleRefUser.roleId = obj.id"));
- searchFields.add(new SearchField(SearchFilter.ROLE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING,
- SearchField.SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField(SearchFilter.GROUP_NAME_PARTIAL, "xXRoleRefGroup.groupName",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefGroup xXRoleRefGroup",
- "xXRoleRefGroup.roleId = obj.id"));
- searchFields.add(new SearchField(SearchFilter.USER_NAME_PARTIAL, "xXRoleRefUser.userName",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefUser xXRoleRefUser",
- "xXRoleRefUser.roleId = obj.id"));
+ searchFields.add(new SearchField(SearchFilter.GROUP_NAME, "xXRoleRefGroup.groupName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXRoleRefGroup xXRoleRefGroup", "xXRoleRefGroup.roleId = obj.id"));
+ searchFields.add(new SearchField(SearchFilter.USER_NAME, "xXRoleRefUser.userName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXRoleRefUser xXRoleRefUser", "xXRoleRefUser.roleId = obj.id"));
+ searchFields.add(new SearchField(SearchFilter.ROLE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+ searchFields.add(new SearchField(SearchFilter.GROUP_NAME_PARTIAL, "xXRoleRefGroup.groupName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefGroup xXRoleRefGroup", "xXRoleRefGroup.roleId = obj.id"));
+ searchFields.add(new SearchField(SearchFilter.USER_NAME_PARTIAL, "xXRoleRefUser.userName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefUser xXRoleRefUser", "xXRoleRefUser.roleId = obj.id"));
sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
sortFields.add(new SortField(SearchFilter.ROLE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.ROLE_NAME, "obj.name"));
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Role Name", false, true));
- trxLogAttrs.put("description", new VTrxLogAttr("description", "Role Description"));
- trxLogAttrs.put("options", new VTrxLogAttr("options", "Options"));
- trxLogAttrs.put("users", new VTrxLogAttr("users", "Users"));
- trxLogAttrs.put("adminUsers", new VTrxLogAttr("adminUsers", "Admin Users"));
- trxLogAttrs.put("groups", new VTrxLogAttr("groups", "Groups"));
- trxLogAttrs.put("adminGroups", new VTrxLogAttr("adminGroups", "Admin Groups"));
- trxLogAttrs.put("roles", new VTrxLogAttr("roles", "Roles"));
- trxLogAttrs.put("adminRoles", new VTrxLogAttr("adminRoles", "Admin Roles"));
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Role Name", false, true));
+ trxLogAttrs.put("description", new VTrxLogAttr("description", "Role Description"));
+ trxLogAttrs.put("options", new VTrxLogAttr("options", "Options"));
+ trxLogAttrs.put("users", new VTrxLogAttr("users", "Users"));
+ trxLogAttrs.put("adminUsers", new VTrxLogAttr("adminUsers", "Admin Users"));
+ trxLogAttrs.put("groups", new VTrxLogAttr("groups", "Groups"));
+ trxLogAttrs.put("adminGroups", new VTrxLogAttr("adminGroups", "Admin Groups"));
+ trxLogAttrs.put("roles", new VTrxLogAttr("roles", "Roles"));
+ trxLogAttrs.put("adminRoles", new VTrxLogAttr("adminRoles", "Admin Roles"));
trxLogAttrs.put("createdByUser", new VTrxLogAttr("createdByUser", "Created By User"));
}
@Override
- protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
+ protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
xObj.setName(vObj.getName());
xObj.setDescription(vObj.getDescription());
Map<String, Object> options = vObj.getOptions();
+
if (options == null) {
options = new HashMap<>();
}
+
xObj.setOptions(JsonUtils.mapToJson(options));
return xObj;
@@ -89,4 +82,3 @@ public abstract class RangerRoleServiceBase<T extends XXRole, V extends RangerRo
return vObj;
}
}
-
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java
index 272914db0..da5a5e4d3 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java
@@ -26,11 +26,9 @@ import org.apache.ranger.entity.XXSecurityZone;
import org.apache.ranger.plugin.model.RangerSecurityZone;
import org.apache.ranger.plugin.util.SearchFilter;
-
public abstract class RangerSecurityZoneServiceBase<T extends XXSecurityZone, V extends RangerSecurityZone> extends RangerAuditedModelService<T, V> {
-
- public RangerSecurityZoneServiceBase() {
- super(AppConstants.CLASS_TYPE_RANGER_SECURITY_ZONE);
+ public RangerSecurityZoneServiceBase() {
+ super(AppConstants.CLASS_TYPE_RANGER_SECURITY_ZONE);
searchFields.add(new SearchField(SearchFilter.ZONE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
@@ -40,33 +38,36 @@ public abstract class RangerSecurityZoneServiceBase<T extends XXSecurityZone, V
sortFields.add(new SortField(SearchFilter.ZONE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.ZONE_NAME, "obj.name"));
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Zone Name", false, true));
- trxLogAttrs.put("services", new VTrxLogAttr("services", "Zone Services"));
- trxLogAttrs.put("adminUsers", new VTrxLogAttr("adminUsers", "Zone Admin Users"));
- trxLogAttrs.put("adminUserGroups", new VTrxLogAttr("adminUserGroups", "Zone Admin User Groups"));
- trxLogAttrs.put("auditUsers", new VTrxLogAttr("auditUsers", "Zone Audit Users"));
- trxLogAttrs.put("auditUserGroups", new VTrxLogAttr("auditUserGroups", "Zone Audit User Groups"));
- trxLogAttrs.put("adminRoles", new VTrxLogAttr("adminRoles", "Zone Admin Roles"));
- trxLogAttrs.put("auditRoles", new VTrxLogAttr("auditRoles", "Zone Audit Roles"));
- trxLogAttrs.put("description", new VTrxLogAttr("description", "Zone Description"));
- trxLogAttrs.put("tagServices", new VTrxLogAttr("tagServices", "Zone Tag Services"));
- }
+ trxLogAttrs.put("name", new VTrxLogAttr("name", "Zone Name", false, true));
+ trxLogAttrs.put("services", new VTrxLogAttr("services", "Zone Services"));
+ trxLogAttrs.put("adminUsers", new VTrxLogAttr("adminUsers", "Zone Admin Users"));
+ trxLogAttrs.put("adminUserGroups", new VTrxLogAttr("adminUserGroups", "Zone Admin User Groups"));
+ trxLogAttrs.put("auditUsers", new VTrxLogAttr("auditUsers", "Zone Audit Users"));
+ trxLogAttrs.put("auditUserGroups", new VTrxLogAttr("auditUserGroups", "Zone Audit User Groups"));
+ trxLogAttrs.put("adminRoles", new VTrxLogAttr("adminRoles", "Zone Admin Roles"));
+ trxLogAttrs.put("auditRoles", new VTrxLogAttr("auditRoles", "Zone Audit Roles"));
+ trxLogAttrs.put("description", new VTrxLogAttr("description", "Zone Description"));
+ trxLogAttrs.put("tagServices", new VTrxLogAttr("tagServices", "Zone Tag Services"));
+ }
+
+ @Override
+ protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+ xObj.setName(vObj.getName());
+ xObj.setDescription(vObj.getDescription());
+
+ return xObj;
+ }
+
+ @Override
+ protected V mapEntityToViewBean(V vObj, T xObj) {
+ if (xObj.getId().equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
+ vObj.setName(StringUtils.EMPTY);
+ } else {
+ vObj.setName(xObj.getName());
+ }
- @Override
- protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
- xObj.setName(vObj.getName());
- xObj.setDescription(vObj.getDescription());
- return xObj;
- }
+ vObj.setDescription(xObj.getDescription());
- @Override
- protected V mapEntityToViewBean(V vObj, T xObj) {
- if (xObj.getId().equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
- vObj.setName(StringUtils.EMPTY);
- } else {
- vObj.setName(xObj.getName());
- }
- vObj.setDescription(xObj.getDescription());
- return vObj;
- }
+ return vObj;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
index 12aed36b6..18d7bf90e 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
@@ -17,22 +17,11 @@
package org.apache.ranger.service;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
-import org.apache.ranger.authorization.utils.StringUtil;
import org.apache.ranger.authorization.utils.JsonUtils;
+import org.apache.ranger.authorization.utils.StringUtil;
import org.apache.ranger.biz.GdsDBStore;
import org.apache.ranger.biz.ServiceDBStore;
import org.apache.ranger.common.view.VTrxLogAttr;
@@ -51,22 +40,31 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
@Service
@Scope("singleton")
public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceBase<XXSecurityZone, RangerSecurityZone> {
- @Autowired
- ServiceDBStore serviceDBStore;
-
- @Autowired
- GdsDBStore gdsStore;
+ private static final Logger logger = LoggerFactory.getLogger(RangerSecurityZoneServiceService.class);
- boolean compressJsonData = false;
+ private final Map<Long, Set<String>> serviceNamesInZones = new HashMap<>();
+ private final Map<Long, Set<String>> tagServiceNamesInZones = new HashMap<>();
- private static final Logger logger = LoggerFactory.getLogger(RangerSecurityZoneServiceService.class);
+ @Autowired
+ ServiceDBStore serviceDBStore;
- private Map<Long, Set<String>> serviceNamesInZones = new HashMap<>();
- private Map<Long, Set<String>> tagServiceNamesInZones = new HashMap<>();
+ @Autowired
+ GdsDBStore gdsStore;
+ boolean compressJsonData;
public RangerSecurityZoneServiceService() {
super();
@@ -74,9 +72,7 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
@PostConstruct
public void initService() {
- if (logger.isDebugEnabled()) {
- logger.debug("==> RangerSecurityZoneServiceService.initService()");
- }
+ logger.debug("==> RangerSecurityZoneServiceService.initService()");
RangerAdminConfig config = RangerAdminConfig.getInstance();
@@ -84,94 +80,16 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
logger.info("ranger.admin.store.security.zone.compress.json_data={}", compressJsonData);
- if (logger.isDebugEnabled()) {
- logger.debug("<== RangerSecurityZoneServiceService.initService()");
- }
- }
-
- @Override
- protected void validateForCreate(RangerSecurityZone vObj) {
- }
-
- @Override
- protected void validateForUpdate(RangerSecurityZone vObj, XXSecurityZone entityObj) {
- // Cache service-names in existing zone object
- RangerSecurityZone existingZone = new RangerSecurityZone();
- existingZone = mapEntityToViewBean(existingZone, entityObj);
- serviceNamesInZones.put(entityObj.getId(), existingZone.getServices().keySet());
- tagServiceNamesInZones.put(entityObj.getId(), new HashSet<>(existingZone.getTagServices()));
- }
-
- @Override
- protected XXSecurityZone mapViewToEntityBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone, int OPERATION_CONTEXT) {
- XXSecurityZone ret = super.mapViewToEntityBean(securityZone, xxSecurityZone, OPERATION_CONTEXT);
-
- String json = JsonUtils.objectToJson(securityZone);
-
- if (StringUtils.isNotEmpty(json) && compressJsonData) {
- try {
- ret.setJsonData(null);
- ret.setGzJsonData(StringUtil.gzipCompress(json));
- } catch (IOException excp) {
- logger.error("mapViewToEntityBean(): json compression failed (length="+json.length()+"). Will save uncompressed json", excp);
-
- ret.setJsonData(json);
- ret.setGzJsonData(null);
- }
- } else {
- ret.setJsonData(json);
- ret.setGzJsonData(null);
- }
-
- return ret;
- }
- @Override
- protected RangerSecurityZone mapEntityToViewBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone) {
- RangerSecurityZone ret = super.mapEntityToViewBean(securityZone, xxSecurityZone);
- byte[] gzJson = xxSecurityZone.getGzJsonData();
- String json;
-
- if (gzJson != null) {
- try {
- json = StringUtil.gzipDecompress(gzJson);
- } catch (IOException excp) {
- json = xxSecurityZone.getJsonData();
-
- logger.error("mapEntityToViewBean(): decompression of x_security_zone.gz_jsonData failed (length={}). Will use contents of x_security_zone.jsonData (length={})", gzJson.length, (json != null ? json.length() : 0), excp);
- }
- } else {
- json = xxSecurityZone.getJsonData();
- }
-
- if (StringUtils.isNotEmpty(json)) {
- RangerSecurityZone zoneFromJsonData = JsonUtils.jsonToObject(json, RangerSecurityZone.class);
-
- if (zoneFromJsonData != null) {
- ret.setName(zoneFromJsonData.getName());
- ret.setServices(zoneFromJsonData.getServices());
- ret.setAdminUsers(zoneFromJsonData.getAdminUsers());
- ret.setAdminUserGroups(zoneFromJsonData.getAdminUserGroups());
- ret.setAdminRoles(zoneFromJsonData.getAdminRoles());
- ret.setAuditUsers(zoneFromJsonData.getAuditUsers());
- ret.setAuditUserGroups(zoneFromJsonData.getAuditUserGroups());
- ret.setAuditRoles(zoneFromJsonData.getAuditRoles());
- ret.setTagServices(zoneFromJsonData.getTagServices());
- }
- } else {
- logger.info("Empty string representing jsonData in [" + xxSecurityZone + "]!!");
- }
-
- return ret;
+ logger.debug("<== RangerSecurityZoneServiceService.initService()");
}
@Override
public RangerSecurityZone postCreate(XXSecurityZone xObj) {
// Ensure to update ServiceVersionInfo for each service in the zone
- RangerSecurityZone ret = super.postCreate(xObj);
- Set<String> serviceNames = ret.getServices().keySet();
-
- List<String> tagServiceNames = ret.getTagServices();
+ RangerSecurityZone ret = super.postCreate(xObj);
+ Set<String> serviceNames = ret.getServices().keySet();
+ List<String> tagServiceNames = ret.getTagServices();
// Create default zone policies
try {
@@ -181,25 +99,25 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
serviceDBStore.createZoneDefaultPolicies(tagServiceNames, ret);
updateServiceInfos(tagServiceNames);
} catch (Exception exception) {
- logger.error("postCreate processing failed for security-zone:[" + ret + "]", exception);
+ logger.error("postCreate processing failed for security-zone:[{}]", ret, exception);
ret = null;
}
return ret;
}
- @Override
+ @Override
public RangerSecurityZone postUpdate(XXSecurityZone xObj) {
// Update ServiceVersionInfo for all affected services
RangerSecurityZone ret = super.postUpdate(xObj);
- Set<String> oldServiceNames = new HashSet(serviceNamesInZones.remove(xObj.getId()));
+ Set<String> oldServiceNames = new HashSet<>(serviceNamesInZones.remove(xObj.getId()));
Set<String> updatedServiceNames = ret.getServices().keySet();
- Set<String> oldTagServiceNames = new HashSet(tagServiceNamesInZones.remove(xObj.getId()));
- Set<String> updatedTagServiceNames = new HashSet<String>(ret.getTagServices());
+ Set<String> oldTagServiceNames = new HashSet<>(tagServiceNamesInZones.remove(xObj.getId()));
+ Set<String> updatedTagServiceNames = new HashSet<>(ret.getTagServices());
- Collection<String> newServiceNames = CollectionUtils.subtract(updatedServiceNames, oldServiceNames);
+ Collection<String> newServiceNames = CollectionUtils.subtract(updatedServiceNames, oldServiceNames);
Collection<String> deletedServiceNames = CollectionUtils.subtract(oldServiceNames, updatedServiceNames);
Collection<String> deletedTagServiceNames = CollectionUtils.subtract(oldTagServiceNames, updatedTagServiceNames);
@@ -215,16 +133,31 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
oldServiceNames.addAll(updatedServiceNames);
updateServiceInfos(oldServiceNames);
} catch (Exception exception) {
- logger.error("postUpdate processing failed for security-zone:[" + ret + "]", exception);
+ logger.error("postUpdate processing failed for security-zone:[{}]", ret, exception);
+
ret = null;
}
+
return ret;
}
+ @Override
+ protected void validateForCreate(RangerSecurityZone vObj) {
+ }
+
+ @Override
+ protected void validateForUpdate(RangerSecurityZone vObj, XXSecurityZone entityObj) {
+ // Cache service-names in existing zone object
+ RangerSecurityZone existingZone = new RangerSecurityZone();
+ existingZone = mapEntityToViewBean(existingZone, entityObj);
+ serviceNamesInZones.put(entityObj.getId(), existingZone.getServices().keySet());
+ tagServiceNamesInZones.put(entityObj.getId(), new HashSet<>(existingZone.getTagServices()));
+ }
+
@Override
public XXSecurityZone preDelete(Long id) {
// Update ServiceVersionInfo for each service in the zone
- XXSecurityZone ret = super.preDelete(id);
+ XXSecurityZone ret = super.preDelete(id);
RangerSecurityZone viewObject = new RangerSecurityZone();
viewObject = mapEntityToViewBean(viewObject, ret);
Set<String> allServiceNames = new HashSet<>(viewObject.getTagServices());
@@ -237,7 +170,7 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
gdsStore.deleteAllGdsObjectsForSecurityZone(id);
updateServiceInfos(allServiceNames);
} catch (Exception exception) {
- logger.error("preDelete processing failed for security-zone:[" + viewObject + "]", exception);
+ logger.error("preDelete processing failed for security-zone:[{}]", viewObject, exception);
ret = null;
}
@@ -256,8 +189,11 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
RangerSecurityZoneService service = entry.getValue();
int resourceCount = service != null && service.getResources() != null ? service.getResources().size() : 0;
RangerSecurityZoneService serviceSummary = new RangerSecurityZoneService();
-
- serviceSummary.getResources().add((new HashMap<String, List<String>>() {{ put("resourceCount", Collections.singletonList(Integer.toString(resourceCount))); }}));
+ serviceSummary.getResources().add((new HashMap<String, List<String>>() {
+ {
+ put("resourceCount", Collections.singletonList(Integer.toString(resourceCount)));
+ }
+ }));
servicesSummary.put(serviceName, serviceSummary);
}
@@ -278,8 +214,70 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
return ret;
}
+ @Override
+ protected XXSecurityZone mapViewToEntityBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone, int operationContext) {
+ XXSecurityZone ret = super.mapViewToEntityBean(securityZone, xxSecurityZone, operationContext);
+ String json = JsonUtils.objectToJson(securityZone);
+
+ if (StringUtils.isNotEmpty(json) && compressJsonData) {
+ try {
+ ret.setJsonData(null);
+ ret.setGzJsonData(StringUtil.gzipCompress(json));
+ } catch (IOException excp) {
+ logger.error("mapViewToEntityBean(): json compression failed (length={}). Will save uncompressed json", json.length(), excp);
+
+ ret.setJsonData(json);
+ ret.setGzJsonData(null);
+ }
+ } else {
+ ret.setJsonData(json);
+ ret.setGzJsonData(null);
+ }
+
+ return ret;
+ }
+
+ @Override
+ protected RangerSecurityZone mapEntityToViewBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone) {
+ RangerSecurityZone ret = super.mapEntityToViewBean(securityZone, xxSecurityZone);
+ byte[] gzJson = xxSecurityZone.getGzJsonData();
+ String json;
+
+ if (gzJson != null) {
+ try {
+ json = StringUtil.gzipDecompress(gzJson);
+ } catch (IOException excp) {
+ json = xxSecurityZone.getJsonData();
+
+ logger.error("mapEntityToViewBean(): decompression of x_security_zone.gz_jsonData failed (length={}). Will use contents of x_security_zone.jsonData (length={})", gzJson.length, (json != null ? json.length() : 0), excp);
+ }
+ } else {
+ json = xxSecurityZone.getJsonData();
+ }
+
+ if (StringUtils.isNotEmpty(json)) {
+ RangerSecurityZone zoneFromJsonData = JsonUtils.jsonToObject(json, RangerSecurityZone.class);
+
+ if (zoneFromJsonData != null) {
+ ret.setName(zoneFromJsonData.getName());
+ ret.setServices(zoneFromJsonData.getServices());
+ ret.setAdminUsers(zoneFromJsonData.getAdminUsers());
+ ret.setAdminUserGroups(zoneFromJsonData.getAdminUserGroups());
+ ret.setAdminRoles(zoneFromJsonData.getAdminRoles());
+ ret.setAuditUsers(zoneFromJsonData.getAuditUsers());
+ ret.setAuditUserGroups(zoneFromJsonData.getAuditUserGroups());
+ ret.setAuditRoles(zoneFromJsonData.getAuditRoles());
+ ret.setTagServices(zoneFromJsonData.getTagServices());
+ }
+ } else {
+ logger.info("Empty string representing jsonData in [{}]!!", xxSecurityZone);
+ }
+
+ return ret;
+ }
+
private void updateServiceInfos(Collection<String> services) {
- if(CollectionUtils.isEmpty(services)) {
+ if (CollectionUtils.isEmpty(services)) {
return;
}
@@ -289,15 +287,14 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
serviceVersionInfos.add(daoMgr.getXXServiceVersionInfo().findByServiceName(serviceName));
}
- for(XXServiceVersionInfo serviceVersionInfo : serviceVersionInfos) {
- final RangerDaoManager finaldaoManager = daoMgr;
- final Long finalServiceId = serviceVersionInfo.getServiceId();
- final ServiceDBStore.VERSION_TYPE versionType = ServiceDBStore.VERSION_TYPE.POLICY_VERSION;
+ for (XXServiceVersionInfo serviceVersionInfo : serviceVersionInfos) {
+ final RangerDaoManager finaldaoManager = daoMgr;
+ final Long finalServiceId = serviceVersionInfo.getServiceId();
+ final ServiceDBStore.VERSION_TYPE versionType = ServiceDBStore.VERSION_TYPE.POLICY_VERSION;
Runnable serviceVersionUpdater = new ServiceDBStore.ServiceVersionUpdater(finaldaoManager, finalServiceId, versionType, null, RangerPolicyDelta.CHANGE_TYPE_SERVICE_CHANGE, null);
daoMgr.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(serviceVersionUpdater);
}
-
}
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
index 3fb3dea40..6966c44d8 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
@@ -17,10 +17,6 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
import org.apache.ranger.entity.XXServiceDef;
@@ -29,73 +25,80 @@ import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
@Service
@Scope("singleton")
public class RangerServiceDefService extends RangerServiceDefServiceBase<XXServiceDef, RangerServiceDef> {
- private final RangerAdminConfig config;
-
- public RangerServiceDefService() {
- super();
-
- this.config = RangerAdminConfig.getInstance();
- }
-
- @Override
- protected void validateForCreate(RangerServiceDef vObj) {
-
- }
-
- @Override
- protected void validateForUpdate(RangerServiceDef vObj, XXServiceDef entityObj) {
-
- }
-
- @Override
- protected XXServiceDef mapViewToEntityBean(RangerServiceDef vObj, XXServiceDef xObj, int OPERATION_CONTEXT) {
- return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
- }
-
- @Override
- protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDef xObj) {
- RangerServiceDef ret = super.mapEntityToViewBean(vObj, xObj);
-
- Map<String, String> serviceDefOptions = ret.getOptions();
-
- if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES) == null) {
- boolean enableDenyAndExceptionsInPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableDenyAndExceptionsInPolicies", true);
- if (enableDenyAndExceptionsInPoliciesHiddenOption || StringUtils.equalsIgnoreCase(ret.getName(), EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
- serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "true");
- } else {
- serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "false");
- }
- ret.setOptions(serviceDefOptions);
- }
-
- if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES) == null) {
- boolean enableTagBasedPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableTagBasedPolicies", true);
- if (enableTagBasedPoliciesHiddenOption) {
- serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "true");
- } else {
- serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "false");
- }
- ret.setOptions(serviceDefOptions);
- }
- return ret;
- }
-
- public List<RangerServiceDef> getAllServiceDefs() {
- List<XXServiceDef> xxServiceDefList = getDao().getAll();
- List<RangerServiceDef> serviceDefList = new ArrayList<RangerServiceDef>();
-
- for (XXServiceDef xxServiceDef : xxServiceDefList) {
- RangerServiceDef serviceDef = populateViewBean(xxServiceDef);
- serviceDefList.add(serviceDef);
- }
- return serviceDefList;
- }
-
- public RangerServiceDef getPopulatedViewObject(XXServiceDef xServiceDef) {
- return this.populateViewBean(xServiceDef);
- }
+ private final RangerAdminConfig config;
+
+ public RangerServiceDefService() {
+ super();
+
+ this.config = RangerAdminConfig.getInstance();
+ }
+
+ public List<RangerServiceDef> getAllServiceDefs() {
+ List<XXServiceDef> xxServiceDefList = getDao().getAll();
+ List<RangerServiceDef> serviceDefList = new ArrayList<>();
+
+ for (XXServiceDef xxServiceDef : xxServiceDefList) {
+ RangerServiceDef serviceDef = populateViewBean(xxServiceDef);
+
+ serviceDefList.add(serviceDef);
+ }
+
+ return serviceDefList;
+ }
+
+ public RangerServiceDef getPopulatedViewObject(XXServiceDef xServiceDef) {
+ return this.populateViewBean(xServiceDef);
+ }
+
+ @Override
+ protected void validateForCreate(RangerServiceDef vObj) {
+ }
+
+ @Override
+ protected void validateForUpdate(RangerServiceDef vObj, XXServiceDef entityObj) {
+ }
+
+ @Override
+ protected XXServiceDef mapViewToEntityBean(RangerServiceDef vObj, XXServiceDef xObj, int operationContext) {
+ return super.mapViewToEntityBean(vObj, xObj, operationContext);
+ }
+
+ @Override
+ protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDef xObj) {
+ RangerServiceDef ret = super.mapEntityToViewBean(vObj, xObj);
+ Map<String, String> serviceDefOptions = ret.getOptions();
+
+ if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES) == null) {
+ boolean enableDenyAndExceptionsInPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableDenyAndExceptionsInPolicies", true);
+
+ if (enableDenyAndExceptionsInPoliciesHiddenOption || StringUtils.equalsIgnoreCase(ret.getName(), EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
+ serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "true");
+ } else {
+ serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "false");
+ }
+
+ ret.setOptions(serviceDefOptions);
+ }
+
+ if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES) == null) {
+ boolean enableTagBasedPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableTagBasedPolicies", true);
+
+ if (enableTagBasedPoliciesHiddenOption) {
+ serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "true");
+ } else {
+ serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "false");
+ }
+
+ ret.setOptions(serviceDefOptions);
+ }
+
+ return ret;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
index a0ba463e4..9e082977f 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
@@ -17,14 +17,6 @@
package org.apache.ranger.service;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.common.AppConstants;
@@ -33,10 +25,19 @@ import org.apache.ranger.common.JSONUtil;
import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.PropertiesUtil;
import org.apache.ranger.common.SearchField;
-import org.apache.ranger.common.SortField;
import org.apache.ranger.common.SearchField.DATA_TYPE;
import org.apache.ranger.common.SearchField.SEARCH_TYPE;
-import org.apache.ranger.entity.*;
+import org.apache.ranger.common.SortField;
+import org.apache.ranger.entity.XXAccessTypeDef;
+import org.apache.ranger.entity.XXContextEnricherDef;
+import org.apache.ranger.entity.XXDataMaskTypeDef;
+import org.apache.ranger.entity.XXEnumDef;
+import org.apache.ranger.entity.XXEnumElementDef;
+import org.apache.ranger.entity.XXPolicyConditionDef;
+import org.apache.ranger.entity.XXResourceDef;
+import org.apache.ranger.entity.XXServiceConfigDef;
+import org.apache.ranger.entity.XXServiceDef;
+import org.apache.ranger.entity.XXServiceDefBase;
import org.apache.ranger.plugin.model.RangerServiceDef;
import org.apache.ranger.plugin.model.RangerServiceDef.RangerAccessTypeDef;
import org.apache.ranger.plugin.model.RangerServiceDef.RangerAccessTypeDef.AccessTypeCategory;
@@ -56,728 +57,779 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import static org.apache.ranger.plugin.util.ServiceDefUtil.IMPLICIT_CONDITION_EXPRESSION_EVALUATOR;
-public abstract class RangerServiceDefServiceBase<T extends XXServiceDefBase, V extends RangerServiceDef>
- extends RangerBaseModelService<T, V> {
- private static final Logger LOG = LoggerFactory.getLogger(RangerServiceDefServiceBase.class);
-
- private static final String OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS = "__accessTypeRestrictions";
- private static final String OPTION_RESOURCE_IS_VALID_LEAF = "__isValidLeaf";
- public static final String PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION = "ranger.servicedef.enableImplicitConditionExpression";
-
- @Autowired
- RangerAuditFields<?> rangerAuditFields;
-
- @Autowired
- JSONUtil jsonUtil;
-
- @Autowired
- GUIDUtil guidUtil;
-
- public RangerServiceDefServiceBase() {
- super();
-
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- sortFields.add(new SortField(SearchFilter.SERVICE_TYPE_ID, "obj.id"));
- sortFields.add(new SortField(SearchFilter.SERVICE_TYPE, "obj.name"));
- sortFields.add(new SortField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName"));
- }
-
- @Override
- protected V populateViewBean(T xServiceDef) {
- V serviceDef = super.populateViewBean((T) xServiceDef);
- Long serviceDefId = xServiceDef.getId();
-
- List<XXServiceConfigDef> xConfigs = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xConfigs)) {
- List<RangerServiceConfigDef> configs = new ArrayList<RangerServiceConfigDef>();
- for (XXServiceConfigDef xConfig : xConfigs) {
- RangerServiceConfigDef config = populateXXToRangerServiceConfigDef(xConfig);
- configs.add(config);
- }
- serviceDef.setConfigs(configs);
- }
-
- List<XXResourceDef> xResources = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xResources)) {
- List<RangerResourceDef> resources = new ArrayList<RangerResourceDef>();
- for (XXResourceDef xResource : xResources) {
- RangerResourceDef resource = populateXXToRangerResourceDef(xResource);
- resources.add(resource);
- }
- serviceDef.setResources(resources);
- }
-
- List<XXAccessTypeDef> xAccessTypes = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId);
- Map<String, List<String>> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xAccessTypes)) {
- List<RangerAccessTypeDef> accessTypes = new ArrayList<RangerAccessTypeDef>();
- for (XXAccessTypeDef xAtd : xAccessTypes) {
- RangerAccessTypeDef accessType = populateXXToRangerAccessTypeDef(xAtd, impliedGrants.get(xAtd.getName()));
- accessTypes.add(accessType);
- }
- serviceDef.setAccessTypes(accessTypes);
- }
-
- serviceDef.setMarkerAccessTypes(ServiceDefUtil.getMarkerAccessTypes(serviceDef.getAccessTypes()));
-
- List<XXPolicyConditionDef> xPolicyConditions = daoMgr.getXXPolicyConditionDef()
- .findByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xPolicyConditions)) {
- List<RangerPolicyConditionDef> policyConditions = new ArrayList<RangerPolicyConditionDef>();
- for (XXPolicyConditionDef xPolicyCondDef : xPolicyConditions) {
- RangerPolicyConditionDef policyCondition = populateXXToRangerPolicyConditionDef(xPolicyCondDef);
- policyConditions.add(policyCondition);
- }
- serviceDef.setPolicyConditions(policyConditions);
- }
-
- List<XXContextEnricherDef> xContextEnrichers = daoMgr.getXXContextEnricherDef()
- .findByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xContextEnrichers)) {
- List<RangerContextEnricherDef> contextEnrichers = new ArrayList<RangerContextEnricherDef>();
- for (XXContextEnricherDef xContextEnricherDef : xContextEnrichers) {
- RangerContextEnricherDef contextEnricher = populateXXToRangerContextEnricherDef(xContextEnricherDef);
- contextEnrichers.add(contextEnricher);
- }
- serviceDef.setContextEnrichers(contextEnrichers);
- }
-
- List<XXEnumDef> xEnumList = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xEnumList)) {
- List<RangerEnumDef> enums = new ArrayList<RangerEnumDef>();
- for (XXEnumDef xEnum : xEnumList) {
- RangerEnumDef vEnum = populateXXToRangerEnumDef(xEnum);
- enums.add(vEnum);
- }
- serviceDef.setEnums(enums);
- }
-
- RangerDataMaskDef dataMaskDef = new RangerDataMaskDef();
- RangerRowFilterDef rowFilterDef = new RangerRowFilterDef();
-
- List<XXDataMaskTypeDef> xDataMaskTypes = daoMgr.getXXDataMaskTypeDef().findByServiceDefId(serviceDefId);
- if (!stringUtil.isEmpty(xDataMaskTypes)) {
- List<RangerDataMaskTypeDef> dataMaskTypes = new ArrayList<RangerDataMaskTypeDef>();
- for (XXDataMaskTypeDef xDataMaskType : xDataMaskTypes) {
- RangerDataMaskTypeDef dataMaskType = populateXXToRangerDataMaskTypeDef(xDataMaskType);
- dataMaskTypes.add(dataMaskType);
- }
-
- dataMaskDef.setMaskTypes(dataMaskTypes);
- }
-
- if (!stringUtil.isEmpty(xResources)) {
- for (XXResourceDef xResource : xResources) {
- if (StringUtils.isNotEmpty(xResource.getDataMaskOptions())) {
- RangerResourceDef dataMaskResource = jsonToObject(xResource.getDataMaskOptions(), RangerResourceDef.class);
-
- dataMaskDef.getResources().add(dataMaskResource);
- }
-
- if (StringUtils.isNotEmpty(xResource.getRowFilterOptions())) {
- RangerResourceDef resource = jsonToObject(xResource.getRowFilterOptions(), RangerResourceDef.class);
-
- rowFilterDef.getResources().add(resource);
- }
- }
- }
-
- if (!stringUtil.isEmpty(xAccessTypes)) {
- for (XXAccessTypeDef xAtd : xAccessTypes) {
- if(StringUtils.isNotEmpty(xAtd.getDataMaskOptions())) {
- RangerAccessTypeDef dataMaskAccessType = jsonToObject(xAtd.getDataMaskOptions(), RangerAccessTypeDef.class);
-
- dataMaskDef.getAccessTypes().add(dataMaskAccessType);
- }
-
- if(StringUtils.isNotEmpty(xAtd.getRowFilterOptions())) {
- RangerAccessTypeDef accessType = jsonToObject(xAtd.getRowFilterOptions(), RangerAccessTypeDef.class);
-
- rowFilterDef.getAccessTypes().add(accessType);
- }
- }
- }
- serviceDef.setDataMaskDef(dataMaskDef);
- serviceDef.setRowFilterDef(rowFilterDef);
-
- addImplicitConditionExpressionIfNeeded(serviceDef);
-
- ServiceDefUtil.normalize(serviceDef);
-
- return serviceDef;
- }
-
- @Override
- protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
-
- String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
-
- xObj.setGuid(guid);
- xObj.setName(vObj.getName());
- xObj.setDisplayName(vObj.getDisplayName());
- xObj.setImplclassname(vObj.getImplClass());
- xObj.setLabel(vObj.getLabel());
- xObj.setDescription(vObj.getDescription());
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setRbkeydescription(vObj.getRbKeyDescription());
- xObj.setIsEnabled(vObj.getIsEnabled());
-
- xObj.setDefOptions(mapToJsonString(vObj.getOptions()));
-
- return xObj;
- }
-
- @Override
- protected V mapEntityToViewBean(V vObj, T xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setVersion(xObj.getVersion());
- vObj.setName(xObj.getName());
- vObj.setImplClass(xObj.getImplclassname());
- vObj.setLabel(xObj.getLabel());
- vObj.setDescription(xObj.getDescription());
- vObj.setOptions(jsonStringToMap(xObj.getDefOptions()));
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- vObj.setRbKeyDescription(xObj.getRbkeydescription());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setDisplayName(xObj.getDisplayName());
- return vObj;
- }
-
- public XXServiceConfigDef populateRangerServiceConfigDefToXX(RangerServiceConfigDef vObj, XXServiceConfigDef xObj,
- XXServiceDef serviceDef, int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerServiceConfigDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setType(vObj.getType());
- xObj.setSubtype(vObj.getSubType());
- xObj.setIsMandatory(vObj.getMandatory());
- xObj.setDefaultvalue(vObj.getDefaultValue());
- xObj.setValidationRegEx(vObj.getValidationRegEx());
- xObj.setValidationMessage(vObj.getValidationMessage());
- xObj.setUiHint(vObj.getUiHint());
- xObj.setLabel(vObj.getLabel());
- xObj.setDescription(vObj.getDescription());
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setRbkeydescription(vObj.getRbKeyDescription());
- xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
- return xObj;
- }
-
- public RangerServiceConfigDef populateXXToRangerServiceConfigDef(XXServiceConfigDef xObj) {
- RangerServiceConfigDef vObj = new RangerServiceConfigDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setType(xObj.getType());
- vObj.setSubType(xObj.getSubtype());
- vObj.setMandatory(xObj.getIsMandatory());
- vObj.setDefaultValue(xObj.getDefaultvalue());
- vObj.setValidationRegEx(xObj.getValidationRegEx());
- vObj.setValidationMessage(xObj.getValidationMessage());
- vObj.setUiHint(xObj.getUiHint());
- vObj.setLabel(xObj.getLabel());
- vObj.setDescription(xObj.getDescription());
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- vObj.setRbKeyDescription(xObj.getRbkeydescription());
- vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
- return vObj;
- }
-
- public XXResourceDef populateRangerResourceDefToXX(RangerResourceDef vObj, XXResourceDef xObj,
- XXServiceDef serviceDef, int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerResourceDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setType(vObj.getType());
- xObj.setLevel(vObj.getLevel());
- xObj.setMandatory(vObj.getMandatory());
- xObj.setLookupsupported(vObj.getLookupSupported());
- xObj.setRecursivesupported(vObj.getRecursiveSupported());
- xObj.setExcludessupported(vObj.getExcludesSupported());
- xObj.setMatcher(vObj.getMatcher());
-
- String accessTypeRestrictions = objectToJson((HashSet<String>)vObj.getAccessTypeRestrictions());
- String isValidLeaf = objectToJson(vObj.getIsValidLeaf());
- Map<String, String> matcherOptions = vObj.getMatcherOptions();
-
- if (StringUtils.isNotBlank(accessTypeRestrictions)) {
- matcherOptions.put(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS, accessTypeRestrictions);
- } else {
- matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
- }
-
- if (StringUtils.isNotBlank(isValidLeaf)) {
- matcherOptions.put(OPTION_RESOURCE_IS_VALID_LEAF, isValidLeaf);
- } else {
- matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
- }
+public abstract class RangerServiceDefServiceBase<T extends XXServiceDefBase, V extends RangerServiceDef> extends RangerBaseModelService<T, V> {
+ private static final Logger LOG = LoggerFactory.getLogger(RangerServiceDefServiceBase.class);
+
+ public static final String PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION = "ranger.servicedef.enableImplicitConditionExpression";
+
+ private static final String OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS = "__accessTypeRestrictions";
+ private static final String OPTION_RESOURCE_IS_VALID_LEAF = "__isValidLeaf";
+
+ @Autowired
+ RangerAuditFields<?> rangerAuditFields;
+
+ @Autowired
+ JSONUtil jsonUtil;
+
+ @Autowired
+ GUIDUtil guidUtil;
+
+ public RangerServiceDefServiceBase() {
+ super();
+
+ searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
+
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ sortFields.add(new SortField(SearchFilter.SERVICE_TYPE_ID, "obj.id"));
+ sortFields.add(new SortField(SearchFilter.SERVICE_TYPE, "obj.name"));
+ sortFields.add(new SortField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName"));
+ }
+
+ public XXServiceConfigDef populateRangerServiceConfigDefToXX(RangerServiceConfigDef vObj, XXServiceConfigDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerServiceConfigDefToXX, serviceDef can not be null");
+
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setType(vObj.getType());
+ xObj.setSubtype(vObj.getSubType());
+ xObj.setIsMandatory(vObj.getMandatory());
+ xObj.setDefaultvalue(vObj.getDefaultValue());
+ xObj.setValidationRegEx(vObj.getValidationRegEx());
+ xObj.setValidationMessage(vObj.getValidationMessage());
+ xObj.setUiHint(vObj.getUiHint());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setRbkeydescription(vObj.getRbKeyDescription());
+ xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ return xObj;
+ }
+
+ public RangerServiceConfigDef populateXXToRangerServiceConfigDef(XXServiceConfigDef xObj) {
+ RangerServiceConfigDef vObj = new RangerServiceConfigDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setType(xObj.getType());
+ vObj.setSubType(xObj.getSubtype());
+ vObj.setMandatory(xObj.getIsMandatory());
+ vObj.setDefaultValue(xObj.getDefaultvalue());
+ vObj.setValidationRegEx(xObj.getValidationRegEx());
+ vObj.setValidationMessage(xObj.getValidationMessage());
+ vObj.setUiHint(xObj.getUiHint());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+ vObj.setRbKeyDescription(xObj.getRbkeydescription());
+ vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
+
+ return vObj;
+ }
+
+ public XXResourceDef populateRangerResourceDefToXX(RangerResourceDef vObj, XXResourceDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerResourceDefToXX, serviceDef can not be null");
+
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setType(vObj.getType());
+ xObj.setLevel(vObj.getLevel());
+ xObj.setMandatory(vObj.getMandatory());
+ xObj.setLookupsupported(vObj.getLookupSupported());
+ xObj.setRecursivesupported(vObj.getRecursiveSupported());
+ xObj.setExcludessupported(vObj.getExcludesSupported());
+ xObj.setMatcher(vObj.getMatcher());
+
+ String accessTypeRestrictions = objectToJson((HashSet<String>) vObj.getAccessTypeRestrictions());
+ String isValidLeaf = objectToJson(vObj.getIsValidLeaf());
+ Map<String, String> matcherOptions = vObj.getMatcherOptions();
+
+ if (StringUtils.isNotBlank(accessTypeRestrictions)) {
+ matcherOptions.put(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS, accessTypeRestrictions);
+ } else {
+ matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
+ }
+
+ if (StringUtils.isNotBlank(isValidLeaf)) {
+ matcherOptions.put(OPTION_RESOURCE_IS_VALID_LEAF, isValidLeaf);
+ } else {
+ matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
+ }
xObj.setMatcheroptions(mapToJsonString(matcherOptions));
+ xObj.setValidationRegEx(vObj.getValidationRegEx());
+ xObj.setValidationMessage(vObj.getValidationMessage());
+ xObj.setUiHint(vObj.getUiHint());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setRbkeydescription(vObj.getRbKeyDescription());
+ xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ return xObj;
+ }
+
+ public RangerResourceDef populateXXToRangerResourceDef(XXResourceDef xObj) {
+ RangerResourceDef vObj = new RangerResourceDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setType(xObj.getType());
+ vObj.setLevel(xObj.getLevel());
+ vObj.setMandatory(xObj.getMandatory());
+ vObj.setLookupSupported(xObj.getLookupsupported());
+ vObj.setRecursiveSupported(xObj.getRecursivesupported());
+ vObj.setExcludesSupported(xObj.getExcludessupported());
+ vObj.setMatcher(xObj.getMatcher());
+
+ Map<String, String> matcherOptions = jsonStringToMap(xObj.getMatcheroptions());
+
+ if (MapUtils.isNotEmpty(matcherOptions)) {
+ String optionAccessTypeRestrictions = matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
+ String optionIsValidLeaf = matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
+
+ if (StringUtils.isNotBlank(optionAccessTypeRestrictions)) {
+ Set<String> accessTypeRestrictions = new HashSet<>();
+
+ accessTypeRestrictions = jsonToObject(optionAccessTypeRestrictions, accessTypeRestrictions.getClass());
+
+ vObj.setAccessTypeRestrictions(accessTypeRestrictions);
+ }
+
+ if (StringUtils.isNotBlank(optionIsValidLeaf)) {
+ Boolean isValidLeaf = jsonToObject(optionIsValidLeaf, Boolean.class);
+
+ vObj.setIsValidLeaf(isValidLeaf);
+ }
+ }
+
+ vObj.setMatcherOptions(matcherOptions);
+ vObj.setValidationRegEx(xObj.getValidationRegEx());
+ vObj.setValidationMessage(xObj.getValidationMessage());
+ vObj.setUiHint(xObj.getUiHint());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+ vObj.setRbKeyDescription(xObj.getRbkeydescription());
+ vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
+
+ XXResourceDef parent = daoMgr.getXXResourceDef().getById(xObj.getParent());
+ String parentName = (parent != null) ? parent.getName() : null;
+
+ vObj.setParent(parentName);
+
+ return vObj;
+ }
+
+ public XXAccessTypeDef populateRangerAccessTypeDefToXX(RangerAccessTypeDef vObj, XXAccessTypeDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerAccessTypeDefToXX, serviceDef can not be null");
+
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ if (vObj.getCategory() != null) {
+ xObj.setCategory((short) vObj.getCategory().ordinal());
+ }
+
+ return xObj;
+ }
+
+ public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj) {
+ List<String> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByATDId(xObj.getId());
+
+ return populateXXToRangerAccessTypeDef(xObj, impliedGrants);
+ }
+
+ public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj, List<String> impliedGrants) {
+ RangerAccessTypeDef vObj = new RangerAccessTypeDef();
+
+ if (impliedGrants == null) {
+ impliedGrants = new ArrayList<>();
+ }
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+ vObj.setImpliedGrants(impliedGrants);
+
+ if (xObj.getCategory() != null) {
+ vObj.setCategory(toAccessTypeCategory(xObj.getCategory()));
+ }
+
+ return vObj;
+ }
+
+ public XXPolicyConditionDef populateRangerPolicyConditionDefToXX(RangerPolicyConditionDef vObj, XXPolicyConditionDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerPolicyConditionDefToXX, serviceDef can not be null");
+
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setEvaluator(vObj.getEvaluator());
+ xObj.setEvaluatoroptions(mapToJsonString(vObj.getEvaluatorOptions()));
+ xObj.setValidationRegEx(vObj.getValidationRegEx());
+ xObj.setValidationMessage(vObj.getValidationMessage());
+ xObj.setUiHint(vObj.getUiHint());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setRbkeydescription(vObj.getRbKeyDescription());
+ xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ return xObj;
+ }
+
+ public RangerPolicyConditionDef populateXXToRangerPolicyConditionDef(XXPolicyConditionDef xObj) {
+ RangerPolicyConditionDef vObj = new RangerPolicyConditionDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setEvaluator(xObj.getEvaluator());
+ vObj.setEvaluatorOptions(jsonStringToMap(xObj.getEvaluatoroptions()));
+ vObj.setValidationRegEx(xObj.getValidationRegEx());
+ vObj.setValidationMessage(xObj.getValidationMessage());
+ vObj.setUiHint(xObj.getUiHint());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+ vObj.setRbKeyDescription(xObj.getRbkeydescription());
+ vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
+
+ return vObj;
+ }
+
+ public XXContextEnricherDef populateRangerContextEnricherDefToXX(RangerContextEnricherDef vObj, XXContextEnricherDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerContextEnricherDefToXX, serviceDef can not be null");
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setEnricher(vObj.getEnricher());
+ xObj.setEnricherOptions(mapToJsonString(vObj.getEnricherOptions()));
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ return xObj;
+ }
+
+ public RangerContextEnricherDef populateXXToRangerContextEnricherDef(XXContextEnricherDef xObj) {
+ RangerContextEnricherDef vObj = new RangerContextEnricherDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setEnricher(xObj.getEnricher());
+ vObj.setEnricherOptions(jsonStringToMap(xObj.getEnricherOptions()));
+
+ return vObj;
+ }
+
+ public XXEnumDef populateRangerEnumDefToXX(RangerEnumDef vObj, XXEnumDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerEnumDefToXX, serviceDef can not be null");
+
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setDefaultindex(vObj.getDefaultIndex());
+
+ return xObj;
+ }
+
+ public RangerEnumDef populateXXToRangerEnumDef(XXEnumDef xObj) {
+ RangerEnumDef vObj = new RangerEnumDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setDefaultIndex(xObj.getDefaultindex());
+
+ List<XXEnumElementDef> xElements = daoMgr.getXXEnumElementDef().findByEnumDefId(xObj.getId());
+ List<RangerEnumElementDef> elements = new ArrayList<>();
+
+ for (XXEnumElementDef xEle : xElements) {
+ RangerEnumElementDef element = populateXXToRangerEnumElementDef(xEle);
+
+ elements.add(element);
+ }
+
+ vObj.setElements(elements);
+
+ return vObj;
+ }
+
+ public XXEnumElementDef populateRangerEnumElementDefToXX(RangerEnumElementDef vObj, XXEnumElementDef xObj, XXEnumDef enumDef, int operationContext) {
+ if (enumDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerEnumElementDefToXX, enumDef can not be null");
+
+ throw restErrorUtil.createRESTException("enumDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, enumDef);
+
+ xObj.setEnumdefid(enumDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ return xObj;
+ }
+
+ public RangerEnumElementDef populateXXToRangerEnumElementDef(XXEnumElementDef xObj) {
+ RangerEnumElementDef vObj = new RangerEnumElementDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+
+ return vObj;
+ }
+
+ public XXDataMaskTypeDef populateRangerDataMaskDefToXX(RangerDataMaskTypeDef vObj, XXDataMaskTypeDef xObj, XXServiceDef serviceDef, int operationContext) {
+ if (serviceDef == null) {
+ LOG.error("RangerServiceDefServiceBase.populateRangerDataMaskDefToXX, serviceDef can not be null");
+
+ throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+ xObj.setDefid(serviceDef.getId());
+ xObj.setItemId(vObj.getItemId());
+ xObj.setName(vObj.getName());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setTransformer(vObj.getTransformer());
+ xObj.setDataMaskOptions(mapToJsonString(vObj.getDataMaskOptions()));
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setRbKeyDescription(vObj.getRbKeyDescription());
+ xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+ return xObj;
+ }
+
+ public RangerDataMaskTypeDef populateXXToRangerDataMaskTypeDef(XXDataMaskTypeDef xObj) {
+ RangerDataMaskTypeDef vObj = new RangerDataMaskTypeDef();
+
+ vObj.setItemId(xObj.getItemId());
+ vObj.setName(xObj.getName());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setTransformer(xObj.getTransformer());
+ vObj.setDataMaskOptions(jsonStringToMap(xObj.getDataMaskOptions()));
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+ vObj.setRbKeyDescription(xObj.getRbKeyDescription());
+
+ return vObj;
+ }
+
+ public RangerServiceDefList searchRangerServiceDefs(SearchFilter searchFilter) {
+ RangerServiceDefList retList = new RangerServiceDefList();
+ int startIndex = searchFilter.getStartIndex();
+ int pageSize = searchFilter.getMaxRows();
+ String denyCondition = searchFilter.getParam(SearchFilter.FETCH_DENY_CONDITION);
+
+ searchFilter.setStartIndex(0);
+ searchFilter.setMaxRows(Integer.MAX_VALUE);
+
+ boolean isAuditPage = searchFilter.getParam("pageSource") != null;
+ List<T> xSvcDefList = searchResources(searchFilter, searchFields, sortFields, retList);
+ List<T> permittedServiceDefs = new ArrayList<>();
+
+ for (T xSvcDef : xSvcDefList) {
+ if ((bizUtil.hasAccess(xSvcDef, null) || (bizUtil.isAdmin() && isAuditPage)) || ("true".equals(denyCondition))) {
+ if (!bizUtil.isGdsServiceDef(xSvcDef)) {
+ permittedServiceDefs.add(xSvcDef);
+ }
+ }
+ }
+
+ if (!permittedServiceDefs.isEmpty()) {
+ populatePageList(permittedServiceDefs, startIndex, pageSize, retList);
+ }
+
+ return retList;
+ }
+
+ public String objectToJson(Serializable obj) {
+ String ret = null;
+
+ if (obj != null) {
+ try {
+ ret = jsonUtil.writeObjectAsString(obj);
+ } catch (Exception excp) {
+ LOG.warn("objectToJson() failed to convert object to json: {}", obj, excp);
+ }
+ }
+
+ return ret;
+ }
+
+ public <DST> DST jsonToObject(String jsonStr, Class<DST> clz) {
+ DST ret = null;
+
+ if (StringUtils.isNotEmpty(jsonStr)) {
+ try {
+ ret = jsonUtil.writeJsonToJavaObject(jsonStr, clz);
+ } catch (Exception excp) {
+ LOG.warn("jsonToObject() failed to convert json to object: {}", jsonStr, excp);
+ }
+ }
+
+ return ret;
+ }
+
+ @Override
+ protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+ String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
+
+ xObj.setGuid(guid);
+ xObj.setName(vObj.getName());
+ xObj.setDisplayName(vObj.getDisplayName());
+ xObj.setImplclassname(vObj.getImplClass());
+ xObj.setLabel(vObj.getLabel());
+ xObj.setDescription(vObj.getDescription());
+ xObj.setRbkeylabel(vObj.getRbKeyLabel());
+ xObj.setRbkeydescription(vObj.getRbKeyDescription());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setDefOptions(mapToJsonString(vObj.getOptions()));
+
+ return xObj;
+ }
+
+ @Override
+ protected V mapEntityToViewBean(V vObj, T xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setName(xObj.getName());
+ vObj.setImplClass(xObj.getImplclassname());
+ vObj.setLabel(xObj.getLabel());
+ vObj.setDescription(xObj.getDescription());
+ vObj.setOptions(jsonStringToMap(xObj.getDefOptions()));
+ vObj.setRbKeyLabel(xObj.getRbkeylabel());
+ vObj.setRbKeyDescription(xObj.getRbkeydescription());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setDisplayName(xObj.getDisplayName());
+
+ return vObj;
+ }
+
+ @Override
+ protected V populateViewBean(T xServiceDef) {
+ V serviceDef = super.populateViewBean(xServiceDef);
+ Long serviceDefId = xServiceDef.getId();
+ List<XXServiceConfigDef> xConfigs = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xConfigs)) {
+ List<RangerServiceConfigDef> configs = new ArrayList<>();
+
+ for (XXServiceConfigDef xConfig : xConfigs) {
+ RangerServiceConfigDef config = populateXXToRangerServiceConfigDef(xConfig);
+
+ configs.add(config);
+ }
+
+ serviceDef.setConfigs(configs);
+ }
+
+ List<XXResourceDef> xResources = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xResources)) {
+ List<RangerResourceDef> resources = new ArrayList<>();
+
+ for (XXResourceDef xResource : xResources) {
+ RangerResourceDef resource = populateXXToRangerResourceDef(xResource);
+
+ resources.add(resource);
+ }
+
+ serviceDef.setResources(resources);
+ }
+
+ List<XXAccessTypeDef> xAccessTypes = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId);
+ Map<String, List<String>> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xAccessTypes)) {
+ List<RangerAccessTypeDef> accessTypes = new ArrayList<>();
+
+ for (XXAccessTypeDef xAtd : xAccessTypes) {
+ RangerAccessTypeDef accessType = populateXXToRangerAccessTypeDef(xAtd, impliedGrants.get(xAtd.getName()));
+
+ accessTypes.add(accessType);
+ }
+
+ serviceDef.setAccessTypes(accessTypes);
+ }
+
+ serviceDef.setMarkerAccessTypes(ServiceDefUtil.getMarkerAccessTypes(serviceDef.getAccessTypes()));
+
+ List<XXPolicyConditionDef> xPolicyConditions = daoMgr.getXXPolicyConditionDef().findByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xPolicyConditions)) {
+ List<RangerPolicyConditionDef> policyConditions = new ArrayList<>();
+
+ for (XXPolicyConditionDef xPolicyCondDef : xPolicyConditions) {
+ RangerPolicyConditionDef policyCondition = populateXXToRangerPolicyConditionDef(xPolicyCondDef);
+
+ policyConditions.add(policyCondition);
+ }
+
+ serviceDef.setPolicyConditions(policyConditions);
+ }
+
+ List<XXContextEnricherDef> xContextEnrichers = daoMgr.getXXContextEnricherDef().findByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xContextEnrichers)) {
+ List<RangerContextEnricherDef> contextEnrichers = new ArrayList<>();
+
+ for (XXContextEnricherDef xContextEnricherDef : xContextEnrichers) {
+ RangerContextEnricherDef contextEnricher = populateXXToRangerContextEnricherDef(xContextEnricherDef);
+
+ contextEnrichers.add(contextEnricher);
+ }
+
+ serviceDef.setContextEnrichers(contextEnrichers);
+ }
+
+ List<XXEnumDef> xEnumList = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xEnumList)) {
+ List<RangerEnumDef> enums = new ArrayList<>();
+
+ for (XXEnumDef xEnum : xEnumList) {
+ RangerEnumDef vEnum = populateXXToRangerEnumDef(xEnum);
+
+ enums.add(vEnum);
+ }
+
+ serviceDef.setEnums(enums);
+ }
+
+ RangerDataMaskDef dataMaskDef = new RangerDataMaskDef();
+ RangerRowFilterDef rowFilterDef = new RangerRowFilterDef();
+ List<XXDataMaskTypeDef> xDataMaskTypes = daoMgr.getXXDataMaskTypeDef().findByServiceDefId(serviceDefId);
+
+ if (!stringUtil.isEmpty(xDataMaskTypes)) {
+ List<RangerDataMaskTypeDef> dataMaskTypes = new ArrayList<>();
+
+ for (XXDataMaskTypeDef xDataMaskType : xDataMaskTypes) {
+ RangerDataMaskTypeDef dataMaskType = populateXXToRangerDataMaskTypeDef(xDataMaskType);
+
+ dataMaskTypes.add(dataMaskType);
+ }
+
+ dataMaskDef.setMaskTypes(dataMaskTypes);
+ }
+
+ if (!stringUtil.isEmpty(xResources)) {
+ for (XXResourceDef xResource : xResources) {
+ if (StringUtils.isNotEmpty(xResource.getDataMaskOptions())) {
+ RangerResourceDef dataMaskResource = jsonToObject(xResource.getDataMaskOptions(), RangerResourceDef.class);
+
+ dataMaskDef.getResources().add(dataMaskResource);
+ }
+
+ if (StringUtils.isNotEmpty(xResource.getRowFilterOptions())) {
+ RangerResourceDef resource = jsonToObject(xResource.getRowFilterOptions(), RangerResourceDef.class);
+
+ rowFilterDef.getResources().add(resource);
+ }
+ }
+ }
+
+ if (!stringUtil.isEmpty(xAccessTypes)) {
+ for (XXAccessTypeDef xAtd : xAccessTypes) {
+ if (StringUtils.isNotEmpty(xAtd.getDataMaskOptions())) {
+ RangerAccessTypeDef dataMaskAccessType = jsonToObject(xAtd.getDataMaskOptions(), RangerAccessTypeDef.class);
+
+ dataMaskDef.getAccessTypes().add(dataMaskAccessType);
+ }
+
+ if (StringUtils.isNotEmpty(xAtd.getRowFilterOptions())) {
+ RangerAccessTypeDef accessType = jsonToObject(xAtd.getRowFilterOptions(), RangerAccessTypeDef.class);
+
+ rowFilterDef.getAccessTypes().add(accessType);
+ }
+ }
+ }
+
+ serviceDef.setDataMaskDef(dataMaskDef);
+ serviceDef.setRowFilterDef(rowFilterDef);
+
+ addImplicitConditionExpressionIfNeeded(serviceDef);
+
+ ServiceDefUtil.normalize(serviceDef);
+
+ return serviceDef;
+ }
+
+ protected Map<String, String> jsonStringToMap(String jsonStr) {
+ Map<String, String> ret = null;
+
+ if (!StringUtils.isEmpty(jsonStr)) {
+ try {
+ ret = jsonUtil.jsonToMap(jsonStr);
+ } catch (Exception excp) {
+ // fallback to earlier format: "name1=value1;name2=value2"
+ for (String optionString : jsonStr.split(";")) {
+ if (StringUtils.isEmpty(optionString)) {
+ continue;
+ }
+
+ String[] nvArr = optionString.split("=");
+ String name = nvArr.length > 0 ? nvArr[0].trim() : null;
+ String value = nvArr.length > 1 ? nvArr[1].trim() : null;
+
+ if (StringUtils.isEmpty(name)) {
+ continue;
+ }
+
+ if (ret == null) {
+ ret = new HashMap<>();
+ }
+
+ ret.put(name, value);
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ boolean addImplicitConditionExpressionIfNeeded(RangerServiceDef serviceDef) {
+ boolean ret = false;
+ boolean implicitConditionDefault = PropertiesUtil.getBooleanProperty(PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION, true);
+ boolean implicitConditionEnabled = ServiceDefUtil.getBooleanValue(serviceDef.getOptions(), RangerServiceDef.OPTION_ENABLE_IMPLICIT_CONDITION_EXPRESSION, implicitConditionDefault);
+
+ if (implicitConditionEnabled) {
+ boolean exists = false;
+ List<RangerPolicyConditionDef> conditionDefs = serviceDef.getPolicyConditions();
+
+ if (conditionDefs == null) {
+ conditionDefs = new ArrayList<>();
+ }
+
+ for (RangerPolicyConditionDef conditionDef : conditionDefs) {
+ if (StringUtils.equalsIgnoreCase(conditionDef.getEvaluator(), IMPLICIT_CONDITION_EXPRESSION_EVALUATOR)) {
+ exists = true;
+
+ break;
+ }
+ }
+
+ if (!exists) {
+ long maxItemId = ServiceDefUtil.getConditionsMaxItemId(conditionDefs);
+
+ conditionDefs.add(ServiceDefUtil.createImplicitExpressionConditionDef(maxItemId + 1));
+
+ serviceDef.setPolicyConditions(conditionDefs);
+
+ ret = true;
+ }
+ }
+
+ LOG.debug("addImplicitConditionExpressionIfNeeded(serviceType={}): implicitConditionDefault={}, implicitConditionEnabled={}, conditionDefs={}, ret={}", serviceDef.getName(), implicitConditionDefault, implicitConditionEnabled, serviceDef.getPolicyConditions(), ret);
- xObj.setValidationRegEx(vObj.getValidationRegEx());
- xObj.setValidationMessage(vObj.getValidationMessage());
- xObj.setUiHint(vObj.getUiHint());
- xObj.setLabel(vObj.getLabel());
- xObj.setDescription(vObj.getDescription());
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setRbkeydescription(vObj.getRbKeyDescription());
- xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
- return xObj;
- }
-
- public RangerResourceDef populateXXToRangerResourceDef(XXResourceDef xObj) {
- RangerResourceDef vObj = new RangerResourceDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setType(xObj.getType());
- vObj.setLevel(xObj.getLevel());
- vObj.setMandatory(xObj.getMandatory());
- vObj.setLookupSupported(xObj.getLookupsupported());
- vObj.setRecursiveSupported(xObj.getRecursivesupported());
- vObj.setExcludesSupported(xObj.getExcludessupported());
- vObj.setMatcher(xObj.getMatcher());
-
- Map<String, String> matcherOptions = jsonStringToMap(xObj.getMatcheroptions());
-
- if (MapUtils.isNotEmpty(matcherOptions)) {
- String optionAccessTypeRestrictions = matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
- String optionIsValidLeaf = matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
-
- if (StringUtils.isNotBlank(optionAccessTypeRestrictions)) {
- Set<String> accessTypeRestrictions = new HashSet<>();
-
- accessTypeRestrictions = jsonToObject(optionAccessTypeRestrictions, accessTypeRestrictions.getClass());
-
- vObj.setAccessTypeRestrictions(accessTypeRestrictions);
- }
-
- if (StringUtils.isNotBlank(optionIsValidLeaf)) {
- Boolean isValidLeaf = jsonToObject(optionIsValidLeaf, Boolean.class);
-
- vObj.setIsValidLeaf(isValidLeaf);
- }
- }
-
- vObj.setMatcherOptions(matcherOptions);
-
- vObj.setValidationRegEx(xObj.getValidationRegEx());
- vObj.setValidationMessage(xObj.getValidationMessage());
- vObj.setUiHint(xObj.getUiHint());
- vObj.setLabel(xObj.getLabel());
- vObj.setDescription(xObj.getDescription());
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- vObj.setRbKeyDescription(xObj.getRbkeydescription());
- vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
-
- XXResourceDef parent = daoMgr.getXXResourceDef().getById(xObj.getParent());
- String parentName = (parent != null) ? parent.getName() : null;
- vObj.setParent(parentName);
-
- return vObj;
- }
-
- public XXAccessTypeDef populateRangerAccessTypeDefToXX(RangerAccessTypeDef vObj, XXAccessTypeDef xObj,
- XXServiceDef serviceDef, int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerAccessTypeDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setLabel(vObj.getLabel());
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-
- if (vObj.getCategory() != null) {
- xObj.setCategory((short) vObj.getCategory().ordinal());
- }
-
- return xObj;
- }
-
- public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj) {
- List<String> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByATDId(xObj.getId());
-
- return populateXXToRangerAccessTypeDef(xObj, impliedGrants);
- }
-
- public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj, List<String> impliedGrants) {
- RangerAccessTypeDef vObj = new RangerAccessTypeDef();
-
- if (impliedGrants == null) {
- impliedGrants = new ArrayList<>();
- }
-
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setLabel(xObj.getLabel());
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- vObj.setImpliedGrants(impliedGrants);
-
- if (xObj.getCategory() != null) {
- vObj.setCategory(toAccessTypeCategory(xObj.getCategory()));
- }
-
- return vObj;
- }
-
- public XXPolicyConditionDef populateRangerPolicyConditionDefToXX(RangerPolicyConditionDef vObj,
- XXPolicyConditionDef xObj, XXServiceDef serviceDef, int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerPolicyConditionDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setEvaluator(vObj.getEvaluator());
- xObj.setEvaluatoroptions(mapToJsonString(vObj.getEvaluatorOptions()));
- xObj.setValidationRegEx(vObj.getValidationRegEx());
- xObj.setValidationMessage(vObj.getValidationMessage());
- xObj.setUiHint(vObj.getUiHint());
- xObj.setLabel(vObj.getLabel());
- xObj.setDescription(vObj.getDescription());
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setRbkeydescription(vObj.getRbKeyDescription());
- xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
- return xObj;
- }
-
- public RangerPolicyConditionDef populateXXToRangerPolicyConditionDef(XXPolicyConditionDef xObj) {
- RangerPolicyConditionDef vObj = new RangerPolicyConditionDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setEvaluator(xObj.getEvaluator());
- vObj.setEvaluatorOptions(jsonStringToMap(xObj.getEvaluatoroptions()));
- vObj.setValidationRegEx(xObj.getValidationRegEx());
- vObj.setValidationMessage(xObj.getValidationMessage());
- vObj.setUiHint(xObj.getUiHint());
- vObj.setLabel(xObj.getLabel());
- vObj.setDescription(xObj.getDescription());
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- vObj.setRbKeyDescription(xObj.getRbkeydescription());
- vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
- return vObj;
- }
-
- public XXContextEnricherDef populateRangerContextEnricherDefToXX(RangerContextEnricherDef vObj,
- XXContextEnricherDef xObj, XXServiceDef serviceDef, int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerContextEnricherDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setEnricher(vObj.getEnricher());
- xObj.setEnricherOptions(mapToJsonString(vObj.getEnricherOptions()));
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
- return xObj;
- }
-
- public RangerContextEnricherDef populateXXToRangerContextEnricherDef(XXContextEnricherDef xObj) {
- RangerContextEnricherDef vObj = new RangerContextEnricherDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setEnricher(xObj.getEnricher());
- vObj.setEnricherOptions(jsonStringToMap(xObj.getEnricherOptions()));
- return vObj;
- }
-
- public XXEnumDef populateRangerEnumDefToXX(RangerEnumDef vObj, XXEnumDef xObj, XXServiceDef serviceDef,
- int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerEnumDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setDefaultindex(vObj.getDefaultIndex());
- return xObj;
- }
-
- public RangerEnumDef populateXXToRangerEnumDef(XXEnumDef xObj) {
- RangerEnumDef vObj = new RangerEnumDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setDefaultIndex(xObj.getDefaultindex());
-
- List<XXEnumElementDef> xElements = daoMgr.getXXEnumElementDef().findByEnumDefId(xObj.getId());
- List<RangerEnumElementDef> elements = new ArrayList<RangerEnumElementDef>();
-
- for(XXEnumElementDef xEle : xElements) {
- RangerEnumElementDef element = populateXXToRangerEnumElementDef(xEle);
- elements.add(element);
- }
- vObj.setElements(elements);
-
- return vObj;
- }
-
- public XXEnumElementDef populateRangerEnumElementDefToXX(RangerEnumElementDef vObj, XXEnumElementDef xObj,
- XXEnumDef enumDef, int operationContext) {
- if(enumDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerEnumElementDefToXX, enumDef can not be null");
- throw restErrorUtil.createRESTException("enumDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, enumDef);
- xObj.setEnumdefid(enumDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setLabel(vObj.getLabel());
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
- return xObj;
- }
-
- public RangerEnumElementDef populateXXToRangerEnumElementDef(XXEnumElementDef xObj) {
- RangerEnumElementDef vObj = new RangerEnumElementDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setLabel(xObj.getLabel());
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- return vObj;
- }
-
- public XXDataMaskTypeDef populateRangerDataMaskDefToXX(RangerDataMaskTypeDef vObj, XXDataMaskTypeDef xObj,
- XXServiceDef serviceDef, int operationContext) {
- if(serviceDef == null) {
- LOG.error("RangerServiceDefServiceBase.populateRangerDataMaskDefToXX, serviceDef can not be null");
- throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
- }
-
- xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
- xObj.setDefid(serviceDef.getId());
- xObj.setItemId(vObj.getItemId());
- xObj.setName(vObj.getName());
- xObj.setLabel(vObj.getLabel());
- xObj.setDescription(vObj.getDescription());
- xObj.setTransformer(vObj.getTransformer());
- xObj.setDataMaskOptions(mapToJsonString(vObj.getDataMaskOptions()));
- xObj.setRbkeylabel(vObj.getRbKeyLabel());
- xObj.setRbKeyDescription(vObj.getRbKeyDescription());
- xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
- return xObj;
- }
-
- public RangerDataMaskTypeDef populateXXToRangerDataMaskTypeDef(XXDataMaskTypeDef xObj) {
- RangerDataMaskTypeDef vObj = new RangerDataMaskTypeDef();
- vObj.setItemId(xObj.getItemId());
- vObj.setName(xObj.getName());
- vObj.setLabel(xObj.getLabel());
- vObj.setDescription(xObj.getDescription());
- vObj.setTransformer(xObj.getTransformer());
- vObj.setDataMaskOptions(jsonStringToMap(xObj.getDataMaskOptions()));
- vObj.setRbKeyLabel(xObj.getRbkeylabel());
- vObj.setRbKeyDescription(xObj.getRbKeyDescription());
-
- return vObj;
- }
-
- public RangerServiceDefList searchRangerServiceDefs(SearchFilter searchFilter) {
- RangerServiceDefList retList = new RangerServiceDefList();
- int startIndex = searchFilter.getStartIndex();
- int pageSize = searchFilter.getMaxRows();
- String denyCondition = searchFilter.getParam(SearchFilter.FETCH_DENY_CONDITION);
- searchFilter.setStartIndex(0);
- searchFilter.setMaxRows(Integer.MAX_VALUE);
-
- boolean isAuditPage=false;
- if(searchFilter.getParam("pageSource")!=null){
- isAuditPage=true;
- }
- List<T> xSvcDefList = searchResources(searchFilter, searchFields, sortFields,
- retList);
- List<T> permittedServiceDefs = new ArrayList<T>();
- for (T xSvcDef : xSvcDefList) {
- if ((bizUtil.hasAccess(xSvcDef, null) || (bizUtil.isAdmin() && isAuditPage)) || ("true".equals(denyCondition))) {
- if (!bizUtil.isGdsServiceDef(xSvcDef)) {
- permittedServiceDefs.add(xSvcDef);
- }
- }
- }
- if (!permittedServiceDefs.isEmpty()) {
- populatePageList(permittedServiceDefs, startIndex, pageSize, retList);
- }
- return retList;
-
- }
-
-
- private void populatePageList(List<T> xxObjList, int startIndex, int pageSize,
- RangerServiceDefList retList) {
- List<RangerServiceDef> onePageList = new ArrayList<RangerServiceDef>();
-
- for (int i = startIndex; i < pageSize + startIndex && i < xxObjList.size(); i++) {
- onePageList.add(populateViewBean(xxObjList.get(i)));
- }
- retList.setServiceDefs(onePageList);
- retList.setStartIndex(startIndex);
- retList.setPageSize(pageSize);
- retList.setResultSize(onePageList.size());
- retList.setTotalCount(xxObjList.size());
- }
-
- private String mapToJsonString(Map<String, String> map) {
- String ret = null;
-
- if(map != null) {
- try {
- ret = jsonUtil.readMapToString(map);
- } catch(Exception excp) {
- LOG.warn("mapToJsonString() failed to convert map: " + map, excp);
- }
- }
-
- return ret;
- }
-
- protected Map<String, String> jsonStringToMap(String jsonStr) {
- Map<String, String> ret = null;
-
- if(!StringUtils.isEmpty(jsonStr)) {
- try {
- ret = jsonUtil.jsonToMap(jsonStr);
- } catch(Exception excp) {
- // fallback to earlier format: "name1=value1;name2=value2"
- for(String optionString : jsonStr.split(";")) {
- if(StringUtils.isEmpty(optionString)) {
- continue;
- }
-
- String[] nvArr = optionString.split("=");
-
- String name = (nvArr != null && nvArr.length > 0) ? nvArr[0].trim() : null;
- String value = (nvArr != null && nvArr.length > 1) ? nvArr[1].trim() : null;
-
- if(StringUtils.isEmpty(name)) {
- continue;
- }
-
- if(ret == null) {
- ret = new HashMap<String, String>();
- }
-
- ret.put(name, value);
- }
- }
- }
-
- return ret;
- }
-
- public String objectToJson(Serializable obj) {
- String ret = null;
-
- if(obj != null) {
- try {
- ret = jsonUtil.writeObjectAsString(obj);
- } catch(Exception excp) {
- LOG.warn("objectToJson() failed to convert object to json: " + obj, excp);
- }
- }
-
- return ret;
- }
-
- public <DST> DST jsonToObject(String jsonStr, Class<DST> clz) {
- DST ret = null;
-
- if(StringUtils.isNotEmpty(jsonStr)) {
- try {
- ret = jsonUtil.writeJsonToJavaObject(jsonStr, clz);
- } catch(Exception excp) {
- LOG.warn("jsonToObject() failed to convert json to object: " + jsonStr, excp);
- }
- }
-
- return ret;
- }
-
-
- boolean addImplicitConditionExpressionIfNeeded(RangerServiceDef serviceDef) {
- boolean ret = false;
- boolean implicitConditionDefault = PropertiesUtil.getBooleanProperty(PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION, true);
- boolean implicitConditionEnabled = ServiceDefUtil.getBooleanValue(serviceDef.getOptions(), RangerServiceDef.OPTION_ENABLE_IMPLICIT_CONDITION_EXPRESSION, implicitConditionDefault);
-
- if (implicitConditionEnabled) {
- boolean exists = false;
- List<RangerPolicyConditionDef> conditionDefs = serviceDef.getPolicyConditions();
-
- if (conditionDefs == null) {
- conditionDefs = new ArrayList<>();
- }
-
- for (RangerPolicyConditionDef conditionDef : conditionDefs) {
- if (StringUtils.equalsIgnoreCase(conditionDef.getEvaluator(), IMPLICIT_CONDITION_EXPRESSION_EVALUATOR)) {
- exists = true;
-
- break;
- }
- }
+ return ret;
+ }
- if (!exists) {
- long maxItemId = ServiceDefUtil.getConditionsMaxItemId(conditionDefs);
+ private void populatePageList(List<T> xxObjList, int startIndex, int pageSize, RangerServiceDefList retList) {
+ List<RangerServiceDef> onePageList = new ArrayList<>();
- conditionDefs.add(ServiceDefUtil.createImplicitExpressionConditionDef(maxItemId + 1));
+ for (int i = startIndex; i < pageSize + startIndex && i < xxObjList.size(); i++) {
+ onePageList.add(populateViewBean(xxObjList.get(i)));
+ }
- serviceDef.setPolicyConditions(conditionDefs);
+ retList.setServiceDefs(onePageList);
+ retList.setStartIndex(startIndex);
+ retList.setPageSize(pageSize);
+ retList.setResultSize(onePageList.size());
+ retList.setTotalCount(xxObjList.size());
+ }
- ret = true;
- }
- }
+ private String mapToJsonString(Map<String, String> map) {
+ String ret = null;
- if (LOG.isDebugEnabled()) {
- LOG.debug("addImplicitConditionExpressionIfNeeded(serviceType={}): implicitConditionDefault={}, implicitConditionEnabled={}, conditionDefs={}, ret={}", serviceDef.getName(), implicitConditionDefault, implicitConditionEnabled, serviceDef.getPolicyConditions(), ret);
- }
+ if (map != null) {
+ try {
+ ret = jsonUtil.readMapToString(map);
+ } catch (Exception excp) {
+ LOG.warn("mapToJsonString() failed to convert map: {}", map, excp);
+ }
+ }
- return ret;
- }
+ return ret;
+ }
- private AccessTypeCategory toAccessTypeCategory(short val) {
- AccessTypeCategory ret = null;
+ private AccessTypeCategory toAccessTypeCategory(short val) {
+ AccessTypeCategory ret = null;
- for (AccessTypeCategory category : AccessTypeCategory.values()) {
- if (category.ordinal() == val) {
- ret = category;
+ for (AccessTypeCategory category : AccessTypeCategory.values()) {
+ if (category.ordinal() == val) {
+ ret = category;
- break;
- }
- }
+ break;
+ }
+ }
- return ret;
- }
+ return ret;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java
index ef4984d6c..7d0861b84 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java
@@ -23,30 +23,25 @@ import org.springframework.stereotype.Service;
@Service
public class RangerServiceDefWithAssignedIdService extends RangerServiceDefServiceBase<XXServiceDefWithAssignedId, RangerServiceDef> {
-
- @Override
- protected XXServiceDefWithAssignedId mapViewToEntityBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj,
- int OPERATION_CONTEXT) {
- return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
- }
-
- @Override
- protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj) {
- return super.mapEntityToViewBean(vObj, xObj);
- }
-
- @Override
- protected void validateForCreate(RangerServiceDef vObj) {
-
- }
-
- @Override
- protected void validateForUpdate(RangerServiceDef vServiceDef, XXServiceDefWithAssignedId xServiceDef) {
-
- }
-
- public RangerServiceDef getPopulatedViewObject(XXServiceDefWithAssignedId xServiceDef) {
- return this.populateViewBean(xServiceDef);
- }
-
+ public RangerServiceDef getPopulatedViewObject(XXServiceDefWithAssignedId xServiceDef) {
+ return this.populateViewBean(xServiceDef);
+ }
+
+ @Override
+ protected XXServiceDefWithAssignedId mapViewToEntityBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj, int operationContext) {
+ return super.mapViewToEntityBean(vObj, xObj, operationContext);
+ }
+
+ @Override
+ protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj) {
+ return super.mapEntityToViewBean(vObj, xObj);
+ }
+
+ @Override
+ protected void validateForCreate(RangerServiceDef vObj) {
+ }
+
+ @Override
+ protected void validateForUpdate(RangerServiceDef vServiceDef, XXServiceDefWithAssignedId xServiceDef) {
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
index 2d1aa2e63..8fe023e6c 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
@@ -19,11 +19,6 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import org.apache.commons.collections.CollectionUtils;
@@ -31,9 +26,9 @@ import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
import org.apache.ranger.common.SearchField;
-import org.apache.ranger.common.SortField;
import org.apache.ranger.common.SearchField.DATA_TYPE;
import org.apache.ranger.common.SearchField.SEARCH_TYPE;
+import org.apache.ranger.common.SortField;
import org.apache.ranger.entity.XXServiceResource;
import org.apache.ranger.plugin.model.RangerPolicy;
import org.apache.ranger.plugin.model.RangerServiceResource;
@@ -43,15 +38,19 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
@Service
public class RangerServiceResourceService extends RangerServiceResourceServiceBase<XXServiceResource, RangerServiceResource> {
-
private static final Logger LOG = LoggerFactory.getLogger(RangerServiceResourceService.class);
- private boolean serviceUpdateNeeded = true;
- public static final TypeReference subsumedDataType = new TypeReference<Map<String, RangerPolicy.RangerPolicyResource>>() {};
+ public static final TypeReference<Map<String, RangerPolicy.RangerPolicyResource>> subsumedDataType = new TypeReference<Map<String, RangerPolicy.RangerPolicyResource>>() {};
+ public static final TypeReference<List<RangerTag>> duplicatedDataType = new TypeReference<List<RangerTag>>() {};
- public static final TypeReference duplicatedDataType = new TypeReference<List<RangerTag>>() {};
+ private boolean serviceUpdateNeeded = true;
public RangerServiceResourceService() {
searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
@@ -64,23 +63,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
sortFields.add(new SortField(SearchFilter.TAG_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId"));
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- }
-
- @Override
- protected void validateForCreate(RangerServiceResource vObj) {
-
- }
-
- @Override
- protected void validateForUpdate(RangerServiceResource vObj, XXServiceResource entityObj) {
- if (StringUtils.equals(entityObj.getGuid(), vObj.getGuid()) &&
- StringUtils.equals(entityObj.getResourceSignature(), vObj.getResourceSignature())) {
- serviceUpdateNeeded = false;
- } else {
- serviceUpdateNeeded = true;
- }
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
}
@Override
@@ -94,14 +78,22 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
return ret;
}
+ @Override
+ protected void validateForCreate(RangerServiceResource vObj) {
+ }
+
+ @Override
+ protected void validateForUpdate(RangerServiceResource vObj, XXServiceResource entityObj) {
+ serviceUpdateNeeded = !StringUtils.equals(entityObj.getGuid(), vObj.getGuid()) || !StringUtils.equals(entityObj.getResourceSignature(), vObj.getResourceSignature());
+ }
+
public RangerServiceResource getPopulatedViewObject(XXServiceResource xObj) {
return populateViewBean(xObj);
}
public RangerServiceResource getServiceResourceByGuid(String guid) {
- RangerServiceResource ret = null;
-
- XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByGuid(guid);
+ RangerServiceResource ret = null;
+ XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByGuid(guid);
if (xxServiceResource != null) {
ret = populateViewBean(xxServiceResource);
@@ -111,9 +103,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
}
public List<RangerServiceResource> getByServiceId(Long serviceId) {
- List<RangerServiceResource> ret = new ArrayList<RangerServiceResource>();
-
- List<XXServiceResource> xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
+ List<RangerServiceResource> ret = new ArrayList<>();
+ List<XXServiceResource> xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
if (CollectionUtils.isNotEmpty(xxServiceResources)) {
for (XXServiceResource xxServiceResource : xxServiceResources) {
@@ -127,9 +118,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
}
public RangerServiceResource getByServiceAndResourceSignature(Long serviceId, String resourceSignature) {
- RangerServiceResource ret = null;
-
- XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByServiceAndResourceSignature(serviceId, resourceSignature);
+ RangerServiceResource ret = null;
+ XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByServiceAndResourceSignature(serviceId, resourceSignature);
if (xxServiceResource != null) {
ret = populateViewBean(xxServiceResource);
@@ -139,9 +129,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
}
public List<RangerServiceResource> getTaggedResourcesInServiceId(Long serviceId) {
- List<RangerServiceResource> ret = new ArrayList<RangerServiceResource>();
-
- List<XXServiceResource> xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
+ List<RangerServiceResource> ret = new ArrayList<>();
+ List<XXServiceResource> xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
if (CollectionUtils.isNotEmpty(xxServiceResources)) {
for (XXServiceResource xxServiceResource : xxServiceResources) {
@@ -157,12 +146,14 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
@Override
protected XXServiceResource mapViewToEntityBean(RangerServiceResource serviceResource, XXServiceResource xxServiceResource, int operationContext) {
XXServiceResource ret = super.mapViewToEntityBean(serviceResource, xxServiceResource, operationContext);
+
if (MapUtils.isNotEmpty(serviceResource.getResourceElements())) {
String serviceResourceElements = JsonUtils.mapToJson(serviceResource.getResourceElements());
+
if (StringUtils.isNotEmpty(serviceResourceElements)) {
ret.setServiceResourceElements(serviceResourceElements);
} else {
- LOG.info("Empty string representing serviceResourceElements in [" + ret + "]!!");
+ LOG.info("Empty string representing serviceResourceElements in [{}]!!", ret);
}
}
@@ -172,20 +163,23 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
@Override
protected RangerServiceResource mapEntityToViewBean(RangerServiceResource serviceResource, XXServiceResource xxServiceResource) {
RangerServiceResource ret = super.mapEntityToViewBean(serviceResource, xxServiceResource);
+
if (StringUtils.isNotEmpty(xxServiceResource.getServiceResourceElements())) {
Map<String, RangerPolicy.RangerPolicyResource> serviceResourceElements = null;
+
try {
- serviceResourceElements = (Map<String, RangerPolicy.RangerPolicyResource>) JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
+ serviceResourceElements = JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
} catch (JsonProcessingException e) {
LOG.error("Error occurred while processing JSON ", e);
}
+
if (MapUtils.isNotEmpty(serviceResourceElements)) {
ret.setResourceElements(serviceResourceElements);
} else {
- LOG.info("Empty serviceResourceElement in [" + ret + "]!!");
+ LOG.info("Empty serviceResourceElement in [{}]!!", ret);
}
} else {
- LOG.info("Empty string representing serviceResourceElements in [" + xxServiceResource + "]!!");
+ LOG.info("Empty string representing serviceResourceElements in [{}]!!", xxServiceResource);
}
return ret;
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
index 69b64383c..1f342a507 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
@@ -19,11 +19,6 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.common.GUIDUtil;
import org.apache.ranger.common.MessageEnums;
@@ -38,58 +33,83 @@ import org.apache.ranger.plugin.store.PList;
import org.apache.ranger.plugin.util.SearchFilter;
import org.springframework.beans.factory.annotation.Autowired;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
public abstract class RangerServiceResourceServiceBase<T extends XXServiceResource, V extends RangerServiceResource> extends RangerBaseModelService<T, V> {
+ @Autowired
+ GUIDUtil guidUtil;
+
+ public PList<V> searchServiceResources(SearchFilter searchFilter) {
+ PList<V> retList = new PList<>();
+ List<V> resourceList = new ArrayList<>();
+ List<T> xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
+
+ for (T xResource : xResourceList) {
+ V taggedRes = populateViewBean(xResource);
+
+ resourceList.add(taggedRes);
+ }
- @Autowired
- GUIDUtil guidUtil;
+ retList.setList(resourceList);
+ retList.setResultSize(resourceList.size());
+ retList.setPageSize(searchFilter.getMaxRows());
+ retList.setStartIndex(searchFilter.getStartIndex());
+ retList.setSortType(searchFilter.getSortType());
+ retList.setSortBy(searchFilter.getSortBy());
- @Override
- protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
- String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
+ return retList;
+ }
- xObj.setGuid(guid);
- xObj.setVersion(vObj.getVersion());
- xObj.setIsEnabled(vObj.getIsEnabled());
- xObj.setResourceSignature(vObj.getResourceSignature());
+ @Override
+ protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+ String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
- XXService xService = daoMgr.getXXService().findByName(vObj.getServiceName());
- if (xService == null) {
- throw restErrorUtil.createRESTException("Error Populating XXServiceResource. No Service found with name: " + vObj.getServiceName(), MessageEnums.INVALID_INPUT_DATA);
- }
+ xObj.setGuid(guid);
+ xObj.setVersion(vObj.getVersion());
+ xObj.setIsEnabled(vObj.getIsEnabled());
+ xObj.setResourceSignature(vObj.getResourceSignature());
- xObj.setServiceId(xService.getId());
+ XXService xService = daoMgr.getXXService().findByName(vObj.getServiceName());
- return xObj;
- }
+ if (xService == null) {
+ throw restErrorUtil.createRESTException("Error Populating XXServiceResource. No Service found with name: " + vObj.getServiceName(), MessageEnums.INVALID_INPUT_DATA);
+ }
- @Override
- protected V mapEntityToViewBean(V vObj, T xObj) {
- vObj.setGuid(xObj.getGuid());
- vObj.setVersion(xObj.getVersion());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setResourceSignature(xObj.getResourceSignature());
+ xObj.setServiceId(xService.getId());
- XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
+ return xObj;
+ }
- vObj.setServiceName(xService.getName());
+ @Override
+ protected V mapEntityToViewBean(V vObj, T xObj) {
+ vObj.setGuid(xObj.getGuid());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setResourceSignature(xObj.getResourceSignature());
- Map<String, RangerPolicy.RangerPolicyResource> resourceElements = getServiceResourceElements(xObj);
+ XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
- vObj.setResourceElements(resourceElements);
+ vObj.setServiceName(xService.getName());
- return vObj;
- }
+ Map<String, RangerPolicy.RangerPolicyResource> resourceElements = getServiceResourceElements(xObj);
- Map<String, RangerPolicyResource> getServiceResourceElements(T xObj) {
- List<XXServiceResourceElement> resElementList = daoMgr.getXXServiceResourceElement().findByResourceId(xObj.getId());
- Map<String, RangerPolicy.RangerPolicyResource> resourceElements = new HashMap<String, RangerPolicy.RangerPolicyResource>();
+ vObj.setResourceElements(resourceElements);
- for (XXServiceResourceElement resElement : resElementList) {
- List<String> resValueMapList = daoMgr.getXXServiceResourceElementValue().findValuesByResElementId(resElement.getId());
+ return vObj;
+ }
- XXResourceDef xResDef = daoMgr.getXXResourceDef().getById(resElement.getResDefId());
+ Map<String, RangerPolicyResource> getServiceResourceElements(T xObj) {
+ List<XXServiceResourceElement> resElementList = daoMgr.getXXServiceResourceElement().findByResourceId(xObj.getId());
+ Map<String, RangerPolicy.RangerPolicyResource> resourceElements = new HashMap<>();
+
+ for (XXServiceResourceElement resElement : resElementList) {
+ List<String> resValueMapList = daoMgr.getXXServiceResourceElementValue().findValuesByResElementId(resElement.getId());
+ XXResourceDef xResDef = daoMgr.getXXResourceDef().getById(resElement.getResDefId());
+ RangerPolicyResource policyRes = new RangerPolicyResource();
- RangerPolicyResource policyRes = new RangerPolicyResource();
policyRes.setIsExcludes(resElement.getIsExcludes());
policyRes.setIsRecursive(resElement.getIsRecursive());
policyRes.setValues(resValueMapList);
@@ -98,25 +118,4 @@ public abstract class RangerServiceResourceServiceBase<T extends XXServiceResour
}
return resourceElements;
}
-
- public PList<V> searchServiceResources(SearchFilter searchFilter) {
- PList<V> retList = new PList<V>();
- List<V> resourceList = new ArrayList<V>();
-
- List<T> xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
-
- for (T xResource : xResourceList) {
- V taggedRes = populateViewBean(xResource);
- resourceList.add(taggedRes);
- }
- retList.setList(resourceList);
- retList.setResultSize(resourceList.size());
- retList.setPageSize(searchFilter.getMaxRows());
- retList.setStartIndex(searchFilter.getStartIndex());
- retList.setSortType(searchFilter.getSortType());
- retList.setSortBy(searchFilter.getSortBy());
-
- return retList;
- }
-
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
index 6660c9c70..44be8dd41 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
@@ -19,18 +19,14 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
import com.fasterxml.jackson.core.JsonProcessingException;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.utils.JsonUtils;
import org.apache.ranger.common.SearchField;
-import org.apache.ranger.common.SortField;
import org.apache.ranger.common.SearchField.DATA_TYPE;
import org.apache.ranger.common.SearchField.SEARCH_TYPE;
+import org.apache.ranger.common.SortField;
import org.apache.ranger.entity.XXServiceResource;
import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
import org.apache.ranger.plugin.model.RangerServiceResourceWithTags;
@@ -40,83 +36,86 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
@Service
public class RangerServiceResourceWithTagsService extends RangerServiceResourceWithTagsServiceBase<XXServiceResource, RangerServiceResourceWithTags> {
-
- private static final Logger LOG = LoggerFactory.getLogger(RangerServiceResourceWithTagsService.class);
-
- public RangerServiceResourceWithTagsService() {
- searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME, "service.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXService service", "obj.serviceId = service.id"));
- searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME_PARTIAL, "service.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL, "XXService service", "obj.serviceId = service.id"));
- searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_SIGNATURE, "obj.resourceSignature", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_IDS, "obj.id", DATA_TYPE.INT_LIST, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ELEMENTS, "obj.serviceResourceElements", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField(SearchFilter.TAG_NAMES, "tagDef.name", DATA_TYPE.STR_LIST, SEARCH_TYPE.FULL, "XXTagResourceMap map, XXTag tag, XXTagDef tagDef", "obj.id = map.resourceId and map.tagId = tag.id and tag.type = tagDef.id"));
+ private static final Logger LOG = LoggerFactory.getLogger(RangerServiceResourceWithTagsService.class);
+
+ public RangerServiceResourceWithTagsService() {
+ searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME, "service.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXService service", "obj.serviceId = service.id"));
+ searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME_PARTIAL, "service.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL, "XXService service", "obj.serviceId = service.id"));
+ searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_SIGNATURE, "obj.resourceSignature", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_IDS, "obj.id", DATA_TYPE.INT_LIST, SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ELEMENTS, "obj.serviceResourceElements", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+ searchFields.add(new SearchField(SearchFilter.TAG_NAMES, "tagDef.name", DATA_TYPE.STR_LIST, SEARCH_TYPE.FULL, "XXTagResourceMap map, XXTag tag, XXTagDef tagDef", "obj.id = map.resourceId and map.tagId = tag.id and tag.type = tagDef.id"));
sortFields.add(new SortField(SearchFilter.TAG_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
- sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId"));
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+ sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId"));
+ sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+ sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
}
- @Override
- protected XXServiceResource mapViewToEntityBean(RangerServiceResourceWithTags viewBean, XXServiceResource t, int OPERATION_CONTEXT) {
- return null;
- }
+ public RangerServiceResourceWithTags getPopulatedViewObject(XXServiceResource xObj) {
+ return this.populateViewBean(xObj);
+ }
- @Override
- protected void validateForCreate(RangerServiceResourceWithTags vObj) {
- }
+ public RangerServiceResourceWithTagsList searchServiceResourcesWithTags(SearchFilter filter) {
+ LOG.debug("==> searchServiceResourcesWithTags({})", filter);
- @Override
- protected void validateForUpdate(RangerServiceResourceWithTags vObj, XXServiceResource entityObj) {
- }
+ RangerServiceResourceWithTagsList ret = new RangerServiceResourceWithTagsList();
+ List<XXServiceResource> xObjList = super.searchResources(filter, searchFields, sortFields, ret);
+ List<RangerServiceResourceWithTags> resourceList = new ArrayList<>();
- public RangerServiceResourceWithTags getPopulatedViewObject(XXServiceResource xObj) {
- return this.populateViewBean(xObj);
- }
+ if (xObjList != null) {
+ for (XXServiceResource resource : xObjList) {
+ resourceList.add(getPopulatedViewObject(resource));
+ }
+ }
- public RangerServiceResourceWithTagsList searchServiceResourcesWithTags(SearchFilter filter) {
- LOG.debug("==> searchServiceResourcesWithTags({})", filter);
+ ret.setResourceList(resourceList);
- RangerServiceResourceWithTagsList ret = new RangerServiceResourceWithTagsList();
- List<XXServiceResource> xObjList = super.searchResources(filter, searchFields, sortFields, ret);
- List<RangerServiceResourceWithTags> resourceList = new ArrayList<>();
+ LOG.debug("<== searchServiceResourcesWithTags({}): ret={}", filter, ret);
- if (xObjList != null) {
- for (XXServiceResource resource:xObjList) {
- resourceList.add(getPopulatedViewObject(resource));
- }
- }
+ return ret;
+ }
- ret.setResourceList(resourceList);
+ @Override
+ protected XXServiceResource mapViewToEntityBean(RangerServiceResourceWithTags viewBean, XXServiceResource t, int operationContext) {
+ return null;
+ }
- LOG.debug("<== searchServiceResourcesWithTags({}): ret={}", filter, ret);
+ @Override
+ protected void validateForCreate(RangerServiceResourceWithTags vObj) {
+ }
- return ret;
- }
+ @Override
+ protected void validateForUpdate(RangerServiceResourceWithTags vObj, XXServiceResource entityObj) {
+ }
- @Override
+ @Override
protected RangerServiceResourceWithTags mapEntityToViewBean(RangerServiceResourceWithTags serviceResourceWithTags, XXServiceResource xxServiceResource) {
- RangerServiceResourceWithTags ret = super.mapEntityToViewBean(serviceResourceWithTags, xxServiceResource);
+ RangerServiceResourceWithTags ret = super.mapEntityToViewBean(serviceResourceWithTags, xxServiceResource);
if (StringUtils.isNotEmpty(xxServiceResource.getServiceResourceElements())) {
- try {
- Map<String, RangerPolicyResource> serviceResourceElements = (Map<String, RangerPolicyResource>) JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
-
- if (MapUtils.isNotEmpty(serviceResourceElements)) {
- ret.setResourceElements(serviceResourceElements);
- } else {
- LOG.info("Empty serviceResourceElement in [" + ret + "]!!");
- }
- } catch (JsonProcessingException e) {
- LOG.error("Error occurred while processing json", e);
- }
+ try {
+ Map<String, RangerPolicyResource> serviceResourceElements = (Map<String, RangerPolicyResource>) JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
+
+ if (MapUtils.isNotEmpty(serviceResourceElements)) {
+ ret.setResourceElements(serviceResourceElements);
+ } else {
+ LOG.info("Empty serviceResourceElement in [{}]!!", ret);
+ }
+ } catch (JsonProcessingException e) {
+ LOG.error("Error occurred while processing json", e);
+ }
} else {
- LOG.info("Empty string representing serviceResourceElements in [" + xxServiceResource + "]!!");
+ LOG.info("Empty string representing serviceResourceElements in [{}]!!", xxServiceResource);
}
return ret;
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
index 57cd20ab3..6c52e05fe 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
@@ -19,9 +19,6 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.ranger.authorization.utils.JsonUtils;
import org.apache.ranger.entity.XXService;
import org.apache.ranger.entity.XXServiceResource;
@@ -29,39 +26,41 @@ import org.apache.ranger.plugin.model.RangerServiceResourceWithTags;
import org.apache.ranger.plugin.store.PList;
import org.apache.ranger.plugin.util.SearchFilter;
-public abstract class RangerServiceResourceWithTagsServiceBase<T extends XXServiceResource, V extends RangerServiceResourceWithTags> extends RangerBaseModelService<T, V> {
+import java.util.ArrayList;
+import java.util.List;
- @Override
- protected V mapEntityToViewBean(V vObj, T xObj) {
- XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
+public abstract class RangerServiceResourceWithTagsServiceBase<T extends XXServiceResource, V extends RangerServiceResourceWithTags> extends RangerBaseModelService<T, V> {
+ public PList<V> searchServiceResources(SearchFilter searchFilter) {
+ PList<V> retList = new PList<V>();
+ List<V> resourceList = new ArrayList<V>();
+ List<T> xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
- vObj.setGuid(xObj.getGuid());
- vObj.setVersion(xObj.getVersion());
- vObj.setIsEnabled(xObj.getIsEnabled());
- vObj.setServiceName(xService.getName());
- vObj.setAssociatedTags(JsonUtils.jsonToRangerTagList(xObj.getTags()));
+ for (T xResource : xResourceList) {
+ V taggedRes = populateViewBean(xResource);
- return vObj;
- }
+ resourceList.add(taggedRes);
+ }
- public PList<V> searchServiceResources(SearchFilter searchFilter) {
- PList<V> retList = new PList<V>();
- List<V> resourceList = new ArrayList<V>();
- List<T> xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
+ retList.setList(resourceList);
+ retList.setResultSize(resourceList.size());
+ retList.setPageSize(searchFilter.getMaxRows());
+ retList.setStartIndex(searchFilter.getStartIndex());
+ retList.setSortType(searchFilter.getSortType());
+ retList.setSortBy(searchFilter.getSortBy());
- for (T xResource : xResourceList) {
- V taggedRes = populateViewBean(xResource);
+ return retList;
+ }
- resourceList.add(taggedRes);
- }
+ @Override
+ protected V mapEntityToViewBean(V vObj, T xObj) {
+ XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
- retList.setList(resourceList);
- retList.setResultSize(resourceList.size());
- retList.setPageSize(searchFilter.getMaxRows());
- retList.setStartIndex(searchFilter.getStartIndex());
- retList.setSortType(searchFilter.getSortType());
- retList.setSortBy(searchFilter.getSortBy());
+ vObj.setGuid(xObj.getGuid());
+ vObj.setVersion(xObj.getVersion());
+ vObj.setIsEnabled(xObj.getIsEnabled());
+ vObj.setServiceName(xService.getName());
+ vObj.setAssociatedTags(JsonUtils.jsonToRangerTagList(xObj.getTags()));
- return retList;
- }
+ return vObj;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
index 9285ae756..eedbb4f80 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
@@ -17,12 +17,6 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.thirdparty.com.google.common.base.Joiner;
import org.apache.ranger.biz.GdsDBStore;
@@ -39,164 +33,157 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
@Service
@Scope("singleton")
public class RangerServiceService extends RangerServiceServiceBase<XXService, RangerService> {
- private static final Logger LOG = LoggerFactory.getLogger(RangerServiceService.class.getName());
-
- @Autowired
- GdsDBStore gdsStore;
-
- String actionCreate;
- String actionUpdate;
- String actionDelete;
-
- public RangerServiceService() {
- super();
-
- actionCreate = "create";
- actionUpdate = "update";
- actionDelete = "delete";
- }
-
- @Override
- protected XXService mapViewToEntityBean(RangerService vObj, XXService xObj, int OPERATION_CONTEXT) {
- return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
- }
-
- @Override
- protected RangerService mapEntityToViewBean(RangerService vObj, XXService xObj) {
- return super.mapEntityToViewBean(vObj, xObj);
- }
-
- @Override
- protected void validateForCreate(RangerService vObj) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- protected void validateForUpdate(RangerService vService, XXService xService) {
-
- }
-
- @Override
- protected RangerService populateViewBean(XXService xService) {
- RangerService vService = super.populateViewBean(xService);
-
- HashMap<String, String> configs = new HashMap<String, String>();
- List<XXServiceConfigMap> svcConfigMapList = daoMgr.getXXServiceConfigMap()
- .findByServiceId(xService.getId());
- for(XXServiceConfigMap svcConfMap : svcConfigMapList) {
- String configValue = svcConfMap.getConfigvalue();
-
- if(StringUtils.equalsIgnoreCase(svcConfMap.getConfigkey(), ServiceDBStore.CONFIG_KEY_PASSWORD)) {
- configValue = ServiceDBStore.HIDDEN_PASSWORD_STR;
- }
- configs.put(svcConfMap.getConfigkey(), configValue);
- }
- vService.setConfigs(configs);
- return vService;
- }
-
- public RangerService getPopulatedViewObject(XXService xService) {
- return this.populateViewBean(xService);
- }
-
- public List<RangerService> getAllServices() {
- List<XXService> xxServiceList = daoMgr.getXXService().getAll();
- List<RangerService> serviceList = new ArrayList<RangerService>();
-
- for(XXService xxService : xxServiceList) {
- RangerService service = populateViewBean(xxService);
- serviceList.add(service);
- }
- return serviceList;
- }
-
- public Map<String, String> getConfigsWithDecryptedPassword(RangerService service) throws Exception {
- Map<String, String> configs = service.getConfigs();
-
- String pwd = configs.get(ServiceDBStore.CONFIG_KEY_PASSWORD);
- if(!stringUtil.isEmpty(pwd) && ServiceDBStore.HIDDEN_PASSWORD_STR.equalsIgnoreCase(pwd)) {
- XXServiceConfigMap pwdConfig = daoMgr.getXXServiceConfigMap().findByServiceAndConfigKey(service.getId(),
- ServiceDBStore.CONFIG_KEY_PASSWORD);
-
- if (pwdConfig != null) {
- String encryptedPwd = pwdConfig.getConfigvalue();
- if (encryptedPwd.contains(",")) {
- PasswordUtils util = PasswordUtils.build(encryptedPwd);
- String freeTextPasswordMetaData = Joiner.on(",").skipNulls().join(util.getCryptAlgo(),
- new String(util.getEncryptKey()), new String(util.getSalt()), util.getIterationCount(),
- PasswordUtils.needsIv(util.getCryptAlgo()) ? util.getIvAsString() : null);
- String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
- if (StringUtils
- .equalsIgnoreCase(
- freeTextPasswordMetaData + ","
- + PasswordUtils
- .encryptPassword(freeTextPasswordMetaData + "," + decryptedPwd),
- encryptedPwd)) {
- configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd); // XXX: method name is
- // getConfigsWithDecryptedPassword,
- // then why do we store the
- // encryptedPwd?
- }
- } else {
- String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
- if (StringUtils.equalsIgnoreCase(PasswordUtils.encryptPassword(decryptedPwd), encryptedPwd)) {
- configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd); // XXX: method name is
- // getConfigsWithDecryptedPassword,
- // then why do we store the
- // encryptedPwd?
- }
- }
- }
- }
- return configs;
- }
-
- @Override
- public RangerService postCreate(XXService xObj) {
- XXServiceVersionInfo serviceVersionInfo = new XXServiceVersionInfo();
-
- serviceVersionInfo.setServiceId(xObj.getId());
- serviceVersionInfo.setPolicyVersion(1L);
- serviceVersionInfo.setTagVersion(1L);
- serviceVersionInfo.setRoleVersion(1L);
- serviceVersionInfo.setGdsVersion(1L);
- Date now = new Date();
- serviceVersionInfo.setPolicyUpdateTime(now);
- serviceVersionInfo.setTagUpdateTime(now);
- serviceVersionInfo.setRoleUpdateTime(now);
- serviceVersionInfo.setGdsUpdateTime(now);
-
- XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
-
- XXServiceVersionInfo createdServiceVersionInfo = serviceVersionInfoDao.create(serviceVersionInfo);
-
- return createdServiceVersionInfo != null ? super.postCreate(xObj) : null;
- }
-
- @Override
- protected XXService preDelete(Long id) {
- XXService ret = super.preDelete(id);
-
- if (ret != null) {
- try {
- gdsStore.deleteAllGdsObjectsForService(id);
- } catch (Exception excp) {
- LOG.error("Error deleting GDS objects for service(id={})", id, excp);
- }
-
- XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
-
- XXServiceVersionInfo serviceVersionInfo = serviceVersionInfoDao.findByServiceId(id);
-
- if (serviceVersionInfo != null) {
- serviceVersionInfoDao.remove(serviceVersionInfo.getId());
- }
- }
- return ret;
- }
+ private static final Logger LOG = LoggerFactory.getLogger(RangerServiceService.class.getName());
+
+ @Autowired
+ GdsDBStore gdsStore;
+
+ String actionCreate;
+ String actionUpdate;
+ String actionDelete;
+
+ public RangerServiceService() {
+ super();
+
+ actionCreate = "create";
+ actionUpdate = "update";
+ actionDelete = "delete";
+ }
+
+ public RangerService getPopulatedViewObject(XXService xService) {
+ return this.populateViewBean(xService);
+ }
+
+ public List<RangerService> getAllServices() {
+ List<XXService> xxServiceList = daoMgr.getXXService().getAll();
+ List<RangerService> serviceList = new ArrayList<>();
+
+ for (XXService xxService : xxServiceList) {
+ RangerService service = populateViewBean(xxService);
+ serviceList.add(service);
+ }
+ return serviceList;
+ }
+
+ public Map<String, String> getConfigsWithDecryptedPassword(RangerService service) throws Exception {
+ Map<String, String> configs = service.getConfigs();
+
+ String pwd = configs.get(ServiceDBStore.CONFIG_KEY_PASSWORD);
+ if (!stringUtil.isEmpty(pwd) && ServiceDBStore.HIDDEN_PASSWORD_STR.equalsIgnoreCase(pwd)) {
+ XXServiceConfigMap pwdConfig = daoMgr.getXXServiceConfigMap().findByServiceAndConfigKey(service.getId(), ServiceDBStore.CONFIG_KEY_PASSWORD);
+
+ if (pwdConfig != null) {
+ String encryptedPwd = pwdConfig.getConfigvalue();
+ if (encryptedPwd.contains(",")) {
+ PasswordUtils util = PasswordUtils.build(encryptedPwd);
+ String freeTextPasswordMetaData = Joiner.on(",").skipNulls().join(util.getCryptAlgo(), new String(util.getEncryptKey()), new String(util.getSalt()), util.getIterationCount(), PasswordUtils.needsIv(util.getCryptAlgo()) ? util.getIvAsString() : null);
+ String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
+ if (StringUtils.equalsIgnoreCase(freeTextPasswordMetaData + "," + PasswordUtils.encryptPassword(freeTextPasswordMetaData + "," + decryptedPwd), encryptedPwd)) {
+ configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd);
+ // XXX: method name is getConfigsWithDecryptedPassword, then why do we store the encryptedPwd?
+ }
+ } else {
+ String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
+ if (StringUtils.equalsIgnoreCase(PasswordUtils.encryptPassword(decryptedPwd), encryptedPwd)) {
+ configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd);
+ // XXX: method name is getConfigsWithDecryptedPassword, then why do we store the encryptedPwd?
+ }
+ }
+ }
+ }
+ return configs;
+ }
+
+ @Override
+ public RangerService postCreate(XXService xObj) {
+ XXServiceVersionInfo serviceVersionInfo = new XXServiceVersionInfo();
+
+ serviceVersionInfo.setServiceId(xObj.getId());
+ serviceVersionInfo.setPolicyVersion(1L);
+ serviceVersionInfo.setTagVersion(1L);
+ serviceVersionInfo.setRoleVersion(1L);
+ serviceVersionInfo.setGdsVersion(1L);
+
+ Date now = new Date();
+
+ serviceVersionInfo.setPolicyUpdateTime(now);
+ serviceVersionInfo.setTagUpdateTime(now);
+ serviceVersionInfo.setRoleUpdateTime(now);
+ serviceVersionInfo.setGdsUpdateTime(now);
+
+ XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
+ XXServiceVersionInfo createdServiceVersionInfo = serviceVersionInfoDao.create(serviceVersionInfo);
+
+ return createdServiceVersionInfo != null ? super.postCreate(xObj) : null;
+ }
+
+ @Override
+ protected RangerService populateViewBean(XXService xService) {
+ RangerService vService = super.populateViewBean(xService);
+ HashMap<String, String> configs = new HashMap<>();
+ List<XXServiceConfigMap> svcConfigMapList = daoMgr.getXXServiceConfigMap().findByServiceId(xService.getId());
+
+ for (XXServiceConfigMap svcConfMap : svcConfigMapList) {
+ String configValue = svcConfMap.getConfigvalue();
+
+ if (StringUtils.equalsIgnoreCase(svcConfMap.getConfigkey(), ServiceDBStore.CONFIG_KEY_PASSWORD)) {
+ configValue = ServiceDBStore.HIDDEN_PASSWORD_STR;
+ }
+
+ configs.put(svcConfMap.getConfigkey(), configValue);
+ }
+
+ vService.setConfigs(configs);
+
+ return vService;
+ }
+
+ @Override
+ protected void validateForCreate(RangerService vObj) {
+ }
+
+ @Override
+ protected void validateForUpdate(RangerService vService, XXService xService) {
+ }
+
+ @Override
+ protected XXService preDelete(Long id) {
+ XXService ret = super.preDelete(id);
+
+ if (ret != null) {
+ try {
+ gdsStore.deleteAllGdsObjectsForService(id);
+ } catch (Exception excp) {
+ LOG.error("Error deleting GDS objects for service(id={})", id, excp);
+ }
+
+ XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
+ XXServiceVersionInfo serviceVersionInfo = serviceVersionInfoDao.findByServiceId(id);
+
+ if (serviceVersionInfo != null) {
+ serviceVersionInfoDao.remove(serviceVersionInfo.getId());
+ }
+ }
+
+ return ret;
+ }
+
+ @Override
+ protected XXService mapViewToEntityBean(RangerService vObj, XXService xObj, int operationContext) {
+ return super.mapViewToEntityBean(vObj, xObj, operationContext);
+ }
+
+ @Override
+ protected RangerService mapEntityToViewBean(RangerService vObj, XXService xObj) {
+ return super.mapEntityToViewBean(vObj, xObj);
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
index b09c72697..98857638e 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
@@ -17,13 +17,14 @@
package org.apache.ranger.service;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.commons.lang.StringUtils;
-import org.apache.ranger.common.*;
+import org.apache.ranger.common.AppConstants;
+import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SearchField.DATA_TYPE;
import org.apache.ranger.common.SearchField.SEARCH_TYPE;
+import org.apache.ranger.common.SortField;
import org.apache.ranger.common.SortField.SORT_ORDER;
import org.apache.ranger.common.view.VTrxLogAttr;
import org.apache.ranger.entity.XXService;
@@ -35,146 +36,150 @@ import org.apache.ranger.plugin.util.SearchFilter;
import org.apache.ranger.view.RangerServiceList;
import org.springframework.beans.factory.annotation.Autowired;
+import java.util.ArrayList;
+import java.util.List;
+
public abstract class RangerServiceServiceBase<T extends XXServiceBase, V extends RangerService> extends RangerAuditedModelService<T, V> {
-
- @Autowired
- GUIDUtil guidUtil;
-
- public RangerServiceServiceBase() {
- super(AppConstants.CLASS_TYPE_XA_SERVICE, AppConstants.CLASS_TYPE_XA_SERVICE_DEF);
-
- trxLogAttrs.put("name", new VTrxLogAttr("name", "Service Name", false, true));
- trxLogAttrs.put("displayName", new VTrxLogAttr("displayName", "Service Display Name"));
- trxLogAttrs.put("description", new VTrxLogAttr("description", "Service Description"));
- trxLogAttrs.put("isEnabled", new VTrxLogAttr("isEnabled", "Service Status"));
- trxLogAttrs.put("configs", new VTrxLogAttr("configs", "Connection Configurations"));
- trxLogAttrs.put("tagService", new VTrxLogAttr("tagService", "Tag Service Name"));
-
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "xSvcDef.name", DATA_TYPE.STRING,
- SEARCH_TYPE.FULL, "XXServiceDef xSvcDef", "obj.type = xSvcDef.id"));
- searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, "obj.type", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_DISPLAY_NAME, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_DISPLAY_NAME_PARTIAL, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, "obj.tagService", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
- searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME, "xTagSvc.name", DATA_TYPE.STRING,
- SEARCH_TYPE.FULL, "XXServiceBase xTagSvc", "obj.tagService = xTagSvc.id"));
-
- sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
- sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
- sortFields.add(new SortField(SearchFilter.SERVICE_ID, "obj.id", true, SORT_ORDER.ASC));
- sortFields.add(new SortField(SearchFilter.SERVICE_NAME, "obj.name"));
- sortFields.add(new SortField(SearchFilter.SERVICE_DISPLAY_NAME, "obj.displayName"));
- }
-
- @Override
- protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
- String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
-
- xObj.setGuid(guid);
-
- XXServiceDef xServiceDef = daoMgr.getXXServiceDef().findByName(vObj.getType());
-
- if(xServiceDef == null) {
- throw restErrorUtil.createRESTException(
- "No ServiceDefinition found with name :" + vObj.getType(),
- MessageEnums.INVALID_INPUT_DATA);
- }
-
- Long tagServiceId = null;
- String tagServiceName = vObj.getTagService();
... 12265 lines suppressed ...