/* * Copyright Debezium Authors. * * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ package io.debezium.connector.db2; import java.time.Instant; import java.util.Map; import org.apache.kafka.connect.data.Struct; import io.debezium.data.Envelope; import io.debezium.pipeline.source.spi.EventMetadataProvider; import io.debezium.pipeline.spi.OffsetContext; import io.debezium.schema.DataCollectionId; import io.debezium.util.Collect; class Db2EventMetadataProvider implements EventMetadataProvider { @Override public Instant getEventTimestamp(DataCollectionId source, OffsetContext offset, Object key, Struct value) { if (value == null) { return null; } final Struct sourceInfo = value.getStruct(Envelope.FieldName.SOURCE); if (source == null) { return null; } final Long timestamp = sourceInfo.getInt64(SourceInfo.TIMESTAMP_KEY); return timestamp == null ? null : Instant.ofEpochMilli(timestamp); } @Override public Map<String, String> getEventSourcePosition(DataCollectionId source, OffsetContext offset, Object key, Struct value) { if (value == null) { return null; } final Struct sourceInfo = value.getStruct(Envelope.FieldName.SOURCE); if (source == null) { return null; } return Collect.hashMapOf( SourceInfo.COMMIT_LSN_KEY, sourceInfo.getString(SourceInfo.COMMIT_LSN_KEY), SourceInfo.CHANGE_LSN_KEY, sourceInfo.getString(SourceInfo.CHANGE_LSN_KEY)); } @Override public String getTransactionId(DataCollectionId source, OffsetContext offset, Object key, Struct value) { if (value == null) { return null; } final Struct sourceInfo = value.getStruct(Envelope.FieldName.SOURCE); if (source == null) { return null; } return sourceInfo.getString(SourceInfo.COMMIT_LSN_KEY); } }