Group.java

package com.tradecloud.domain.autoemail;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.party.Employee;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
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.XmlRootElement;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Group")
@Entity
@Table(name = "autoemailgroup")
public class Group extends PersistenceBase implements Comparable<Group> {

    private static final long serialVersionUID = 1L;

    private String name;

    @ManyToOne
    @ForeignKey(name = "fk_buyer")
    private Employee buyer;

    @ManyToOne
    @ForeignKey(name = "fk_organisationalunit")
    private OrganisationalUnit organisationalUnit;

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "autoemailgroup_emailaddresses", joinColumns = {@JoinColumn(name = "autoemailgroup_id", unique = false)})
    @Column(name = "emailAddress")
    @ForeignKey(name = "fk_autoemailgroup")
    @Fetch(value = FetchMode.SUBSELECT)
    private Set<String> emailAddresses = new HashSet<String>();

    public Group() {
    }

    public Group(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<String> getEmailAddresses() {
        return emailAddresses;
    }

    public void setEmailAddresses(Set<String> emailAddresses) {
        this.emailAddresses = emailAddresses;
    }

    public List<String> getEmailAddressesAsList() {
        return new ArrayList<String>(emailAddresses);
    }

    @Override
    public int compareTo(Group o) {
        return getName().compareToIgnoreCase(o.getName());
    }

    @Override
    public String toString() {
        return name;
    }

    public Employee getBuyer() {
        return buyer;
    }

    public void setBuyer(Employee buyer) {
        this.buyer = buyer;
    }

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

    public void setOrganisationalUnit(OrganisationalUnit organisationalUnit) {
        this.organisationalUnit = organisationalUnit;
    }
}