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

com.hubspot.blazar.zookeeper.QueueItem Maven / Gradle / Ivy

The newest version!
package com.hubspot.blazar.zookeeper;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.hubspot.blazar.zookeeper.QueueItem.QueueItemDeserializer;

import java.io.IOException;

@JsonDeserialize(using = QueueItemDeserializer.class)
public class QueueItem {
  private final Class type;
  private final Object item;
  private final long timestamp;

  public QueueItem(Object item) {
    this(item.getClass(), item, System.currentTimeMillis());
  }

  private QueueItem(Class type, Object item, long timestamp) {
    this.type = type;
    this.item = item;
    this.timestamp = timestamp;
  }

  public Class getType() {
    return type;
  }

  public Object getItem() {
    return item;
  }

  public long getTimestamp() {
    return timestamp;
  }

  static class QueueItemDeserializer extends StdDeserializer {

    public QueueItemDeserializer() {
      super(QueueItem.class);
    }

    @Override
    public QueueItem deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
      GenericQueueItem genericQueueItem = p.readValueAs(GenericQueueItem.class);

      Object item = p.getCodec().treeToValue(genericQueueItem.getItem(), genericQueueItem.getType());
      return new QueueItem(genericQueueItem.getType(), item, genericQueueItem.getTimestamp());
    }
  }

  private static class GenericQueueItem {
    private final Class type;
    private final JsonNode item;
    private final long timestamp;

    @JsonCreator
    public GenericQueueItem(@JsonProperty("type") Class type,
                            @JsonProperty("item") JsonNode item,
                            @JsonProperty("timestamp") long timestamp) {
      this.type = type;
      this.item = item;
      this.timestamp = timestamp;
    }

    public Class getType() {
      return type;
    }

    public JsonNode getItem() {
      return item;
    }

    public long getTimestamp() {
      return timestamp;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy