diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java index 533aac3e662..df5b2657cfa 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java @@ -266,7 +266,7 @@ public abstract class DashboardRepository { service.setDescription(serviceInstance.getDescription()); service.setName(serviceInstance.getName()); } else { - throw new IllegalArgumentException(String.format("Invalid service type %s for the chart", service.getType())); + throw new IllegalArgumentException(String.format("Invalid service type %s for the dashboard", service.getType())); } return service; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityUtil.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityUtil.java index 4502fa1fca1..c364f8ab00c 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityUtil.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityUtil.java @@ -129,44 +129,32 @@ public final class EntityUtil { if (ref == null) { return; } - switch (ref.getType()) { - case Entity.TEAM: - TeamResource.addHref(uriInfo, ref); - break; - case Entity.USER: - UserResource.addHref(uriInfo, ref); - break; - case Entity.TABLE: - TableResource.addHref(uriInfo, ref); - break; - case Entity.DATABASE: - DatabaseResource.addHref(uriInfo, ref); - break; - case Entity.TOPIC: - TopicResource.addHref(uriInfo, ref); - break; - case Entity.CHART: - ChartResource.addHref(uriInfo, ref); - break; - case Entity.DASHBOARD: - DashboardResource.addHref(uriInfo, ref); - break; - case Entity.TASK: - TaskResource.addHref(uriInfo, ref); - break; - case Entity.DATABASE_SERVICE: - DatabaseServiceResource.addHref(uriInfo, ref); - break; - case Entity.MESSAGING_SERVICE: - MessagingServiceResource.addHref(uriInfo, ref); - break; - case Entity.DASHBOARD_SERVICE: - DashboardServiceResource.addHref(uriInfo, ref); - break; - case Entity.PIPELINE_SERVICE: - PipelineServiceResource.addHref(uriInfo, ref); - break; - default: + String entity = ref.getType(); + if (entity.equalsIgnoreCase(Entity.TEAM)) { + TeamResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.USER)) { + UserResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.TABLE)) { + TableResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.DATABASE)) { + DatabaseResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.TOPIC)) { + TopicResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.CHART)) { + ChartResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.DASHBOARD)) { + DashboardResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.TASK)) { + TaskResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.DATABASE_SERVICE)) { + DatabaseServiceResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.MESSAGING_SERVICE)) { + MessagingServiceResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.DASHBOARD_SERVICE)) { + DashboardServiceResource.addHref(uriInfo, ref); + } else if (entity.equalsIgnoreCase(Entity.PIPELINE_SERVICE)) { + PipelineServiceResource.addHref(uriInfo, ref); + } else { throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityTypeNotFound(ref.getType())); } } @@ -421,31 +409,29 @@ public final class EntityUtil { throws IOException { String entityType = entityLink.getEntityType(); String fqn = entityLink.getEntityId(); - switch (entityType) { - case Entity.USER: - return getEntityReference(EntityUtil.validate(fqn, userDAO.findByName(fqn), User.class)); - case Entity.TEAM: - return getEntityReference(EntityUtil.validate(fqn, teamDAO.findByName(fqn), Team.class)); - case Entity.TABLE: - return getEntityReference(EntityUtil.validate(fqn, tableDAO.findByFQN(fqn), Table.class)); - case Entity.DATABASE: - return getEntityReference(EntityUtil.validate(fqn, databaseDAO.findByFQN(fqn), Database.class)); - case Entity.METRICS: - return getEntityReference(EntityUtil.validate(fqn, metricsDAO.findByFQN(fqn), Metrics.class)); - case Entity.DASHBOARD: - return getEntityReference(EntityUtil.validate(fqn, dashboardDAO.findByFQN(fqn), Dashboard.class)); - case Entity.REPORT: - return getEntityReference(EntityUtil.validate(fqn, reportDAO.findByFQN(fqn), Report.class)); - case Entity.TOPIC: - return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Topic.class)); - case Entity.TASK: - return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Task.class)); - default: - throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityNotFound(entityType, fqn)); + if(entityType.equalsIgnoreCase(Entity.USER)) { + return getEntityReference(EntityUtil.validate(fqn, userDAO.findByName(fqn), User.class)); + } else if (entityType.equalsIgnoreCase(Entity.TEAM)) { + return getEntityReference(EntityUtil.validate(fqn, teamDAO.findByName(fqn), Team.class)); + } else if (entityType.equalsIgnoreCase(Entity.TABLE)) { + return getEntityReference(EntityUtil.validate(fqn, tableDAO.findByFQN(fqn), Table.class)); + } else if (entityType.equalsIgnoreCase(Entity.DATABASE)) { + return getEntityReference(EntityUtil.validate(fqn, databaseDAO.findByFQN(fqn), Database.class)); + } else if (entityType.equalsIgnoreCase(Entity.METRICS)) { + return getEntityReference(EntityUtil.validate(fqn, metricsDAO.findByFQN(fqn), Metrics.class)); + } else if (entityType.equalsIgnoreCase(Entity.DASHBOARD)) { + return getEntityReference(EntityUtil.validate(fqn, dashboardDAO.findByFQN(fqn), Dashboard.class)); + } else if (entityType.equalsIgnoreCase(Entity.REPORT)) { + return getEntityReference(EntityUtil.validate(fqn, reportDAO.findByFQN(fqn), Report.class)); + } else if (entityType.equalsIgnoreCase(Entity.TOPIC)) { + return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Topic.class)); + } else if (entityType.equalsIgnoreCase(Entity.TASK)) { + return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Task.class)); + } else { + throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityNotFound(entityType, fqn)); } } - public static UsageDetails getLatestUsage(UsageDAO usageDAO, UUID entityId) { LOG.debug("Getting latest usage for {}", entityId); UsageDetails details = usageDAO.getLatestUsage(entityId.toString()); @@ -523,6 +509,7 @@ public final class EntityUtil { }); } + /** * Apply tags {@code tagLabels} to the entity or field identified by {@code targetFQN} */ diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java index d7ab58cf426..f1fe214c448 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java @@ -36,7 +36,6 @@ import org.openmetadata.catalog.exception.CatalogExceptionMessage; import org.openmetadata.catalog.resources.charts.ChartResourceTest; import org.openmetadata.catalog.resources.dashboards.DashboardResource.DashboardList; import org.openmetadata.catalog.resources.services.DashboardServiceResourceTest; -import org.openmetadata.catalog.resources.tags.TagResourceTest; import org.openmetadata.catalog.resources.teams.TeamResourceTest; import org.openmetadata.catalog.resources.teams.UserResourceTest; import org.openmetadata.catalog.type.EntityReference; @@ -55,7 +54,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.stream.Collectors; import static java.util.Collections.singletonList; import static javax.ws.rs.core.Response.Status.BAD_REQUEST; @@ -84,6 +82,7 @@ public class DashboardResourceTest extends CatalogApplicationTest { public static EntityReference TEAM_OWNER1; public static EntityReference SUPERSET_REFERENCE; public static EntityReference LOOKER_REFERENCE; + public static EntityReference SUPERSET_INVALID_SERVICE_REFERENCE; public static List CHART_REFERENCES; public static final TagLabel TIER_1 = new TagLabel().withTagFQN("Tier.Tier1"); public static final TagLabel USER_ADDRESS_TAG_LABEL = new TagLabel().withTagFQN("User.Address"); @@ -102,6 +101,9 @@ public class DashboardResourceTest extends CatalogApplicationTest { DashboardService service = DashboardServiceResourceTest.createService(createService, adminAuthHeaders()); SUPERSET_REFERENCE = EntityUtil.getEntityReference(service); + SUPERSET_INVALID_SERVICE_REFERENCE = new EntityReference().withName("invalid_superset_service") + .withId(SUPERSET_REFERENCE.getId()) + .withType("DashboardService1"); createService.withName("looker").withServiceType(DashboardServiceType.Looker); service = DashboardServiceResourceTest.createService(createService, adminAuthHeaders()); @@ -183,6 +185,16 @@ public class DashboardResourceTest extends CatalogApplicationTest { TestUtils.assertResponseContains(exception, BAD_REQUEST, "service must not be null"); } + @Test + public void post_DashboardWithInvalidService_4xx(TestInfo test) { + CreateDashboard create = create(test).withService(SUPERSET_INVALID_SERVICE_REFERENCE); + HttpResponseException exception = assertThrows(HttpResponseException.class, () -> + createDashboard(create, adminAuthHeaders())); + TestUtils.assertResponseContains(exception, BAD_REQUEST, String.format("Invalid service type %s", + SUPERSET_INVALID_SERVICE_REFERENCE.getType().toString())); + + } + @Test public void post_DashboardWithInvalidOwnerType_4xx(TestInfo test) { EntityReference owner = new EntityReference().withId(TEAM1.getId()); /* No owner type is set */