TradeAgreements.java

package com.tradecloud.domain.configuration;

/**
 * Created by ds on 2015/07/16.
 */

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.duties.TradeAgreement;
import com.tradecloud.domain.place.Country;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "tradeagreements")
@XmlRootElement(name = "TradeAgreements")
public class TradeAgreements extends PersistenceBase {

    private static final long serialVersionUID = 1L;

    /**
     * The applicable trade agreement.
     */
    @XmlAttribute
    @Enumerated(value = EnumType.STRING)
    @NotNull
    private TradeAgreement tradeAgreement;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "tradeagreements_countries",
            joinColumns = @JoinColumn(name = "tradeagreement_id"),
            inverseJoinColumns = @JoinColumn(name = "country_code"))
    @ForeignKey(name = "fk_tradeagreements", inverseName = "fk_country_code")
    @XmlElementWrapper(name = "Countries")
    @XmlElement(name = "Country")
    private Set<Country> countries = new HashSet<Country>();

    @XmlAttribute
    @NotNull
    private boolean active;

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    public Set<Country> getCountries() {
        return countries;
    }

    public void setCountries(Set<Country> countries) {
        this.countries = countries;
    }

    public TradeAgreement getTradeAgreement() {
        return tradeAgreement;
    }

    public void setTradeAgreement(TradeAgreement tradeAgreement) {
        this.tradeAgreement = tradeAgreement;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof TradeAgreements)) return false;
        if (!super.equals(o)) return false;

        TradeAgreements that = (TradeAgreements) o;

        if (isActive() != that.isActive()) return false;
        if (getTradeAgreement() != that.getTradeAgreement()) return false;
        return getCountries().equals(that.getCountries());

    }

    @Override
    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + getTradeAgreement().hashCode();
        result = 31 * result + getCountries().hashCode();
        result = 31 * result + (isActive() ? 1 : 0);
        return result;
    }
}