/** * Saves user metadata. * * @param userId user name * @param holder metadata * @param merge true if the metadata should be merged with existing metadata */ @Override public void saveMetadata(final String userId, final HasMetadata holder, final boolean merge) { if (holder instanceof HasDefinitionMetadata) { final HasDefinitionMetadata defDto = (HasDefinitionMetadata) holder; // If the user is updating the definition metadata do a merge on the existing metadata final ObjectNode newMetadata = defDto.getDefinitionMetadata(); if (newMetadata != null) { saveDefinitionMetadata(defDto.getDefinitionName(), userId, Optional.of(newMetadata), merge); } } if (holder instanceof HasDataMetadata) { final HasDataMetadata dataDto = (HasDataMetadata) holder; // If the user is updating the data metadata and a separate data location exists, // do a merge on the existing metadata final ObjectNode newMetadata = dataDto.getDataMetadata(); if (newMetadata != null && dataDto.isDataExternal()) { saveDataMetadata(dataDto.getDataUri(), userId, Optional.of(newMetadata), merge); } } }
/** * Populate metadata. * * @param holder metadata * @param definitionMetadata definition metadata * @param dataMetadata data metadata */ @Override public void populateMetadata( final HasMetadata holder, final ObjectNode definitionMetadata, final ObjectNode dataMetadata ) { if (holder instanceof HasDefinitionMetadata) { final HasDefinitionMetadata defDto = (HasDefinitionMetadata) holder; defDto.setDefinitionMetadata(definitionMetadata); } if (holder instanceof HasDataMetadata) { final HasDataMetadata dataDto = (HasDataMetadata) holder; //data Metadata can be populated from iceberg metrics directly if (dataDto.isDataExternal() || dataMetadata != null) { dataDto.setDataMetadata(dataMetadata); } } } }
@Override public void deleteMetadata(final String userId, final List<HasMetadata> holders) { try { final List<List<HasMetadata>> subLists = Lists.partition(holders, config.getUserMetadataMaxInClauseItems()); for (List<HasMetadata> hasMetadatas : subLists) { final List<QualifiedName> names = hasMetadatas.stream() .filter(m -> m instanceof HasDefinitionMetadata) .map(m -> ((HasDefinitionMetadata) m).getDefinitionName()) .collect(Collectors.toList()); if (!names.isEmpty()) { _deleteDefinitionMetadata(names); } if (config.canSoftDeleteDataMetadata()) { final List<String> uris = hasMetadatas.stream() .filter(m -> m instanceof HasDataMetadata && ((HasDataMetadata) m).isDataExternal()) .map(m -> ((HasDataMetadata) m).getDataUri()).collect(Collectors.toList()); if (!uris.isEmpty()) { _softDeleteDataMetadata(userId, uris); } } } } catch (Exception e) { log.error("Failed deleting metadatas", e); throw new UserMetadataServiceException("Failed deleting metadatas", e); } }
/** * Populate the given metadata. * * @param holder metadata */ @Override public void populateMetadata(final HasMetadata holder, final boolean disableIntercetpor) { Optional<ObjectNode> metadata = Optional.empty(); if (holder instanceof HasDataMetadata) { final HasDataMetadata dataDto = (HasDataMetadata) holder; if (dataDto.isDataExternal()) { metadata = getDataMetadata(dataDto.getDataUri()); } } Optional<ObjectNode> definitionMetadata = Optional.empty(); if (holder instanceof HasDefinitionMetadata) { final HasDefinitionMetadata definitionDto = (HasDefinitionMetadata) holder; definitionMetadata = disableIntercetpor ? this.getDefinitionMetadata(definitionDto.getDefinitionName()) : this.getDefinitionMetadataWithInterceptor(definitionDto.getDefinitionName(), GetMetadataInterceptorParameters.builder().hasMetadata(holder).build()); } populateMetadata(holder, definitionMetadata.orElse(null), metadata.orElse(null)); }
/** * Saves user metadata. * * @param userId user name * @param holder metadata * @param merge true if the metadata should be merged with existing metadata */ @Override public void saveMetadata(final String userId, final HasMetadata holder, final boolean merge) { if (holder instanceof HasDefinitionMetadata) { final HasDefinitionMetadata defDto = (HasDefinitionMetadata) holder; // If the user is updating the definition metadata do a merge on the existing metadata final ObjectNode newMetadata = defDto.getDefinitionMetadata(); if (newMetadata != null) { saveDefinitionMetadata(defDto.getDefinitionName(), userId, Optional.of(newMetadata), merge); } } if (holder instanceof HasDataMetadata) { final HasDataMetadata dataDto = (HasDataMetadata) holder; // If the user is updating the data metadata and a separate data location exists, // do a merge on the existing metadata final ObjectNode newMetadata = dataDto.getDataMetadata(); if (newMetadata != null && dataDto.isDataExternal()) { saveDataMetadata(dataDto.getDataUri(), userId, Optional.of(newMetadata), merge); } } }
/** * Populate the given metadata. * * @param holder metadata */ @Override public void populateMetadata(final HasMetadata holder, final boolean disableIntercetpor) { Optional<ObjectNode> metadata = Optional.empty(); if (holder instanceof HasDataMetadata) { final HasDataMetadata dataDto = (HasDataMetadata) holder; if (dataDto.isDataExternal()) { metadata = getDataMetadata(dataDto.getDataUri()); } } Optional<ObjectNode> definitionMetadata = Optional.empty(); if (holder instanceof HasDefinitionMetadata) { final HasDefinitionMetadata definitionDto = (HasDefinitionMetadata) holder; definitionMetadata = disableIntercetpor ? this.getDefinitionMetadata(definitionDto.getDefinitionName()) : this.getDefinitionMetadataWithInterceptor(definitionDto.getDefinitionName(), GetMetadataInterceptorParameters.builder().hasMetadata(holder).build()); } populateMetadata(holder, definitionMetadata.orElse(null), metadata.orElse(null)); }
/** * Populate metadata. * * @param holder metadata * @param definitionMetadata definition metadata * @param dataMetadata data metadata */ @Override public void populateMetadata( final HasMetadata holder, final ObjectNode definitionMetadata, final ObjectNode dataMetadata ) { if (holder instanceof HasDefinitionMetadata) { final HasDefinitionMetadata defDto = (HasDefinitionMetadata) holder; defDto.setDefinitionMetadata(definitionMetadata); } if (holder instanceof HasDataMetadata) { final HasDataMetadata dataDto = (HasDataMetadata) holder; //data Metadata can be populated from iceberg metrics directly if (dataDto.isDataExternal() || dataMetadata != null) { dataDto.setDataMetadata(dataMetadata); } } } }
if (oData.isDataExternal() && oData.getDataMetadata() != null && oData.getDataMetadata().size() > 0) { uris.add(oData.getDataUri()); dataMetadatas.add(oData); final String uri = oData.getDataUri(); final ObjectNode oNode = dataMap.get(uri); if (oData.getDataMetadata() != null && oData.getDataMetadata().size() != 0) { if (oNode == null) { insertDataMetadatas.add( new Object[]{ metacatJson.toJsonString(oData.getDataMetadata()), user, user, metacatJson.mergeIntoPrimary(oNode, oData.getDataMetadata()); updateDataMetadatas .add(new Object[]{metacatJson.toJsonString(oNode), user, uri});