Item.java

package info.textgrid.services.textapi.apiv2;

import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonPropertyOrder({
    "@context",
    "textapiVersion",
    "id",
    "textapiType",
    "revision",
    "created",
    "modified",
    "titles",
    "division",
    "textItemType",
    "languages",
    "contents"
})
public class Item {

    @JsonProperty("@context")
    private String context;

    private String textapiVersion;

    private String id;

    private String textapiType;

    private String revision;

    private String created;

    private String modified;

    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<String> titles = new ArrayList<>();

    // Default division value.
    // Project-specific overrides (e.g. "page" or "chapter") replace this default after construction.
    private String division = "full text";

    private String textItemType;

    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<String> languages = new ArrayList<>();

    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<Content> contents = new ArrayList<>();

    public String getContext() {
        return context;
    }

    public Item setContext(String context) {
        this.context = context;
        return this;
    }

    public String getTextapiVersion() {
        return textapiVersion;
    }

    public Item setTextapiVersion(String textapiVersion) {
        this.textapiVersion = textapiVersion;
        return this;
    }

    public String getId() {
        return id;
    }

    public Item setId(String id) {
        this.id = id;
        return this;
    }

    public String getTextapiType() {
        return textapiType;
    }

    public Item setTextapiType(String textapiType) {
        this.textapiType = textapiType;
        return this;
    }

    public String getRevision() {
        return revision;
    }

    public Item setRevision(String revision) {
        this.revision = revision;
        return this;
    }

    public String getCreated() {
        return created;
    }

    public Item setCreated(String created) {
        this.created = created;
        return this;
    }

    public String getModified() {
        return modified;
    }

    public Item setModified(String modified) {
        this.modified = modified;
        return this;
    }

    public List<String> getTitles() {
        return titles;
    }

    public Item setTitles(List<String> titles) {
        this.titles = titles;
        return this;
    }

    public Item addTitle(String title) {
        this.titles.add(title);
        return this;
    }

    public String getDivision() {
        // Safety net: the division field must never be empty in any response,
        // so fall back to the default when null or blank.
        return division != null && !division.isBlank() ? division : "full text";
    }

    public Item setDivision(String division) {
        this.division = division;
        return this;
    }

    public String getTextItemType() {
        return textItemType;
    }

    public Item setTextItemType(String textItemType) {
        this.textItemType = textItemType;
        return this;
    }

    public List<String> getLanguages() {
        return languages;
    }

    public Item setLanguages(List<String> languages) {
        this.languages = languages;
        return this;
    }

    public Item addLanguage(String language) {
        this.languages.add(language);
        return this;
    }

    public List<Content> getContents() {
        return contents;
    }

    public Item setContents(List<Content> contents) {
        this.contents = contents;
        return this;
    }

    public Item addContent(Content content) {
        this.contents.add(content);
        return this;
    }
}