All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy