Repository: incubator-ranger Updated Branches: refs/heads/master 63c7893ae -> c50acc448
RANGER-352 : Add policy_type attribute and other changes to add id to objects Signed-off-by: sneethiraj <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/c50acc44 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/c50acc44 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/c50acc44 Branch: refs/heads/master Commit: c50acc4482f9dd7ac42f9350e1fc3899df5334a8 Parents: 63c7893 Author: Gautam Borad <[email protected]> Authored: Wed Apr 8 11:41:58 2015 +0530 Committer: sneethiraj <[email protected]> Committed: Wed Apr 8 02:32:07 2015 -0400 ---------------------------------------------------------------------- .../db/mysql/patches/009-updated_schema.sql | 1 + .../db/oracle/patches/009-updated_schema.sql | 1 + .../db/postgres/xa_core_db_postgres.sql | 1 + .../db/sqlserver/xa_core_db_sqlserver.sql | 1 + .../org/apache/ranger/biz/ServiceDBStore.java | 17 +++--- .../org/apache/ranger/entity/XXPolicyBase.java | 28 ++++++++- .../ranger/service/RangerPolicyServiceBase.java | 2 + .../service/RangerServiceDefServiceBase.java | 62 +++++++++++++++++--- 8 files changed, 97 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/db/mysql/patches/009-updated_schema.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/mysql/patches/009-updated_schema.sql b/security-admin/db/mysql/patches/009-updated_schema.sql index 5054d5d..a0d27e2 100644 --- a/security-admin/db/mysql/patches/009-updated_schema.sql +++ b/security-admin/db/mysql/patches/009-updated_schema.sql @@ -80,6 +80,7 @@ CREATE TABLE `x_policy` ( `version` bigint(20) DEFAULT NULL, `service` bigint(20) DEFAULT NULL, `name` varchar(512) DEFAULT NULL, +`policy_type` int(11) DEFAULT 0, `description` varchar(1024) DEFAULT NULL, `is_enabled` tinyint(1) NOT NULL DEFAULT '0', `is_audit_enabled` tinyint(1) NOT NULL DEFAULT '0', http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/db/oracle/patches/009-updated_schema.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/oracle/patches/009-updated_schema.sql b/security-admin/db/oracle/patches/009-updated_schema.sql index 5152570..c7c8493 100644 --- a/security-admin/db/oracle/patches/009-updated_schema.sql +++ b/security-admin/db/oracle/patches/009-updated_schema.sql @@ -85,6 +85,7 @@ upd_by_id NUMBER(20) DEFAULT NULL NULL, version NUMBER(20) DEFAULT NULL NULL, service NUMBER(20) DEFAULT NULL NULL, name VARCHAR(512) DEFAULT NULL NULL, +policy_type NUMBER(11) DEFAULT '0' NULL, description VARCHAR(1024) DEFAULT NULL NULL, is_enabled NUMBER(1) DEFAULT '0' NOT NULL, is_audit_enabled NUMBER(1) DEFAULT '0' NOT NULL, http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/db/postgres/xa_core_db_postgres.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/postgres/xa_core_db_postgres.sql b/security-admin/db/postgres/xa_core_db_postgres.sql index 802ca4e..0e1f731 100644 --- a/security-admin/db/postgres/xa_core_db_postgres.sql +++ b/security-admin/db/postgres/xa_core_db_postgres.sql @@ -516,6 +516,7 @@ upd_by_id BIGINT DEFAULT NULL NULL, version BIGINT DEFAULT NULL NULL, service BIGINT DEFAULT NULL NULL, name VARCHAR(512) DEFAULT NULL NULL, +policy_type int(11) DEFAULT 0 NULL, description VARCHAR(1024) DEFAULT NULL NULL, is_enabled BOOLEAN DEFAULT '0' NOT NULL, is_audit_enabled BOOLEAN DEFAULT '0' NOT NULL, http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/db/sqlserver/xa_core_db_sqlserver.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/sqlserver/xa_core_db_sqlserver.sql b/security-admin/db/sqlserver/xa_core_db_sqlserver.sql index 9486982..9bfe39f 100644 --- a/security-admin/db/sqlserver/xa_core_db_sqlserver.sql +++ b/security-admin/db/sqlserver/xa_core_db_sqlserver.sql @@ -1809,6 +1809,7 @@ CREATE TABLE [dbo].[x_policy] ( [version] [bigint] DEFAULT NULL NULL, [service] [bigint] DEFAULT NULL NULL, [name] [varchar](512) DEFAULT NULL NULL, + [policy_type] [int] DEFAULT 0 NULL, [description] [varchar](1024) DEFAULT NULL NULL, [is_enabled] [tinyint] DEFAULT 0 NOT NULL, [is_audit_enabled] [tinyint] DEFAULT 0 NOT NULL, http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java index 2506d66..fd9c95b 100644 --- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java @@ -250,7 +250,8 @@ public class ServiceDBStore extends AbstractServiceStore { XXServiceConfigDefDao xxServiceConfigDao = daoMgr.getXXServiceConfigDef(); for(RangerServiceConfigDef config : configs) { XXServiceConfigDef xConfig = new XXServiceConfigDef(); - xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef); + xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); xConfig = xxServiceConfigDao.create(xConfig); } @@ -260,7 +261,8 @@ public class ServiceDBStore extends AbstractServiceStore { Long parentId = (parent != null) ? parent.getId() : null; XXResourceDef xResource = new XXResourceDef(); - xResource = serviceDefService.populateRangerResourceDefToXX(resource, xResource, createdSvcDef); + xResource = serviceDefService.populateRangerResourceDefToXX(resource, xResource, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); xResource.setParent(parentId); xResource = xxResDefDao.create(xResource); } @@ -268,7 +270,8 @@ public class ServiceDBStore extends AbstractServiceStore { XXAccessTypeDefDao xxATDDao = daoMgr.getXXAccessTypeDef(); for(RangerAccessTypeDef accessType : accessTypes) { XXAccessTypeDef xAccessType = new XXAccessTypeDef(); - xAccessType = serviceDefService.populateRangerAccessTypeDefToXX(accessType, xAccessType, createdSvcDef); + xAccessType = serviceDefService.populateRangerAccessTypeDefToXX(accessType, xAccessType, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); xAccessType = xxATDDao.create(xAccessType); Collection<String> impliedGrants = accessType.getImpliedGrants(); @@ -286,7 +289,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXPolicyConditionDef xPolicyCondition = new XXPolicyConditionDef(); xPolicyCondition = serviceDefService .populateRangerPolicyConditionDefToXX(policyCondition, - xPolicyCondition, createdSvcDef); + xPolicyCondition, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); xPolicyCondition = xxPolCondDao.create(xPolicyCondition); } @@ -295,21 +298,21 @@ public class ServiceDBStore extends AbstractServiceStore { XXContextEnricherDef xContextEnricher = new XXContextEnricherDef(); xContextEnricher = serviceDefService .populateRangerContextEnricherDefToXX(contextEnricher, - xContextEnricher, createdSvcDef); + xContextEnricher, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); xContextEnricher = xxContextEnricherDao.create(xContextEnricher); } XXEnumDefDao xxEnumDefDao = daoMgr.getXXEnumDef(); for(RangerEnumDef vEnum : enums) { XXEnumDef xEnum = new XXEnumDef(); - xEnum = serviceDefService.populateRangerEnumDefToXX(vEnum, xEnum, createdSvcDef); + xEnum = serviceDefService.populateRangerEnumDefToXX(vEnum, xEnum, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); xEnum = xxEnumDefDao.create(xEnum); List<RangerEnumElementDef> elements = vEnum.getElements(); XXEnumElementDefDao xxEnumEleDefDao = daoMgr.getXXEnumElementDef(); for(RangerEnumElementDef element : elements) { XXEnumElementDef xElement = new XXEnumElementDef(); - xElement = serviceDefService.populateRangerEnumElementDefToXX(element, xElement, xEnum); + xElement = serviceDefService.populateRangerEnumElementDefToXX(element, xElement, xEnum, RangerServiceDefService.OPERATION_CREATE_CONTEXT); xElement = xxEnumEleDefDao.create(xElement); } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java index 7ee05c8..43d61ef 100644 --- a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java @@ -47,6 +47,15 @@ public abstract class XXPolicyBase extends XXDBBase { protected String name; /** + * policyType of the XXPolicy + * <ul> + * </ul> + * + */ + @Column(name = "policy_type") + protected Integer policyType; + + /** * description of the XXPolicy * <ul> * </ul> @@ -208,6 +217,14 @@ public abstract class XXPolicyBase extends XXDBBase { return this.isAuditEnabled; } + public Integer getPolicyType() { + return policyType; + } + + public void setPolicyType(Integer policyType) { + this.policyType = policyType; + } + /* * (non-Javadoc) * @@ -269,6 +286,13 @@ public abstract class XXPolicyBase extends XXDBBase { } else if (!version.equals(other.version)) { return false; } + if (policyType == null) { + if (other.policyType != null) { + return false; + } + } else if (!policyType.equals(other.policyType)) { + return false; + } return true; } @@ -280,8 +304,8 @@ public abstract class XXPolicyBase extends XXDBBase { @Override public String toString() { return "XXPolicyBase [" + super.toString() + " guid=" + guid + ", version=" + version + ", service=" + service - + ", name=" + name + ", description=" + description + ", isEnabled=" + isEnabled + ", isAuditEnabled=" - + isAuditEnabled + "]"; + + ", name=" + name + ", policyType=" + policyType + ", description=" + description + ", isEnabled=" + + isEnabled + ", isAuditEnabled=" + isAuditEnabled + "]"; } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java ---------------------------------------------------------------------- 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 290d85c..a89a988 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java @@ -83,6 +83,7 @@ public abstract class RangerPolicyServiceBase<T extends XXPolicyBase, V extends } xObj.setService(xService.getId()); xObj.setName(vObj.getName()); + xObj.setPolicyType(vObj.getPolicyType()); xObj.setDescription(vObj.getDescription()); xObj.setIsAuditEnabled(vObj.getIsAuditEnabled()); xObj.setIsEnabled(vObj.getIsEnabled()); @@ -98,6 +99,7 @@ public abstract class RangerPolicyServiceBase<T extends XXPolicyBase, V extends vObj.setVersion(xObj.getVersion()); vObj.setService(xService.getName()); vObj.setName(xObj.getName()); + vObj.setPolicyType(xObj.getPolicyType()); vObj.setDescription(xObj.getDescription()); vObj.setIsEnabled(xObj.getIsEnabled()); vObj.setIsAuditEnabled(xObj.getIsAuditEnabled()); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c50acc44/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java ---------------------------------------------------------------------- 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 044cf56..0c4f635 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 @@ -76,12 +76,17 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte return vObj; } - public XXServiceConfigDef populateRangerServiceConfigDefToXX(RangerServiceConfigDef vObj, XXServiceConfigDef xObj, XXServiceDef serviceDef) { + 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); } + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXServiceConfigDef) rangerAuditFields.populateAuditFields(xObj, serviceDef); xObj.setDefid(serviceDef.getId()); xObj.setName(vObj.getName()); @@ -103,6 +108,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerServiceConfigDef populateXXToRangerServiceConfigDef(XXServiceConfigDef xObj) { RangerServiceConfigDef vObj = new RangerServiceConfigDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setType(xObj.getType()); vObj.setSubType(xObj.getSubtype()); @@ -119,11 +125,17 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte return vObj; } - public XXResourceDef populateRangerResourceDefToXX(RangerResourceDef vObj, XXResourceDef xObj, XXServiceDef serviceDef) { + 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); } + + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXResourceDef) rangerAuditFields.populateAuditFields(xObj, serviceDef); xObj.setDefid(serviceDef.getId()); xObj.setName(vObj.getName()); @@ -149,6 +161,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerResourceDef populateXXToRangerResourceDef(XXResourceDef xObj) { RangerResourceDef vObj = new RangerResourceDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setType(xObj.getType()); vObj.setLevel(xObj.getLevel()); @@ -174,11 +187,17 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte return vObj; } - public XXAccessTypeDef populateRangerAccessTypeDefToXX(RangerAccessTypeDef vObj, XXAccessTypeDef xObj, XXServiceDef serviceDef) { + 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); } + + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXAccessTypeDef) rangerAuditFields.populateAuditFields(xObj, serviceDef); xObj.setDefid(serviceDef.getId()); xObj.setName(vObj.getName()); @@ -190,6 +209,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj) { RangerAccessTypeDef vObj = new RangerAccessTypeDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setLabel(xObj.getLabel()); vObj.setRbKeyLabel(xObj.getRbkeylabel()); @@ -199,11 +219,17 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte return vObj; } - public XXPolicyConditionDef populateRangerPolicyConditionDefToXX(RangerPolicyConditionDef vObj, XXPolicyConditionDef xObj, XXServiceDef serviceDef) { + 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); } + + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXPolicyConditionDef) rangerAuditFields.populateAuditFields(xObj, serviceDef); xObj.setDefid(serviceDef.getId()); xObj.setName(vObj.getName()); @@ -223,6 +249,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerPolicyConditionDef populateXXToRangerPolicyConditionDef(XXPolicyConditionDef xObj) { RangerPolicyConditionDef vObj = new RangerPolicyConditionDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setEvaluator(xObj.getEvaluator()); vObj.setEvaluatorOptions(jsonStringToMap(xObj.getEvaluatoroptions())); @@ -237,11 +264,17 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte return vObj; } - public XXContextEnricherDef populateRangerContextEnricherDefToXX(RangerContextEnricherDef vObj, XXContextEnricherDef xObj, XXServiceDef serviceDef) { + 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); } + + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXContextEnricherDef) rangerAuditFields.populateAuditFields(xObj, serviceDef); xObj.setDefid(serviceDef.getId()); xObj.setName(vObj.getName()); @@ -253,17 +286,24 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerContextEnricherDef populateXXToRangerContextEnricherDef(XXContextEnricherDef xObj) { RangerContextEnricherDef vObj = new RangerContextEnricherDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setEnricher(xObj.getEnricher()); vObj.setEnricherOptions(jsonStringToMap(xObj.getEnricherOptions())); return vObj; } - public XXEnumDef populateRangerEnumDefToXX(RangerEnumDef vObj, XXEnumDef xObj, XXServiceDef serviceDef) { + 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); } + + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXEnumDef) rangerAuditFields.populateAuditFields(xObj, serviceDef); xObj.setDefid(serviceDef.getId()); xObj.setName(vObj.getName()); @@ -273,6 +313,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerEnumDef populateXXToRangerEnumDef(XXEnumDef xObj) { RangerEnumDef vObj = new RangerEnumDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setDefaultIndex(xObj.getDefaultindex()); @@ -288,11 +329,17 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte return vObj; } - public XXEnumElementDef populateRangerEnumElementDefToXX(RangerEnumElementDef vObj, XXEnumElementDef xObj, XXEnumDef enumDef) { + 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); } + + if(operationContext == OPERATION_UPDATE_CONTEXT) { + xObj.setId(vObj.getId()); + } + xObj = (XXEnumElementDef) rangerAuditFields.populateAuditFields(xObj, enumDef); xObj.setEnumdefid(enumDef.getId()); xObj.setName(vObj.getName()); @@ -304,6 +351,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte public RangerEnumElementDef populateXXToRangerEnumElementDef(XXEnumElementDef xObj) { RangerEnumElementDef vObj = new RangerEnumElementDef(); + vObj.setId(xObj.getId()); vObj.setName(xObj.getName()); vObj.setLabel(xObj.getLabel()); vObj.setRbKeyLabel(xObj.getRbkeylabel());
