diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/ContainerType.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/ContainerType.java index 4800871ecc..b70530c750 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/ContainerType.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/ContainerType.java @@ -32,7 +32,8 @@ public class ContainerType implements com.linkedin.datahub.graphql.types.EntityT Constants.SUB_TYPES_ASPECT_NAME, Constants.GLOBAL_TAGS_ASPECT_NAME, Constants.GLOSSARY_TERMS_ASPECT_NAME, - Constants.CONTAINER_ASPECT_NAME + Constants.CONTAINER_ASPECT_NAME, + Constants.DOMAINS_ASPECT_NAME ); private final EntityClient _entityClient; diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/mappers/ContainerMapper.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/mappers/ContainerMapper.java index 6ebcf0415b..dce901bb5e 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/mappers/ContainerMapper.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/container/mappers/ContainerMapper.java @@ -11,12 +11,14 @@ import com.linkedin.container.ContainerProperties; import com.linkedin.container.EditableContainerProperties; import com.linkedin.datahub.graphql.generated.Container; import com.linkedin.datahub.graphql.generated.DataPlatform; +import com.linkedin.datahub.graphql.generated.Domain; import com.linkedin.datahub.graphql.generated.EntityType; import com.linkedin.datahub.graphql.types.common.mappers.InstitutionalMemoryMapper; import com.linkedin.datahub.graphql.types.common.mappers.OwnershipMapper; import com.linkedin.datahub.graphql.types.common.mappers.StringMapMapper; import com.linkedin.datahub.graphql.types.glossary.mappers.GlossaryTermsMapper; import com.linkedin.datahub.graphql.types.tag.mappers.GlobalTagsMapper; +import com.linkedin.domain.Domains; import com.linkedin.entity.EntityResponse; import com.linkedin.entity.EnvelopedAspect; import com.linkedin.entity.EnvelopedAspectMap; @@ -89,6 +91,17 @@ public class ContainerMapper { .build()); } + final EnvelopedAspect envelopedDomains = aspects.get(Constants.DOMAINS_ASPECT_NAME); + if (envelopedDomains != null) { + final Domains domains = new Domains(envelopedDomains.getValue().data()); + // Currently we only take the first domain if it exists. + if (domains.getDomains().size() > 0) { + result.setDomain(Domain.builder() + .setType(EntityType.DOMAIN) + .setUrn(domains.getDomains().get(0).toString()).build()); + } + } + return result; } diff --git a/datahub-graphql-core/src/main/resources/entity.graphql b/datahub-graphql-core/src/main/resources/entity.graphql index 08c10bbb85..5ad532f2b8 100644 --- a/datahub-graphql-core/src/main/resources/entity.graphql +++ b/datahub-graphql-core/src/main/resources/entity.graphql @@ -1183,6 +1183,11 @@ type Container implements Entity { """ subTypes: SubTypes + """ + The Domain associated with the Dataset + """ + domain: Domain + """ Children entities inside of the Container """ diff --git a/datahub-web-react/src/app/entity/container/ContainerEntity.tsx b/datahub-web-react/src/app/entity/container/ContainerEntity.tsx index 1f6e31b918..8791e98316 100644 --- a/datahub-web-react/src/app/entity/container/ContainerEntity.tsx +++ b/datahub-web-react/src/app/entity/container/ContainerEntity.tsx @@ -117,6 +117,7 @@ export class ContainerEntity implements Entity { subTypes={data.subTypes} container={data.container} entityCount={data.entities?.total} + domain={data.domain} /> ); }; @@ -134,6 +135,7 @@ export class ContainerEntity implements Entity { subTypes={data.subTypes} container={data.container} entityCount={data.entities?.total} + domain={data.domain} /> ); }; diff --git a/datahub-web-react/src/app/entity/container/preview/Preview.tsx b/datahub-web-react/src/app/entity/container/preview/Preview.tsx index 7a6fcb915d..9775f582aa 100644 --- a/datahub-web-react/src/app/entity/container/preview/Preview.tsx +++ b/datahub-web-react/src/app/entity/container/preview/Preview.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Container, EntityType, Owner, SearchInsight, SubTypes } from '../../../../types.generated'; +import { Container, EntityType, Owner, SearchInsight, SubTypes, Domain } from '../../../../types.generated'; import DefaultPreviewCard from '../../../preview/DefaultPreviewCard'; import { useEntityRegistry } from '../../../useEntityRegistry'; import { IconStyleType } from '../../Entity'; @@ -16,6 +16,7 @@ export const Preview = ({ logoComponent, container, entityCount, + domain, }: { urn: string; name: string; @@ -28,6 +29,7 @@ export const Preview = ({ logoComponent?: JSX.Element; container?: Container | null; entityCount?: number; + domain?: Domain | null; }): JSX.Element => { const entityRegistry = useEntityRegistry(); const typeName = (subTypes?.typeNames?.length && subTypes?.typeNames[0]) || 'Container'; @@ -45,6 +47,7 @@ export const Preview = ({ container={container || undefined} typeIcon={entityRegistry.getIcon(EntityType.Container, 12, IconStyleType.ACCENT)} entityCount={entityCount} + domain={domain || undefined} /> ); }; diff --git a/metadata-models/src/main/resources/entity-registry.yml b/metadata-models/src/main/resources/entity-registry.yml index 8d13712ce9..fa24285917 100644 --- a/metadata-models/src/main/resources/entity-registry.yml +++ b/metadata-models/src/main/resources/entity-registry.yml @@ -60,6 +60,7 @@ entities: - institutionalMemory - browsePaths # unclear if this will be used - status + - domains - name: glossaryTerm keyAspect: glossaryTermKey aspects: