com.microsoft.azure.cosmos.connectors.cassandra.uploadagent.storeprovider.QueueItem Maven / Gradle / Ivy
/*
* Copyright (c) Microsoft Corporation. All rights reserved.
*/
package com.microsoft.azure.cosmos.connectors.cassandra.uploadagent.storeprovider;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.time.Duration;
import java.time.Instant;
import java.util.UUID;
public class QueueItem {
public static QueueItem create(T item, Duration initialVisibilityDelay) {
return new QueueItem(item, initialVisibilityDelay);
}
private QueueItem(T item, Duration initialVisibilityDelay) {
this.id = UUID.randomUUID().toString();
this.item = item;
this.partitionKey = UUID.randomUUID().toString();
this.insertionTime = Instant.now();
if (initialVisibilityDelay == null || initialVisibilityDelay.toMillis() == 0) {
this.nextVisibleTime = this.insertionTime;
} else {
this.nextVisibleTime = this.insertionTime.plus(initialVisibilityDelay);
}
}
private QueueItem() {
}
/**
* id of queue item.
*/
@JsonProperty("id")
private String id;
/**
* the number of times this message has been dequeued.
*/
@JsonProperty("dequeueCount")
private int dequeueCount;
/**
* the time that the message will next be visible.
*/
@JsonProperty("nextVisibleTime")
@JsonSerialize(using = InstantSerialization.InstantSerializer.class)
@JsonDeserialize(using = InstantSerialization.InstantDeserializer.class)
private Instant nextVisibleTime;
/**
* the time that the message was added to the queue.
*/
@JsonProperty("insertionTime")
@JsonSerialize(using = InstantSerialization.InstantSerializer.class)
@JsonDeserialize(using = InstantSerialization.InstantDeserializer.class)
private Instant insertionTime;
/**
* the queue item.
*/
@JsonProperty("item")
private T item;
/**
* the ETag.
*/
@JsonProperty("_etag")
private String eTag;
/**
* the partition key of queue item.
*/
@JsonProperty("partitionKey")
private String partitionKey;
public String getId() {
return id;
}
public int getDequeueCount() {
return dequeueCount;
}
public Instant getNextVisibleTime() {
return nextVisibleTime;
}
public Instant getInsertionTime() {
return insertionTime;
}
public T getItem() {
return item;
}
public String getETag() {
return eTag;
}
public String getPartitionKey() {
return partitionKey;
}
}