IntegratedPersistenceBase.java

package com.tradecloud.domain.common;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.common.externalreference.ExternalReference;
import com.tradecloud.common.externalreference.IntegratedSystem;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;
import javax.xml.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author ronan
 */
@MappedSuperclass
@XmlTransient
@XmlAccessorType(XmlAccessType.FIELD)
public class IntegratedPersistenceBase extends PersistenceBase {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    @Fetch(value = FetchMode.SELECT)
    @XmlElementWrapper(name = "ExternalReferneces")
    @XmlElement(name = "ExternalRefernece")
    @JsonIgnore
    private Set<ExternalReference> externalReferences = new HashSet<>();

    public IntegratedPersistenceBase() {

    }

    public Set<ExternalReference> getExternalReferences() {
        if (externalReferences == null) {
            externalReferences = new HashSet<ExternalReference>();
        }
        return externalReferences;
    }

    public void setExternalReferences(Set<ExternalReference> externalReferences) {
        getExternalReferences().clear();
        getExternalReferences().addAll(externalReferences);
    }

    public List<ExternalReference> getExternalReferenceList() {
        if (externalReferences == null) {
            externalReferences = new HashSet<ExternalReference>();
        }
        return new ArrayList<ExternalReference>(externalReferences);
    }

    public void addExternalReference(ExternalReference externalReference) {
        getExternalReferences().add(externalReference);
    }

    //    @Transient
    public boolean matchExternalReference(String externalReferenceValue, IntegratedSystem integratedSystem) {
        if (externalReferences != null && getActive()) {
            for (ExternalReference externalReference : externalReferences) {
                if (externalReference.getReferenceValue().equals(externalReferenceValue)
                        && externalReference.getIntegratedSystem().equals(integratedSystem)) {
                    return true;
                }
            }
        }
        return false;
    }

    //    @Transient
    public String getExternalReferenceValue(IntegratedSystem integratedSystem) {
        if (externalReferences != null && getActive()) {
            for (ExternalReference externalReference : externalReferences) {
                if (externalReference.getIntegratedSystem().equals(integratedSystem)) {
                    return externalReference.getReferenceValue();
                }
            }
        }
        return null;
    }
}