FinalDestination.java

package com.tradecloud.domain.place;

import com.tradecloud.domain.common.IntegratedStaticDataEntityBase;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.party.base.Address;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Final destination locations.
 */
@Entity
@Table(name = "FinalDestination")
@XmlRootElement(name = "FinalDestination")
@NamedQueries({@NamedQuery(name = "findByOrgUnit", query = "from FinalDestination fd left join fetch fd.organisationalUnits where fd.id=:id")})
public class FinalDestination extends IntegratedStaticDataEntityBase {

    private static final long serialVersionUID = 1L;

    private boolean exportPlace;

    private boolean importPlace;

    @OneToMany(fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    private Set<OrganisationalUnit> organisationalUnits = new HashSet<OrganisationalUnit>();

    @OneToOne(fetch = FetchType.LAZY)
    @XmlElement(name = "ClearingDepot")
    private Depot clearingDepot;

    @OneToOne(fetch = FetchType.LAZY)
    @ForeignKey(name = "fk_clearingagent")
    private ServiceProvider clearingAgent;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @ForeignKey(name = "fk_deliveryaddress")
    private Address deliveryAddress;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private PlaceOfDischarge placeOfDischarge;

    @Enumerated(EnumType.STRING)
    private WarehouseType warehouseType = WarehouseType.GENERAL;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    private List<Store> stores;

    @ManyToOne
    private Region region;

    private boolean regionMaster;

    public FinalDestination() {
    }

    public FinalDestination(String code, String name) {
        setCode(code);
        setName(name);
        setActive(true);
    }

    public FinalDestination(String code, String name, Set<OrganisationalUnit> organisationalUnits) {
        setCode(code);
        setName(name);
        setOrganisationalUnits(organisationalUnits);
    }

    public FinalDestination(String code, String name, Set<OrganisationalUnit> organisationalUnits, Address deliveryAddress) {
        setCode(code);
        setName(name);
        setOrganisationalUnits(organisationalUnits);
        setDeliveryAddress(deliveryAddress);
    }

    public boolean isExportPlace() {
        return exportPlace;
    }

    public void setExportPlace(boolean exportPlace) {
        this.exportPlace = exportPlace;
    }

    public boolean isImportPlace() {
        return importPlace;
    }

    public void setImportPlace(boolean importPlace) {
        this.importPlace = importPlace;
    }

    public Set<OrganisationalUnit> getOrganisationalUnits() {
        return organisationalUnits;
    }

    public List<OrganisationalUnit> getOrganisationalUnitList() {
        return new ArrayList<OrganisationalUnit>(organisationalUnits);
    }

    public Depot getClearingDepot() {
        return clearingDepot;
    }

    public void setClearingDepot(Depot clearingDepot) {
        this.clearingDepot = clearingDepot;
    }

    public ServiceProvider getClearingAgent() {
        return clearingAgent;
    }

    public void setClearingAgent(ServiceProvider clearingAgent) {
        this.clearingAgent = clearingAgent;
    }

    public void setOrganisationalUnits(Set<OrganisationalUnit> organisationalUnits) {
        this.organisationalUnits = organisationalUnits;
    }

    public void setOrganisationalUnitList(List<OrganisationalUnit> organisationalUnits) {
        this.organisationalUnits = new HashSet<OrganisationalUnit>(organisationalUnits);
    }

    public Address getDeliveryAddress() {
        return deliveryAddress;
    }

    public void setDeliveryAddress(Address deliveryAddress) {
        this.deliveryAddress = deliveryAddress;
    }

    public PlaceOfDischarge getPlaceOfDischarge() {
        return placeOfDischarge;
    }

    public void setPlaceOfDischarge(PlaceOfDischarge placeOfDischarge) {
        this.placeOfDischarge = placeOfDischarge;
    }

    public WarehouseType getWarehouseType() {
        return warehouseType;
    }

    public void setWarehouseType(WarehouseType warehouseType) {
        this.warehouseType = warehouseType;
    }

    public String getOrganisationalUnitSummary() {
        StringBuilder builder = new StringBuilder();
        for (OrganisationalUnit orgUnit : getOrganisationalUnitList()) {
            if (builder.length() > 0) {
                builder.append(",");
            }
            builder.append(orgUnit.getCode());
        }
        return builder.toString();
    }

    public List<Store> getStores() {
        return stores;
    }

    public void setStores(List<Store> stores) {
        this.stores = stores;
    }

    public Region getRegion() {
        return region;
    }

    public void setRegion(Region region) {
        this.region = region;
    }

    public boolean isRegionMaster() {
        return regionMaster;
    }

    public void setRegionMaster(boolean regionMaster) {
        this.regionMaster = regionMaster;
    }
}