From 6d7bfcab5b63322c8956bfe37186d3b338bc8dd9 Mon Sep 17 00:00:00 2001 From: jtian <86805957+insyncoss@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:16:26 -0800 Subject: [PATCH] Include audit fields in db info --- .../server/connectors/model/BaseInfo.java | 6 +-- .../server/connectors/model/DatabaseInfo.java | 2 +- .../polaris/mappers/AuditMapper.java | 44 +++++++++++++++++++ .../mappers/PolarisDatabaseMapper.java | 2 + .../PolarisConnectorDatabaseServiceTest.java | 20 +++++++++ 5 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/AuditMapper.java diff --git a/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/BaseInfo.java b/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/BaseInfo.java index 1fcb7d907..61f9c3682 100644 --- a/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/BaseInfo.java +++ b/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/BaseInfo.java @@ -37,9 +37,9 @@ public abstract class BaseInfo implements Serializable { private static final long serialVersionUID = 284049639636194327L; /* Name of the resource */ - private QualifiedName name; + protected QualifiedName name; /* Audit information of the resource */ - private AuditInfo audit; + protected AuditInfo audit; /* Metadata properties of the resource */ - private Map metadata; + protected Map metadata; } diff --git a/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/DatabaseInfo.java b/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/DatabaseInfo.java index 6d65dce5f..5adb1fde9 100644 --- a/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/DatabaseInfo.java +++ b/metacat-common-server/src/main/java/com/netflix/metacat/common/server/connectors/model/DatabaseInfo.java @@ -33,7 +33,7 @@ */ @Data @NoArgsConstructor -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode(of = {"name", "uri"}) public final class DatabaseInfo extends BaseInfo { /* location of the database */ private String uri; diff --git a/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/AuditMapper.java b/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/AuditMapper.java new file mode 100644 index 000000000..fa3b73503 --- /dev/null +++ b/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/AuditMapper.java @@ -0,0 +1,44 @@ +package com.netflix.metacat.connector.polaris.mappers; + +import com.netflix.metacat.common.server.connectors.model.AuditInfo; +import com.netflix.metacat.connector.polaris.store.entities.AuditEntity; +import org.apache.commons.lang3.ObjectUtils; + +import java.util.Date; + + +/** + * Audit object mapper implementations. + */ +public class AuditMapper implements + EntityToInfoMapper, + InfoToEntityMapper { + + /** + * {@inheritDoc}. + */ + @Override + public AuditInfo toInfo(final AuditEntity entity) { + final AuditInfo auditInfo = AuditInfo.builder() + .createdBy(entity.getCreatedBy()) + .createdDate(Date.from(entity.getCreatedDate())) + .lastModifiedBy(entity.getLastModifiedBy()) + .lastModifiedDate(Date.from(entity.getLastModifiedDate())) + .build(); + return auditInfo; + } + + /** + * {@inheritDoc}. + */ + @Override + public AuditEntity toEntity(final AuditInfo info) { + final AuditEntity entity = AuditEntity.builder() + .createdBy(info.getCreatedBy()) + .createdDate(ObjectUtils.defaultIfNull(info.getCreatedDate(), new Date()).toInstant()) + .lastModifiedBy(info.getLastModifiedBy()) + .lastModifiedDate(ObjectUtils.defaultIfNull(info.getLastModifiedDate(), new Date()).toInstant()) + .build(); + return entity; + } +} diff --git a/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/PolarisDatabaseMapper.java b/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/PolarisDatabaseMapper.java index 04dc5724d..21380e379 100644 --- a/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/PolarisDatabaseMapper.java +++ b/metacat-connector-polaris/src/main/java/com/netflix/metacat/connector/polaris/mappers/PolarisDatabaseMapper.java @@ -27,8 +27,10 @@ public PolarisDatabaseMapper(final String catalogName) { */ @Override public DatabaseInfo toInfo(final PolarisDatabaseEntity entity) { + final AuditMapper mapper = new AuditMapper(); final DatabaseInfo databaseInfo = DatabaseInfo.builder() .name(QualifiedName.ofDatabase(catalogName, entity.getDbName())) + .auditInfo(mapper.toInfo(entity.getAudit())) .uri(entity.getLocation()) .build(); return databaseInfo; diff --git a/metacat-connector-polaris/src/test/java/com/netflix/metacat/connector/polaris/PolarisConnectorDatabaseServiceTest.java b/metacat-connector-polaris/src/test/java/com/netflix/metacat/connector/polaris/PolarisConnectorDatabaseServiceTest.java index e46fda162..9090482c3 100644 --- a/metacat-connector-polaris/src/test/java/com/netflix/metacat/connector/polaris/PolarisConnectorDatabaseServiceTest.java +++ b/metacat-connector-polaris/src/test/java/com/netflix/metacat/connector/polaris/PolarisConnectorDatabaseServiceTest.java @@ -8,6 +8,7 @@ import com.netflix.metacat.common.server.connectors.ConnectorRequestContext; import com.netflix.metacat.common.server.connectors.exception.DatabaseAlreadyExistsException; import com.netflix.metacat.common.server.connectors.exception.DatabaseNotFoundException; +import com.netflix.metacat.common.server.connectors.model.AuditInfo; import com.netflix.metacat.common.server.connectors.model.DatabaseInfo; import com.netflix.metacat.common.server.properties.DefaultConfigImpl; import com.netflix.metacat.common.server.properties.MetacatProperties; @@ -27,6 +28,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import spock.lang.Shared; +import java.util.Date; import java.util.List; @@ -122,6 +124,24 @@ public void testCreateDbDefaultUri() { Assert.assertEquals(infoExpected, result); } + /** + * Test create database get audit info. + */ + @Test + public void testDbAudit() { + final DatabaseInfo info = DatabaseInfo.builder().name(DB1_QUALIFIED_NAME).build(); + Date date = new Date(); + polarisDBService.create(requestContext, info); + final DatabaseInfo infoExpected = DatabaseInfo.builder() + .name(DB1_QUALIFIED_NAME).uri(DB1_NAME + ".db").build(); + final DatabaseInfo result = polarisDBService.get(requestContext, DB1_QUALIFIED_NAME); + Assert.assertEquals(infoExpected, result); + final AuditInfo auditInfo = result.getAudit(); + Assert.assertNotNull(auditInfo); + Assert.assertTrue(auditInfo.getCreatedDate().after(date)); + Assert.assertEquals(auditInfo.getCreatedDate(), auditInfo.getLastModifiedDate()); + } + /** * Test update database. */