StateClientConfig.java

package com.tradecloud.domain.configuration;

import com.tradecloud.common.base.PersistenceBase;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * A holder for state client configuration values.
 * <p>
 * <strong>Do not eager load any of the member state collections</strong>.
 */
@Entity
@Table(name = "stateclientconfig")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "StateClientConfig")
public class StateClientConfig extends PersistenceBase {

    private static final long serialVersionUID = 1L;

    @XmlElementWrapper(name = "ItemStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_itemstatemetadata")
    @JoinTable(name = "stateclientconfig_itemstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<LineItemStateMetaData> lineItemStatesMetaData;

    @XmlElementWrapper(name = "ProductStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_productstatemetadata")
    @JoinTable(name = "stateclientconfig_productstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ProductStateMetaData> productStatesMetaData;

    @XmlElementWrapper(name = "OrderStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_orderstatemetadata")
    @JoinTable(name = "stateclientconfig_orderstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<OrderStateMetaData> orderStatesMetaData;

    @XmlElementWrapper(name = "ConsignmentStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_consignmentstatemetadata")
    @JoinTable(name = "stateclientconfig_consignmentstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ConsignmentStateMetaData> consignmentStatesMetaData;

    @XmlElementWrapper(name = "ShipmentStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_shipmentstatemetadata")
    @JoinTable(name = "stateclientconfig_shipmentstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ShipmentStateMetaData> shipmentStatesMetaData;

    @XmlElementWrapper(name = "ExportShipmentStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_exportstateclientconfig", inverseName = "fk_exportshipmentstatemetadata")
    @JoinTable(name = "stateclientconfig_exportshipmentstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ExportShipmentStateMetaData> exportShipmentStatesMetaData;

    @XmlElementWrapper(name = "CommercialInvoiceStateMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_documentstatemetadata")
    @JoinTable(name = "stateclientconfig_CommercialInvoiceStateMetaData",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<CommercialInvoiceStateMetaData> commercialInvoiceStateMetaData;

    @XmlElementWrapper(name = "ServiceProviderInvoiceStateMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_documentstatemetadata")
    @JoinTable(name = "stateclientconfig_ServiceProviderInvoiceStateMetaData",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ServiceProviderInvoiceStateMetaData> serviceProviderInvoiceStateMetaData;

    @XmlElementWrapper(name = "CommercialCreditNoteStateMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_documentstatemetadata")
    @JoinTable(name = "stateclientconfig_CommercialCreditNoteStateMetaData",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<CommercialCreditNoteStateMetaData> commercialCreditNoteStateMetaData;

    @XmlElementWrapper(name = "ServiceProviderInvoiceStateMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_documentstatemetadata")
    @JoinTable(name = "stateclientconfig_ServiceProviderCreditNoteStateMetaData",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ServiceProviderCreditNoteStateMetaData> serviceProviderCreditNoteStateMetaData;

    @XmlElementWrapper(name = "ContainerStatesMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_containerstatemetadata")
    @JoinTable(name = "stateclientconfig_containerstatesmetadata",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<ContainerStateMetaData> containerStatesMetaData;

    @XmlElementWrapper(name = "CartonStateMetaData")
    @OneToMany(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_stateclientconfig", inverseName = "fk_cartonStateMetaData")
    @JoinTable(name = "stateclientconfig_cartonStateMetaData",
            joinColumns = {@JoinColumn(name = "config_id", unique = false)},
            inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
    private Set<CartonStateMetaData> cartonStateMetaData;

    public Set<LineItemStateMetaData> getLineItemStatesMetaData() {
        return lineItemStatesMetaData;
    }

    public void setLineItemStatesMetaData(Set<LineItemStateMetaData> lineItemStatesMetaData) {
        this.lineItemStatesMetaData = lineItemStatesMetaData;
    }

    public Set<LineItemStateMetaData> getFullLineItemStatesMetaData() {
        Set<LineItemStateMetaData> lineItemStateMetaData = lineItemStatesMetaData.stream().filter(lt -> lt.getType() ==
                LineItemStateMetaData.Type.FULL).collect(Collectors.toSet());
        return lineItemStateMetaData;
    }

    public Set<LineItemStateMetaData> getElcLineItemStatesMetaData() {
        Set<LineItemStateMetaData> lineItemStateMetaData = lineItemStatesMetaData.stream().filter(lt -> lt.getType() ==
                LineItemStateMetaData.Type.ELC).collect(Collectors.toSet());
        return lineItemStateMetaData;
    }

    public Set<LineItemStateMetaData> getCartonItemStatesMetaData() {
        if (lineItemStatesMetaData != null) {
            Set<LineItemStateMetaData> lineItemStateMetaData = lineItemStatesMetaData.stream().filter(lt -> lt.getType() ==
                    LineItemStateMetaData.Type.CARTON_ITEM).collect(Collectors.toSet());
            return lineItemStateMetaData;
        }
        return null;
    }

    public Set<ProductStateMetaData> getProductStatesMetaData() {
        return productStatesMetaData;
    }

    public Set<ProductStateMetaData> getFullProductStatesMetaData() {
        Set<ProductStateMetaData> productStateMetaDataSet = productStatesMetaData.stream().filter(pt -> pt.getType() ==
                ProductStateMetaData.Type.FULL).collect(Collectors.toSet());
        return productStateMetaDataSet;
    }

    public Set<ProductStateMetaData> getElcProductStatesMetaData() {
        Set<ProductStateMetaData> productStateMetaDataSet = productStatesMetaData.stream().filter(pt -> pt.getType() ==
                ProductStateMetaData.Type.ELC).collect(Collectors.toSet());
        return productStateMetaDataSet;
    }

    public void setProductStatesMetaData(Set<ProductStateMetaData> productStatesMetaData) {
        this.productStatesMetaData = productStatesMetaData;
    }

    public Set<OrderStateMetaData> getOrderStatesMetaData() {
        return orderStatesMetaData;
    }

    public Set<OrderStateMetaData> getElcOrderStateMetaData() {
        Set<OrderStateMetaData> productStateMetaDataSet = orderStatesMetaData.stream().filter(pt -> pt.getType() ==
                OrderStateMetaData.Type.ELC).collect(Collectors.toSet());
        return productStateMetaDataSet;
    }

    public Set<OrderStateMetaData> getFullOrderStateMetaData() {
        Set<OrderStateMetaData> productStateMetaDataSet = orderStatesMetaData.stream().filter(pt -> pt.getType() ==
                OrderStateMetaData.Type.FULL).collect(Collectors.toSet());
        return productStateMetaDataSet;
    }

    public void setOrderStatesMetaData(Set<OrderStateMetaData> orderStatesMetaData) {
        this.orderStatesMetaData = orderStatesMetaData;
    }

    public Set<ConsignmentStateMetaData> getConsignmentStatesMetaData() {
        return consignmentStatesMetaData;
    }

    public void setConsignmentStatesMetaData(Set<ConsignmentStateMetaData> consignmentStatesMetaData) {
        this.consignmentStatesMetaData = consignmentStatesMetaData;
    }

    public Set<ShipmentStateMetaData> getShipmentStatesMetaData() {
        return shipmentStatesMetaData;
    }

    public void setShipmentStatesMetaData(Set<ShipmentStateMetaData> shipmentStatesMetaData) {
        this.shipmentStatesMetaData = shipmentStatesMetaData;
    }

    public Set<ExportShipmentStateMetaData> getExportShipmentStatesMetaData() {
        return exportShipmentStatesMetaData;
    }

    public void setExportShipmentStatesMetaData(Set<ExportShipmentStateMetaData> shipmentStatesMetaData) {
        this.exportShipmentStatesMetaData = shipmentStatesMetaData;
    }

    public Set<CommercialInvoiceStateMetaData> getCommercialInvoiceStateMetaData() {
        return commercialInvoiceStateMetaData;
    }

    public void setCommercialInvoiceStateMetaData(Set<CommercialInvoiceStateMetaData> commercialInvoiceStateMetaData) {
        this.commercialInvoiceStateMetaData = commercialInvoiceStateMetaData;
    }

    public Set<ServiceProviderInvoiceStateMetaData> getServiceProviderInvoiceStateMetaData() {
        return serviceProviderInvoiceStateMetaData;
    }

    public void setServiceProviderInvoiceStateMetaData(Set<ServiceProviderInvoiceStateMetaData> serviceProviderInvoiceStateMetaData) {
        this.serviceProviderInvoiceStateMetaData = serviceProviderInvoiceStateMetaData;
    }

    public Set<CommercialCreditNoteStateMetaData> getCommercialCreditNoteStateMetaData() {
        return commercialCreditNoteStateMetaData;
    }

    public void setCommercialCreditNoteStateMetaData(Set<CommercialCreditNoteStateMetaData> commercialCreditNoteStateMetaData) {
        this.commercialCreditNoteStateMetaData = commercialCreditNoteStateMetaData;
    }

    public Set<ServiceProviderCreditNoteStateMetaData> getServiceProviderCreditNoteStateMetaData() {
        return serviceProviderCreditNoteStateMetaData;
    }

    public void setServiceProviderCreditNoteStateMetaData(Set<ServiceProviderCreditNoteStateMetaData> serviceProviderCreditNoteStateMetaData) {
        this.serviceProviderCreditNoteStateMetaData = serviceProviderCreditNoteStateMetaData;
    }

    public Set<ContainerStateMetaData> getContainerStatesMetaData() {
        return containerStatesMetaData;
    }

    public void setContainerStatesMetaData(Set<ContainerStateMetaData> containerStatesMetaData) {
        this.containerStatesMetaData = containerStatesMetaData;
    }

    public Set<CartonStateMetaData> getCartonStateMetaData() {
        return cartonStateMetaData;
    }

    public void setCartonStateMetaData(Set<CartonStateMetaData> cartonStateMetaData) {
        this.cartonStateMetaData = cartonStateMetaData;
    }
}