feat(container): Add domains aspect to container. (#4059)

This commit is contained in:
John Joyce 2022-02-04 10:18:53 -08:00 committed by GitHub
parent aab622793d
commit c8922b39d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 2 deletions

View File

@ -32,7 +32,8 @@ public class ContainerType implements com.linkedin.datahub.graphql.types.EntityT
Constants.SUB_TYPES_ASPECT_NAME, Constants.SUB_TYPES_ASPECT_NAME,
Constants.GLOBAL_TAGS_ASPECT_NAME, Constants.GLOBAL_TAGS_ASPECT_NAME,
Constants.GLOSSARY_TERMS_ASPECT_NAME, Constants.GLOSSARY_TERMS_ASPECT_NAME,
Constants.CONTAINER_ASPECT_NAME Constants.CONTAINER_ASPECT_NAME,
Constants.DOMAINS_ASPECT_NAME
); );
private final EntityClient _entityClient; private final EntityClient _entityClient;

View File

@ -11,12 +11,14 @@ import com.linkedin.container.ContainerProperties;
import com.linkedin.container.EditableContainerProperties; import com.linkedin.container.EditableContainerProperties;
import com.linkedin.datahub.graphql.generated.Container; import com.linkedin.datahub.graphql.generated.Container;
import com.linkedin.datahub.graphql.generated.DataPlatform; 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.generated.EntityType;
import com.linkedin.datahub.graphql.types.common.mappers.InstitutionalMemoryMapper; 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.OwnershipMapper;
import com.linkedin.datahub.graphql.types.common.mappers.StringMapMapper; import com.linkedin.datahub.graphql.types.common.mappers.StringMapMapper;
import com.linkedin.datahub.graphql.types.glossary.mappers.GlossaryTermsMapper; import com.linkedin.datahub.graphql.types.glossary.mappers.GlossaryTermsMapper;
import com.linkedin.datahub.graphql.types.tag.mappers.GlobalTagsMapper; import com.linkedin.datahub.graphql.types.tag.mappers.GlobalTagsMapper;
import com.linkedin.domain.Domains;
import com.linkedin.entity.EntityResponse; import com.linkedin.entity.EntityResponse;
import com.linkedin.entity.EnvelopedAspect; import com.linkedin.entity.EnvelopedAspect;
import com.linkedin.entity.EnvelopedAspectMap; import com.linkedin.entity.EnvelopedAspectMap;
@ -89,6 +91,17 @@ public class ContainerMapper {
.build()); .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; return result;
} }

View File

@ -1183,6 +1183,11 @@ type Container implements Entity {
""" """
subTypes: SubTypes subTypes: SubTypes
"""
The Domain associated with the Dataset
"""
domain: Domain
""" """
Children entities inside of the Container Children entities inside of the Container
""" """

View File

@ -117,6 +117,7 @@ export class ContainerEntity implements Entity<Container> {
subTypes={data.subTypes} subTypes={data.subTypes}
container={data.container} container={data.container}
entityCount={data.entities?.total} entityCount={data.entities?.total}
domain={data.domain}
/> />
); );
}; };
@ -134,6 +135,7 @@ export class ContainerEntity implements Entity<Container> {
subTypes={data.subTypes} subTypes={data.subTypes}
container={data.container} container={data.container}
entityCount={data.entities?.total} entityCount={data.entities?.total}
domain={data.domain}
/> />
); );
}; };

View File

@ -1,5 +1,5 @@
import React from 'react'; 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 DefaultPreviewCard from '../../../preview/DefaultPreviewCard';
import { useEntityRegistry } from '../../../useEntityRegistry'; import { useEntityRegistry } from '../../../useEntityRegistry';
import { IconStyleType } from '../../Entity'; import { IconStyleType } from '../../Entity';
@ -16,6 +16,7 @@ export const Preview = ({
logoComponent, logoComponent,
container, container,
entityCount, entityCount,
domain,
}: { }: {
urn: string; urn: string;
name: string; name: string;
@ -28,6 +29,7 @@ export const Preview = ({
logoComponent?: JSX.Element; logoComponent?: JSX.Element;
container?: Container | null; container?: Container | null;
entityCount?: number; entityCount?: number;
domain?: Domain | null;
}): JSX.Element => { }): JSX.Element => {
const entityRegistry = useEntityRegistry(); const entityRegistry = useEntityRegistry();
const typeName = (subTypes?.typeNames?.length && subTypes?.typeNames[0]) || 'Container'; const typeName = (subTypes?.typeNames?.length && subTypes?.typeNames[0]) || 'Container';
@ -45,6 +47,7 @@ export const Preview = ({
container={container || undefined} container={container || undefined}
typeIcon={entityRegistry.getIcon(EntityType.Container, 12, IconStyleType.ACCENT)} typeIcon={entityRegistry.getIcon(EntityType.Container, 12, IconStyleType.ACCENT)}
entityCount={entityCount} entityCount={entityCount}
domain={domain || undefined}
/> />
); );
}; };

View File

@ -60,6 +60,7 @@ entities:
- institutionalMemory - institutionalMemory
- browsePaths # unclear if this will be used - browsePaths # unclear if this will be used
- status - status
- domains
- name: glossaryTerm - name: glossaryTerm
keyAspect: glossaryTermKey keyAspect: glossaryTermKey
aspects: aspects: