CMSgov/dpc-app

View on GitHub
dpc-api/src/main/java/gov/cms/dpc/api/models/CollectionResponse.java

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package gov.cms.dpc.api.models;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import gov.cms.dpc.common.converters.jackson.OffsetDateTimeToStringConverter;
import gov.cms.dpc.common.converters.jackson.StringToOffsetDateTimeConverter;

import java.io.Serializable;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.Collection;

/**
 * Wrapper method for enclosing a given {@link Collection} of {@link T} with some additional metadata.
 * @param <T> - type parameter of encompassed class
 */
public class CollectionResponse<T extends Serializable> implements Serializable {
    public static final long serialVersionUID = 42L;

    private Collection<T> entities;
    private int count;

    @JsonDeserialize(converter = StringToOffsetDateTimeConverter.class)
    @JsonSerialize(converter = OffsetDateTimeToStringConverter.class)
    @JsonProperty(value = "created_at")
    private OffsetDateTime createdAt;

    private CollectionResponse() {
        // Jackson required
    }

    public CollectionResponse(Collection<T> entities) {
        this.entities = entities;
        this.count = entities.size();
        this.createdAt = OffsetDateTime.now(ZoneOffset.UTC);
    }

    public Collection<T> getEntities() {
        return entities;
    }

    public void setEntities(Collection<T> entities) {
        this.entities = entities;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public OffsetDateTime getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(OffsetDateTime createdAt) {
        this.createdAt = createdAt;
    }
}