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

nl.vpro.domain.classification.Term Maven / Gradle / Ivy

Go to download

The classes needed for the 'classification' service used in POMS. This os based on ClassificationScheme xml's as provided by EBU. It at the moment is only used for genres, but it could in principle accommodate other types of classification based on a fixed list.

There is a newer version: 8.3.1
Show newest version
/*
 * Copyright (C) 2014 Licensed under the Apache License, Version 2.0
 * VPRO The Netherlands
 */
package nl.vpro.domain.classification;

import lombok.Getter;
import lombok.Setter;

import java.time.LocalDate;
import java.util.*;

import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import nl.vpro.xml.bind.LocalDateXmlAdapter;
import nl.vpro.xml.bind.ZeroOneBooleanAdapter;

/**
 * @author Roelof Jan Koekoek
 * @since 3.0
 */
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(propOrder = {
    "localizedName",
    "localizedDefinition",
    "references",
    "changeVersionDate",
    "firstVersionDate",
    "validityFlag",
    "terms"
})
public class Term implements Comparable, TermContainer {

    @XmlAttribute(name = "termID")
    protected String termId;


    @XmlElement(name = "Name")
    private List localizedName;

    @XmlElement(name = "Definition")
    private List localizedDefinition;

    @XmlElement(name = "Term")
    private List terms;

    @XmlElement(name = "Reference")
    private List references;

    @XmlElement(name = "ChangeVersionDate")
    @XmlJavaTypeAdapter(LocalDateXmlAdapter.class)
    @Getter
    @Setter
    private LocalDate changeVersionDate;

    @XmlElement(name = "FirstVersionDate")
    @XmlJavaTypeAdapter(LocalDateXmlAdapter.class)
    @Getter
    @Setter
    private LocalDate firstVersionDate;

    @XmlElement(name = "ValidityFlag")
    @XmlJavaTypeAdapter(ZeroOneBooleanAdapter.class)
    @Getter
    @Setter
    private Boolean validityFlag;


    private Term parent;

    public Term(String id) {
        this.termId = id;
    }
    public Term() {
        // jaxb
    }

    public String getTermId() {
        return termId;
    }


    public String getName() {
        return getName(Locale.getDefault());
    }
    public String getName(Locale locale) {
        return LocalizedString.get(locale, localizedName);
    }

    public String getDefinition() {
        return getDefinition(Locale.getDefault());
    }

    public String getDefinition(Locale locale) {
        return LocalizedString.get(locale, localizedDefinition);
    }

    public List getReferences() {
        if(references == null) {
            references = new ArrayList<>();
        }
        return references;
    }

    public void setReferences(List references) {
        this.references = references;
    }

    public boolean isTopTerm() {
        return parent == null || parent.getTermId().equals("3.0");
    }


    public Term getParent() {
        return parent;
    }

    public void setParent(Term parent) {
        if (this.parent != null) {
            throw new IllegalStateException();
        }
        this.parent = parent;
    }

    @Override
    public List getTerms() {
        if (terms == null) {
            terms = new ArrayList<>();
        }
        return Collections.unmodifiableList(terms);
    }

    void addTerm(Term term) {
        if (term == null) {
            terms = new ArrayList<>();
        }
        terms.add(term);
        Collections.sort(terms);
    }


    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Term{");
        sb.append("termId='").append(termId).append('\'');
        sb.append(", name='").append(getName()).append('\'');
        sb.append('}');
        return sb.toString();
    }

    @Override
    public int compareTo(Term o) {
        return this.getTermId().compareTo(o.getTermId());
    }

    @Override
    public boolean equals(Object o) {
        if(this == o) {
            return true;
        }
        if(o == null || getClass() != o.getClass()) {
            return false;
        }

        Term term = (Term)o;

        if(!termId.equals(term.termId)) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        return termId.hashCode();
    }

    void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
        if(parent instanceof Term) {
            this.parent = (Term)parent;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy