RFQOrganisationalUnitSupplier.java

package com.tradecloud.domain.model.requestforquote;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.supplier.OrganisationalUnitSupplier;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlIDREF;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@Entity
@Table(name = "rfqorganisationalunitsupplier")
public class RFQOrganisationalUnitSupplier extends PersistenceBase {

    @XmlElementWrapper(name = "RequestForQuotes")
    @XmlElement(name = "RequestForQuote")
    @ManyToOne
    protected RequestForQuote requestForQuote;

    @ManyToOne
    @XmlIDREF
    @JsonIgnore
    private OrganisationalUnitSupplier organisationalUnitSupplier;

    @NotNull(message = "State is required")
    @Enumerated(EnumType.STRING)
    private RFQOrgsanisationalUnitSupplierState state = RFQOrgsanisationalUnitSupplierState.NOT_OPENED;

    @XmlElementWrapper(name = "supplierStyles")
    @XmlElement(name = "SupplierStyle")
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinTable(name = "rfqorganisationalunitsupplier_supplierStyles", joinColumns = {@JoinColumn(name = "rfqorganisationalunitsupplier_id")},
            inverseJoinColumns = {@JoinColumn(name = "supplierStyles_id")})
    private List<SupplierStyle> supplierStyles;

    private int position;

    private Long orderId;

    public RFQOrganisationalUnitSupplier() {
    }

    public RFQOrganisationalUnitSupplier(RequestForQuote requestForQuote, OrganisationalUnitSupplier organisationalUnitSupplier) {
        this.requestForQuote = requestForQuote;
        this.organisationalUnitSupplier = organisationalUnitSupplier;
        this.supplierStyles = new ArrayList<>();
    }

    public OrganisationalUnitSupplier getOrganisationalUnitSupplier() {
        return organisationalUnitSupplier;
    }

    public void setOrganisationalUnitSupplier(OrganisationalUnitSupplier organisationalUnitSupplier) {
        this.organisationalUnitSupplier = organisationalUnitSupplier;
    }

    public RFQOrgsanisationalUnitSupplierState getState() {
        return state;
    }

    public void setState(RFQOrgsanisationalUnitSupplierState state) {
        this.state = state;
    }

    public RequestForQuote getRequestForQuote() {
        return requestForQuote;
    }

    public void setRequestForQuote(RequestForQuote requestForQuote) {
        this.requestForQuote = requestForQuote;
    }

    public List<SupplierStyle> getSupplierStyles() {
        if (supplierStyles == null) {
            supplierStyles = new ArrayList<>();
        }
        return supplierStyles;
    }

    public void setSupplierStyles(List<SupplierStyle> supplierStyles) {
        this.supplierStyles = supplierStyles;
    }

    public String getNameAndOrgNameAndExternalReference() {
        if (organisationalUnitSupplier != null) {
            String supplierName = organisationalUnitSupplier.getSupplier().getName();
            String orgUnitName = organisationalUnitSupplier.getName();
            String externalReference = organisationalUnitSupplier.getSupplier().getExternalReference();

            return supplierName + " - " + orgUnitName + " - " + externalReference;
        }
        return null;
    }

    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
    }

    public Long getOrderId() {
        return orderId;
    }

    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        RFQOrganisationalUnitSupplier that = (RFQOrganisationalUnitSupplier) o;
        return Objects.equals(requestForQuote, that.requestForQuote) && Objects.equals(organisationalUnitSupplier, that.organisationalUnitSupplier);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), requestForQuote, organisationalUnitSupplier);
    }

    public void addSupplierStyle(SupplierStyle supplierStyle) {
        supplierStyle.setRfqOrganisationalUnitSupplier(this);
        this.getSupplierStyles().add(supplierStyle);
    }
}