SupplierStyle.java

package com.tradecloud.domain.model.requestforquote;

import com.tradecloud.common.base.PersistenceBase;

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

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

    @ManyToOne
    private RFQStyle rfqStyle;

    @ManyToOne
    private RFQOrganisationalUnitSupplier rfqOrganisationalUnitSupplier;

    @XmlElementWrapper(name = "SupplierStyle")
    @XmlElement(name = "SupplierStyle")
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinTable(name = "SupplierStyle_rfqproduct", joinColumns = {@JoinColumn(name = "SupplierStyle_id")},
            inverseJoinColumns = {@JoinColumn(name = "rfqproduct_id")})
    private List<RFQProduct> rfqProducts=new ArrayList<>();

    public SupplierStyle() {
    }

    public SupplierStyle(RFQStyle rfqStyle, RFQOrganisationalUnitSupplier rfqOrganisationalUnitSupplier) {
        this.rfqStyle = rfqStyle;
        this.rfqOrganisationalUnitSupplier = rfqOrganisationalUnitSupplier;
    }

    public RFQStyle getRfqStyle() {
        return rfqStyle;
    }

    public void setRfqStyle(RFQStyle rfqStyle) {
        this.rfqStyle = rfqStyle;
    }

    public RFQOrganisationalUnitSupplier getRfqOrganisationalUnitSupplier() {
        return rfqOrganisationalUnitSupplier;
    }

    public void setRfqOrganisationalUnitSupplier(RFQOrganisationalUnitSupplier rfqOrganisationalUnitSupplier) {
        this.rfqOrganisationalUnitSupplier = rfqOrganisationalUnitSupplier;
    }

    public List<RFQProduct> getRfqProducts() {
        return rfqProducts;
    }

    public void setRfqProducts(List<RFQProduct> rfqProducts) {
        this.rfqProducts = rfqProducts;
    }

    @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;
        SupplierStyle that = (SupplierStyle) o;
        return Objects.equals(rfqStyle, that.rfqStyle) && Objects.equals(rfqOrganisationalUnitSupplier, that.rfqOrganisationalUnitSupplier);
    }

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

    public boolean isProductLevel() {
        return false;
    }

    public boolean isStyleLevel() {
        return true;
    }

    public void addRfqProduct(RFQProduct rfqProduct1) {
        rfqProduct1.setSupplierStyle(this);
        this.getRfqProducts().add(rfqProduct1);
    }
}