Yair Zaslavsky has uploaded a new change for review.

Change subject: aaa: Introducing format to id of User and Group API entities 
The following format will be used to represent the value of id in User and 
Group API entities:
......................................................................

aaa: Introducing format to id of User and Group API entities
The following format will be used to represent the value of id
in User and Group API entities:

id = url_encode ("id=<internal_id>:provider_id=<provider_id>")

idnternal_id= the primary key of the user or group as stored in db
provider_id = <directory_name>:<id_of_entity_in_directory>

directory_name = name of the directory
entity_in_directory = id of principal or group

Topic: AAA
Change-Id: Iaecb5d43945769db82475edde1c7075c1a343c07
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
A 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java
15 files changed, 153 insertions(+), 29 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/26191/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java
index b4cf5ba..b1e770f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java
@@ -37,7 +37,7 @@
 
     public DbGroup(DirectoryGroup directoryGroup) {
         externalId = directoryGroup.getId();
-        setId(new Guid(directoryGroup.getId().getBytes(), true));
+        id = Guid.newGuid();
         domain = directoryGroup.getDirectoryName();
         name = directoryGroup.getName();
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java
index 88e2920..493a343 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java
@@ -94,7 +94,7 @@
         groupNames = ldapUser.getGroup();
         role = "";
         note = "";
-        id = new Guid(externalId.getBytes(), true);
+        id = Guid.newGuid();
     }
 
     public DbUser(DirectoryUser directoryUser) {
@@ -108,7 +108,7 @@
         active = true;
         role = "";
         note = "";
-        id = new Guid(externalId.getBytes(), true);
+        id = Guid.newGuid();
 
         StringBuilder namesBuffer = new StringBuilder();
         boolean first = true;
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java
index 2d67dd5..2487588 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.api.resource.PermissionResource;
 import org.ovirt.engine.api.restapi.types.GroupMapper;
 import org.ovirt.engine.api.restapi.types.UserMapper;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.PermissionsOperationsParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -172,10 +173,10 @@
         if (entity.getad_element_id() != null) {
             if (isUser(user)) {
                 template.setUser(new User());
-                template.getUser().setId(entity.getad_element_id().toString());
+                
template.getUser().setId(DirectoryEntryIdUtils.generateId(entity.getad_element_id().toString(),
 " ", " "));
             } else {
                 template.setGroup(new Group());
-                
template.getGroup().setId(entity.getad_element_id().toString());
+                
template.getGroup().setId(DirectoryEntryIdUtils.generateId(entity.getad_element_id().toString(),
 " ", " "));
             }
         }
         return map(entity, template);
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java
index 4e743cc..ce34637 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.api.model.Permission;
 import org.ovirt.engine.api.model.Role;
 import org.ovirt.engine.api.model.User;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.action.PermissionsOperationsParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
@@ -74,7 +75,8 @@
                                                  "Permission.ad_element_id",
                                                  "Permission.ObjectId",
                                                  "Permission.role_id" },
-                                  new Object[] { GUIDS[1], GUIDS[1], targetId, 
GUIDS[3] },
+                new Object[] { GUIDS[1], GUIDS[1], targetId,
+                        GUIDS[3] },
                                   true,
                                   true,
                                   GUIDS[0],
@@ -87,7 +89,7 @@
         model.setRole(new Role());
         model.getRole().setId(GUIDS[3].toString());
         model.setGroup(new Group());
-        model.getGroup().setId(GUIDS[1].toString());
+        
model.getGroup().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " 
", " "));
         Response response = collection.add(model);
         assertEquals(201, response.getStatus());
         assertTrue(response.getEntity() instanceof Permission);
@@ -114,7 +116,7 @@
     protected Permission getModel() {
         Permission model = new Permission();
         model.setUser(new User());
-        model.getUser().setId(GUIDS[1].toString());
+        
model.getUser().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " 
", " "));
         model.setRole(new Role());
         model.getRole().setId(GUIDS[3].toString());
         return model;
@@ -125,10 +127,10 @@
         super.verifyModel(model, index);
         if (index == 0) {
             assertTrue(model.isSetUser());
-            assertEquals(GUIDS[1].toString(), model.getUser().getId());
+            assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), 
" ", " "), model.getUser().getId());
         } else {
             assertTrue(model.isSetGroup());
-            assertEquals(GUIDS[1].toString(), model.getGroup().getId());
+            assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), 
" ", " "), model.getGroup().getId());
         }
     }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java
index aeff6ca..c97d6d7 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java
@@ -8,6 +8,7 @@
 import org.ovirt.engine.api.model.Group;
 import org.ovirt.engine.api.model.Permission;
 import org.ovirt.engine.api.model.Role;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 
@@ -28,7 +29,7 @@
     public void testAddIncompletePermission() throws Exception {
         Permission model = new Permission();
         model.setGroup(new Group());
-        model.getGroup().setId(GUIDS[1].toString());
+        
model.getGroup().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " 
", " "));
         model.setRole(new Role());
         model.getRole().setId(GUIDS[3].toString());
 
@@ -58,7 +59,7 @@
     protected void verifyModel(Permission model, int index) {
         super.verifyModel(model, index);
         assertTrue(model.isSetGroup());
-        assertEquals(GUIDS[1].toString(), model.getGroup().getId());
+        assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " 
", " "), model.getGroup().getId());
     }
 
     @Override
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java
index 1876a87..5d5f492 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java
@@ -4,6 +4,7 @@
 
 import org.junit.Test;
 import org.ovirt.engine.api.model.Group;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.businessentities.DbGroup;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -77,7 +78,7 @@
     }
 
     protected void verifyModel(Group model, int index) {
-        assertEquals(GUIDS[index].toString(), model.getId());
+        assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), 
DOMAIN, EXTERNAL_IDS[index]), model.getId());
         assertEquals(NAMES[index], model.getName());
         assertNotNull(model.getDomain());
         verifyLinks(model);
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java
index 2580190..7551b05 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java
@@ -10,6 +10,7 @@
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.Fault;
 import org.ovirt.engine.api.model.Group;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.action.DirectoryIdParameters;
 import org.ovirt.engine.core.common.action.IdParameters;
@@ -376,7 +377,7 @@
 
     @Override
     protected void verifyModel(Group model, int index) {
-        assertEquals(GUIDS[index].toString(), model.getId());
+        assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), 
DOMAIN, EXTERNAL_IDS[index]), model.getId());
         assertEquals(GROUP_NAMES[index], model.getName());
         assertNotNull(model.getDomain());
         assertEquals(new Guid(DOMAIN.getBytes(), true).toString(), 
model.getDomain().getId());
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java
index 9e7e021..56d7e06 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.model.Permission;
 import org.ovirt.engine.api.model.User;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.Permissions;
@@ -102,7 +103,7 @@
     protected void verifyModel(Permission model, int index) {
         assertEquals(GUIDS[index].toString(), model.getId());
         assertTrue(model.isSetUser());
-        assertEquals(GUIDS[1].toString(), model.getUser().getId());
+        assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " 
", " "), model.getUser().getId());
         assertTrue(model.isSetRole());
         assertEquals(GUIDS[2].toString(), model.getRole().getId());
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java
index f45f579..9589404 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java
@@ -8,6 +8,7 @@
 import org.ovirt.engine.api.model.Permission;
 import org.ovirt.engine.api.model.Role;
 import org.ovirt.engine.api.model.User;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 
@@ -27,7 +28,7 @@
     public void testAddIncompletePermission() throws Exception {
         Permission model = new Permission();
         model.setUser(new User());
-        model.getUser().setId(GUIDS[1].toString());
+        
model.getUser().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " 
", " "));
         model.setRole(new Role());
         model.getRole().setId(GUIDS[3].toString());
 
@@ -87,10 +88,10 @@
         super.verifyModel(model, index);
         if (index == 0) {
             assertTrue(model.isSetUser());
-            assertEquals(GUIDS[1].toString(), model.getUser().getId());
+            assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), 
" ", " "), model.getUser().getId());
         } else {
             assertTrue(model.isSetGroup());
-            assertEquals(GUIDS[1].toString(), model.getGroup().getId());
+            assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), 
" ", " "), model.getGroup().getId());
         }
     }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java
index 684ffe3..3456c24 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java
@@ -8,6 +8,7 @@
 import org.junit.Test;
 import org.ovirt.engine.api.model.Group;
 import org.ovirt.engine.api.model.User;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.NameQueryParameters;
@@ -93,7 +94,7 @@
     }
 
     protected void verifyModel(User model, int index) {
-        assertEquals(GUIDS[index].toString(), model.getId());
+        assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), 
DOMAIN, EXTERNAL_IDS[index]), model.getId());
         assertEquals(NAMES[index], model.getName());
         assertNotNull(model.getDomain());
         assertTrue(model.isSetGroups());
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
index 4d5e181..9ea9824 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
@@ -12,6 +12,7 @@
 import org.ovirt.engine.api.model.Fault;
 import org.ovirt.engine.api.model.Group;
 import org.ovirt.engine.api.model.User;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.action.DirectoryIdParameters;
 import org.ovirt.engine.core.common.action.IdParameters;
@@ -218,7 +219,7 @@
 
     @Override
     protected void verifyModel(User model, int index) {
-        assertEquals(GUIDS[index].toString(), model.getId());
+        assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), 
DOMAIN, EXTERNAL_IDS[index]), model.getId());
         assertEquals(NAMES[index] + "@" + DOMAIN, model.getUserName());
         assertNotNull(model.getDomain());
         assertEquals(new Guid(DOMAIN.getBytes(), true).toString(), 
model.getDomain().getId());
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
index c0cc1e5..c83c5fb 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java
@@ -3,6 +3,7 @@
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.Group;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.api.restapi.utils.MalformedIdException;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
@@ -15,7 +16,7 @@
     public static Group map(DbGroup entity, Group template) {
         Group model = template != null ? template : new Group();
         model.setName(entity.getName());
-        model.setId(entity.getId().toString());
+        
model.setId(DirectoryEntryIdUtils.generateId(entity.getId().toString(), 
entity.getDomain(), entity.getExternalId()));
         if (!StringUtils.isEmpty(entity.getDomain())) {
             Domain dom = new Domain();
             dom.setId(new Guid(entity.getDomain().getBytes(), 
true).toString());
@@ -28,7 +29,7 @@
     public static Group map(DirectoryGroup entity, Group template) {
         Group model = template != null ? template : new Group();
         model.setName(entity.getName());
-        model.setId(entity.getId());
+        model.setId(DirectoryEntryIdUtils.generateId("", 
entity.getDirectoryName(), entity.getId()));
         if (!StringUtils.isEmpty(entity.getDirectoryName())) {
             Domain dom = new Domain();
             dom.setId(new Guid(entity.getDirectoryName().getBytes(), 
true).toString());
@@ -46,8 +47,15 @@
         if (model.isSetId()) {
             String id = model.getId();
             try {
-                entity.setId(GuidUtils.asGuid(id));
-                entity.setExternalId(entity.getId().toString());
+                String internalId = DirectoryEntryIdUtils.getInternalId(id);
+                String providerId = DirectoryEntryIdUtils.getProviderId(id);
+                String externalId = 
DirectoryEntryIdUtils.getIdInDirectory(providerId);
+                if (internalId.isEmpty()) {
+                    entity.setId(Guid.newGuid());
+                } else {
+                    entity.setId(GuidUtils.asGuid(internalId));
+                }
+                entity.setExternalId(externalId);
             }
             catch (MalformedIdException exception) {
                 // The identifier won't be a UUID if the group comes from 
/domains/{domain:id}/groups.
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java
index 6ed5373..4b8092b 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.api.model.User;
 import org.ovirt.engine.api.model.VM;
 import org.ovirt.engine.api.model.VmPool;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.businessentities.Permissions;
@@ -50,7 +51,7 @@
         }
         if (entity.getad_element_id() != null && (template == null || 
!template.isSetGroup())) {
             model.setUser(new User());
-            model.getUser().setId(entity.getad_element_id().toString());
+            
model.getUser().setId(DirectoryEntryIdUtils.generateId(entity.getad_element_id().toString(),
 " ", " "));
         }
         if (entity.getObjectId() != null) {
             setObjectId(model, entity);
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
index df0b061..39e7a45 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java
@@ -5,6 +5,7 @@
 import org.ovirt.engine.api.model.Group;
 import org.ovirt.engine.api.model.Groups;
 import org.ovirt.engine.api.model.User;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.api.restapi.utils.MalformedIdException;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
@@ -19,7 +20,7 @@
         User model = template != null ? template : new User();
         model.setName(entity.getFirstName());
         model.setUserName(entity.getLoginName() + "@" + entity.getDomain());
-        model.setId(entity.getId().toString());
+        
model.setId(DirectoryEntryIdUtils.generateId(entity.getId().toString(), 
entity.getDomain(), entity.getExternalId()));
         model.setLastName(entity.getLastName());
         model.setEmail(entity.getEmail());
         model.setDepartment(entity.getDepartment());
@@ -44,7 +45,7 @@
         User model = template != null ? template : new User();
         model.setName(entity.getFirstName());
         model.setUserName(entity.getName() + "@" + entity.getDirectoryName());
-        model.setId(new Guid(entity.getId().getBytes(), true).toString());
+        model.setId(DirectoryEntryIdUtils.generateId("", 
entity.getDirectoryName(), entity.getId()));
         model.setLastName(entity.getLastName());
         model.setEmail(entity.getEmail());
         model.setDepartment(entity.getDepartment());
@@ -73,8 +74,15 @@
         if (model.isSetId()) {
             String id = model.getId();
             try {
-                entity.setId(GuidUtils.asGuid(id));
-                entity.setExternalId(entity.getId().toString());
+                String internalId = DirectoryEntryIdUtils.getInternalId(id);
+                String providerId = DirectoryEntryIdUtils.getProviderId(id);
+                String externalId = 
DirectoryEntryIdUtils.getIdInDirectory(providerId);
+                if (internalId.isEmpty()) {
+                    entity.setId(Guid.newGuid());
+                } else {
+                    entity.setId(GuidUtils.asGuid(internalId));
+                }
+                entity.setExternalId(externalId);
             }
             catch (MalformedIdException exception) {
                 // The identifier won't be a UUID if the user comes from 
/domains/{domain:id}/users.
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java
new file mode 100644
index 0000000..3f613c9
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java
@@ -0,0 +1,97 @@
+package org.ovirt.engine.api.restapi.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DirectoryEntryIdUtils {
+
+    // ID is in formato of 
"id=<UUID>:provider_name=<string>:provider_id=<string>"
+    private static final Pattern ID_PATTERN =
+            
Pattern.compile("(id=)([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}):(provider_id=)(.+:.+)");
+
+    /**
+     * Gets the internal id part from the id string
+     * @param id the id string
+     * @return the internal id part
+     */
+    public static String getInternalId(String id) {
+
+        Matcher matcher = ID_PATTERN.matcher(decode(decode(id)));
+        if (matcher.matches() && matcher.groupCount() == 4) {
+            return matcher.group(2);
+        }
+        throw new RuntimeException("Error in getting internal id from ID 
string " + id);
+    }
+
+    /**
+     * Gets the provider name part from the id string
+     * @param id the id string
+     * @return the provider name part
+     */
+    public static String getProviderId(String id) {
+        Matcher matcher = ID_PATTERN.matcher(decode(id));
+        if (matcher.matches() && matcher.groupCount() == 4) {
+            return matcher.group(4);
+        }
+        throw new RuntimeException("Error in getting provider id from ID 
string " + id);
+    }
+
+    private static String decode(String id) {
+        try {
+            return URLDecoder.decode(id, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Composes an id string based on its components
+     * @param internalId internal id (UUID)
+     * @param providerId provider id
+     * @return id string represnting the provider id
+     */
+    public static String generateId(String internalId, String providerId) {
+        try {
+            return URLEncoder.encode(String.format("id=%1$s:provider_id=%2$s",
+                    internalId,
+                    providerId), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Generates an id string based on the components
+     *
+     * @param internalId
+     *            internal id (UUID)
+     * @param directory
+     *            name of directory
+     * @param idInDirectory
+     *            id of entity in directory
+     */
+    public static String generateId(String internalId, String directory, 
String idInDirectory) {
+        return generateId(internalId, directory + ":" + idInDirectory);
+    }
+
+    public static String getDirectory(String providerId) {
+        String[] parts = providerId.split(":");
+        if (parts.length != 2) {
+            throw new RuntimeException("Format of provider id is 
<directory>:<id in directory>");
+        }
+        return parts[0];
+    }
+
+    public static String getIdInDirectory(String providerId) {
+        String[] parts = providerId.split(":");
+        if (parts.length != 2) {
+            throw new RuntimeException("Format of provider id is 
<directory>:<id in directory>");
+        }
+        return parts[1];
+
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/26191
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaecb5d43945769db82475edde1c7075c1a343c07
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to