public Optional get()

in metacat-main/src/main/java/com/netflix/metacat/main/services/impl/TableServiceImpl.java [488:552]


    public Optional<TableDto> get(final QualifiedName name, final GetTableServiceParameters getTableServiceParameters) {
        validate(name);
        TableDto tableInternal = null;
        final TableDto table;
        final MetacatCatalogConfig catalogConfig = connectorManager.getCatalogConfig(name);
        if (getTableServiceParameters.isIncludeInfo()
            || (getTableServiceParameters.isIncludeDefinitionMetadata() && catalogConfig.isInterceptorEnabled()
            && !getTableServiceParameters.isDisableOnReadMetadataIntercetor())) {
            try {
                final boolean useCache = getTableServiceParameters.isUseCache() && config.isCacheEnabled()
                    && catalogConfig.isCacheEnabled();
                tableInternal = converterUtil.toTableDto(
                    getFromTableServiceProxy(name, getTableServiceParameters, useCache));
            } catch (NotFoundException ignored) {
                return Optional.empty();
            }
            table = tableInternal;
        } else {
            table = new TableDto();
            table.setName(name);
        }

        if (getTableServiceParameters.isIncludeDefinitionMetadata()) {
            Optional<ObjectNode> definitionMetadata =
                (getTableServiceParameters.isDisableOnReadMetadataIntercetor())
                    ? userMetadataService.getDefinitionMetadata(name)
                    : userMetadataService.getDefinitionMetadataWithInterceptor(name,
                    GetMetadataInterceptorParameters.builder().hasMetadata(tableInternal).build());
            // Always get the source of truth for parent child relation from the parentChildRelMetadataService
            if (definitionMetadata.isPresent()
                && definitionMetadata.get().has(ParentChildRelMetadataConstants.PARENT_CHILD_RELINFO)) {
                definitionMetadata.get().remove(ParentChildRelMetadataConstants.PARENT_CHILD_RELINFO);
            }
            if (config.isParentChildGetEnabled()) {
                final ObjectNode parentChildRelObjectNode = createParentChildObjectNode(name);
                if (!parentChildRelObjectNode.isEmpty()) {
                    if (!definitionMetadata.isPresent()) {
                        definitionMetadata = Optional.of(new ObjectMapper().createObjectNode());
                    }
                    definitionMetadata.get().set(ParentChildRelMetadataConstants.PARENT_CHILD_RELINFO,
                        parentChildRelObjectNode);
                }
            }
            definitionMetadata.ifPresent(table::setDefinitionMetadata);
        }

        if (getTableServiceParameters.isIncludeDataMetadata() && catalogConfig.isHasDataExternal()) {
            TableDto dto = table;
            if (tableInternal == null && !getTableServiceParameters.isIncludeInfo()) {
                try {
                    final boolean useCache = getTableServiceParameters.isUseCache() && config.isCacheEnabled();
                    dto = converterUtil.toTableDto(
                        getFromTableServiceProxy(name, getTableServiceParameters, useCache));
                } catch (NotFoundException ignored) {
                }
            }
            if (dto != null && dto.getSerde() != null) {
                final Optional<ObjectNode> dataMetadata =
                    userMetadataService.getDataMetadata(dto.getSerde().getUri());
                dataMetadata.ifPresent(table::setDataMetadata);
            }
        }

        return Optional.of(table);
    }