diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseRepository.java index 0e16d2c5960..807c62b117e 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseRepository.java @@ -15,6 +15,7 @@ package org.openmetadata.catalog.jdbi3; import static javax.ws.rs.core.Response.Status.CREATED; import static org.openmetadata.catalog.Entity.FIELD_OWNER; +import static org.openmetadata.catalog.type.Include.ALL; import java.io.IOException; import java.net.URI; @@ -139,7 +140,7 @@ public class DatabaseRepository extends EntityRepository { List result = findTo(database.getId(), Entity.DATABASE, Relationship.HAS, Entity.LOCATION); if (result.size() == 1) { String locationId = result.get(0); - return daoCollection.locationDAO().findEntityReferenceById(UUID.fromString(locationId)); + return daoCollection.locationDAO().findEntityReferenceById(UUID.fromString(locationId), ALL); } else { return null; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java index a0bb4df2654..29a35392e3b 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java @@ -89,7 +89,7 @@ public class DatabaseServiceRepository extends EntityRepository List airflowPipelines = new ArrayList<>(); for (String airflowPipelineId : airflowPipelineIds) { airflowPipelines.add( - daoCollection.airflowPipelineDAO().findEntityReferenceById(UUID.fromString(airflowPipelineId))); + daoCollection.airflowPipelineDAO().findEntityReferenceById(UUID.fromString(airflowPipelineId), Include.ALL)); } return airflowPipelines; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java index a06e72dd8c6..e3c348e1da4 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java @@ -16,6 +16,7 @@ package org.openmetadata.catalog.jdbi3; import static org.openmetadata.catalog.Entity.FIELD_DESCRIPTION; import static org.openmetadata.catalog.Entity.FIELD_OWNER; import static org.openmetadata.catalog.Entity.getEntityFields; +import static org.openmetadata.catalog.type.Include.ALL; import static org.openmetadata.catalog.type.Include.DELETED; import static org.openmetadata.catalog.util.EntityUtil.compareTagLabel; import static org.openmetadata.catalog.util.EntityUtil.entityReferenceMatch; @@ -235,7 +236,7 @@ public abstract class EntityRepository { @Transaction public void initSeedData(T entity) throws IOException { EntityInterface entityInterface = Entity.getEntityInterface(entity); - String existingJson = dao.findJsonByFqn(entityInterface.getFullyQualifiedName(), Include.ALL); + String existingJson = dao.findJsonByFqn(entityInterface.getFullyQualifiedName(), ALL); if (existingJson != null) { LOG.info("{} {} is already initialized", entityType, entityInterface.getFullyQualifiedName()); return; @@ -336,7 +337,7 @@ public abstract class EntityRepository { return JsonUtils.readValue(json, entityClass); } // If requested the latest version, return it from current version of the entity - T entity = setFields(dao.findEntityById(UUID.fromString(id), Include.ALL), putFields); + T entity = setFields(dao.findEntityById(UUID.fromString(id), ALL), putFields); EntityInterface entityInterface = getEntityInterface(entity); if (entityInterface.getVersion().equals(requestedVersion)) { return entity; @@ -347,7 +348,7 @@ public abstract class EntityRepository { @Transaction public EntityHistory listVersions(String id) throws IOException, ParseException { - T latest = setFields(dao.findEntityById(UUID.fromString(id), Include.ALL), putFields); + T latest = setFields(dao.findEntityById(UUID.fromString(id), ALL), putFields); String extensionPrefix = EntityUtil.getVersionExtensionPrefix(entityType); List oldVersions = daoCollection.entityExtensionDAO().getEntityVersions(id, extensionPrefix); oldVersions.sort(EntityUtil.compareVersion.reversed()); @@ -380,7 +381,7 @@ public abstract class EntityRepository { EntityInterface updatedInterface = getEntityInterface(updated); // Check if there is any original, deleted or not - T original = JsonUtils.readValue(dao.findJsonByFqn(getFullyQualifiedName(updated), Include.ALL), entityClass); + T original = JsonUtils.readValue(dao.findJsonByFqn(getFullyQualifiedName(updated), ALL), entityClass); if (original == null) { return new PutResponse<>(Status.CREATED, withHref(uriInfo, createNewEntity(updated)), RestUtil.ENTITY_CREATED); } @@ -775,7 +776,7 @@ public abstract class EntityRepository { List refs = findFrom(toId, toEntityType, Relationship.CONTAINS); // An entity can have only one container ensureSingleRelationship(toEntityType, toId, refs, "container", true); - return Entity.getEntityReferenceById(refs.get(0).getType(), refs.get(0).getId()); + return Entity.getEntityReferenceById(refs.get(0).getType(), refs.get(0).getId(), ALL); } public void ensureSingleRelationship( @@ -795,7 +796,7 @@ public abstract class EntityRepository { public EntityReference getOwner(UUID id, String entityType) throws IOException, ParseException { List refs = findFrom(id, entityType, Relationship.OWNS); ensureSingleRelationship(entityType, id, refs, "owners", false); - return refs.isEmpty() ? null : Entity.getEntityReferenceById(refs.get(0).getType(), refs.get(0).getId()); + return refs.isEmpty() ? null : Entity.getEntityReferenceById(refs.get(0).getType(), refs.get(0).getId(), ALL); } public List findTo(UUID fromId, String fromEntityType, Relationship relationship, String toEntityType) { diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java index 6e297149732..fad818bb749 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java @@ -17,6 +17,7 @@ package org.openmetadata.catalog.jdbi3; import static org.openmetadata.catalog.Entity.GLOSSARY_TERM; +import static org.openmetadata.catalog.type.Include.ALL; import static org.openmetadata.catalog.util.EntityUtil.stringMatch; import static org.openmetadata.catalog.util.EntityUtil.termReferenceMatch; import static org.openmetadata.common.utils.CommonUtil.listOrEmpty; @@ -79,7 +80,7 @@ public class GlossaryTermRepository extends EntityRepository { private EntityReference getParent(GlossaryTerm entity) throws IOException { List ids = findFrom(entity.getId(), GLOSSARY_TERM, Relationship.PARENT_OF, GLOSSARY_TERM); - return ids.size() == 1 ? Entity.getEntityReferenceById(GLOSSARY_TERM, UUID.fromString(ids.get(0))) : null; + return ids.size() == 1 ? Entity.getEntityReferenceById(GLOSSARY_TERM, UUID.fromString(ids.get(0)), ALL) : null; } private List getChildren(GlossaryTerm entity) throws IOException { @@ -187,7 +188,7 @@ public class GlossaryTermRepository extends EntityRepository { } public EntityReference getGlossary(String id) throws IOException { - return daoCollection.glossaryDAO().findEntityReferenceById(UUID.fromString(id)); + return daoCollection.glossaryDAO().findEntityReferenceById(UUID.fromString(id), ALL); } @Override diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java index d7dd47944f8..d856d36ad43 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java @@ -15,6 +15,7 @@ package org.openmetadata.catalog.jdbi3; import static org.openmetadata.catalog.Entity.FIELD_OWNER; import static org.openmetadata.catalog.Entity.MLMODEL; +import static org.openmetadata.catalog.type.Include.ALL; import static org.openmetadata.catalog.util.EntityUtil.entityReferenceMatch; import static org.openmetadata.catalog.util.EntityUtil.mlFeatureMatch; import static org.openmetadata.catalog.util.EntityUtil.mlHyperParameterMatch; @@ -192,7 +193,9 @@ public class MlModelRepository extends EntityRepository { if (mlModel != null) { List ids = findTo(mlModel.getId(), Entity.MLMODEL, Relationship.USES, Entity.DASHBOARD); ensureSingleRelationship(MLMODEL, mlModel.getId(), ids, "dashboards", false); - return ids.isEmpty() ? null : daoCollection.dashboardDAO().findEntityReferenceById(UUID.fromString(ids.get(0))); + return ids.isEmpty() + ? null + : daoCollection.dashboardDAO().findEntityReferenceById(UUID.fromString(ids.get(0)), ALL); } return null; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java index 1e04040c543..ab081dcbc77 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java @@ -13,6 +13,8 @@ package org.openmetadata.catalog.jdbi3; +import static org.openmetadata.catalog.type.Include.ALL; + import java.io.IOException; import java.net.URI; import java.security.GeneralSecurityException; @@ -62,13 +64,13 @@ public class RoleRepository extends EntityRepository { @Override public Role setFields(Role role, Fields fields) throws IOException { - role.setPolicy(fields.contains("policy") ? getPolicyForRole(role) : null); - role.setTeams(fields.contains("teams") ? getTeamsForRole(role) : null); - role.setUsers(fields.contains("users") ? getUsersForRole(role) : null); + role.setPolicy(fields.contains("policy") ? getPolicy(role) : null); + role.setTeams(fields.contains("teams") ? getTeams(role) : null); + role.setUsers(fields.contains("users") ? getUsers(role) : null); return role; } - private EntityReference getPolicyForRole(@NonNull Role role) throws IOException { + private EntityReference getPolicy(@NonNull Role role) throws IOException { List result = findTo(role.getId(), Entity.ROLE, Relationship.CONTAINS, Entity.POLICY); if (result.size() != 1) { LOG.warn( @@ -77,15 +79,15 @@ public class RoleRepository extends EntityRepository { role.getName()); return null; } - return Entity.getEntityReferenceById(Entity.POLICY, UUID.fromString(result.get(0))); + return Entity.getEntityReferenceById(Entity.POLICY, UUID.fromString(result.get(0)), ALL); } - private List getUsersForRole(@NonNull Role role) throws IOException { + private List getUsers(@NonNull Role role) throws IOException { List ids = findFrom(role.getId(), Entity.ROLE, Relationship.HAS, Entity.USER); return EntityUtil.populateEntityReferences(ids, Entity.USER); } - private List getTeamsForRole(@NonNull Role role) throws IOException { + private List getTeams(@NonNull Role role) throws IOException { List ids = findFrom(role.getId(), Entity.ROLE, Relationship.HAS, Entity.TEAM); return EntityUtil.populateEntityReferences(ids, Entity.TEAM); } diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java index b2e16e83bf0..ae71c862792 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java @@ -92,6 +92,7 @@ import org.openmetadata.catalog.api.services.CreateMessagingService.MessagingSer import org.openmetadata.catalog.api.services.CreatePipelineService; import org.openmetadata.catalog.api.services.CreatePipelineService.PipelineServiceType; import org.openmetadata.catalog.api.services.CreateStorageService; +import org.openmetadata.catalog.api.teams.CreateTeam; import org.openmetadata.catalog.entity.data.Chart; import org.openmetadata.catalog.entity.data.Database; import org.openmetadata.catalog.entity.data.Glossary; @@ -845,11 +846,24 @@ public abstract class EntityResourceTest extends CatalogApplicationTest { if (!supportsOwner) { return; } + + TeamResourceTest teamResourceTest = new TeamResourceTest(); + CreateTeam createTeam = teamResourceTest.createRequest(test); + Team team = teamResourceTest.createAndCheckEntity(createTeam, ADMIN_AUTH_HEADERS); + EntityReference teamReference = new TeamEntityInterface(team).getEntityReference(); + // Entity with user as owner is created successfully createAndCheckEntity(createRequest(getEntityName(test, 1), "", "", USER_OWNER1), ADMIN_AUTH_HEADERS); // Entity with team as owner is created successfully - createAndCheckEntity(createRequest(getEntityName(test, 2), "", "", TEAM_OWNER1), ADMIN_AUTH_HEADERS); + T entity = createAndCheckEntity(createRequest(getEntityName(test, 2), "", "", teamReference), ADMIN_AUTH_HEADERS); + EntityInterface entityInterface = getEntityInterface(entity); + + // Delete team and ensure the entity still exists but with owner as deleted + teamResourceTest.deleteEntity(team.getId(), ADMIN_AUTH_HEADERS); + entity = getEntity(entityInterface.getId(), "owner", ADMIN_AUTH_HEADERS); + entityInterface = getEntityInterface(entity); + assertTrue(entityInterface.getOwner().getDeleted()); } @Test