import static java.util.Objects.requireNonNull;
import static com.aa.cleanwithus.util.ToStrings.toStringBuilder;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;
import javax.validation.constraints.NotNull;
import org.hibernate.envers.Audited;
import com.aa.cleanwithus.station.Station;
@Entity
@Table(
name = "provider_station",
uniqueConstraints = @UniqueConstraint(
name = "uq_provider_station",
columnNames = {"ps_provider", "ps_station"}
)
)
@NamedQuery(
name = "ProviderStation.findProviderStation",
query = "from ProviderStation ps " +
"where ps.provider = :provider " +
" and ps.station = :station"
)
@SequenceGenerator(name = "provider_station_seq", sequenceName = "provider_station_seq")
@Audited
public class ProviderStation implements Serializable {
private static final long serialVersionUID = -4853563333444034742L;
@Id
@GeneratedValue(generator = "provider_station_seq")
@Column(name = "provider_station_id")
private Long id;
@Version
@Column(name = "ps_version", nullable = false)
private Integer version;
@ManyToOne(optional = false)
@JoinColumn(name = "ps_provider", nullable = false)
@NotNull
private Provider provider;
@ManyToOne(optional = false)
@JoinColumn(name = "ps_station", nullable = false)
@NotNull
private Station station;
@Column(name = "ps_active", nullable = false)
@NotNull
private Boolean active;
@ElementCollection
@CollectionTable(
name = "provider_station_jobtype",
joinColumns = @JoinColumn(name = "psj_ps_id", nullable = false)
)
private Set<ProviderStationJobType> jobTypes = new HashSet<>();
public ProviderStation(){}
public ProviderStation(
Provider provider,
Station station,
Boolean active
){
this.provider = requireNonNull(provider);
this.station = requireNonNull(station);
this.active = requireNonNull(active);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof ProviderStation)) return false;
ProviderStation that = (ProviderStation)obj;
return
Objects.equals(this.getProvider(), that.getProvider()) &&
Objects.equals(this.getStation(), that.getStation());
}
@Override
public int hashCode() {
return Objects.hash(getProvider(), getStation());
}
@Override
public String toString() {
return toStringBuilder(this)
.append("id", getId())
.append("version", getVersion())
.append("provider", getProvider())
.append("station", getStation())
.append("active", isActive())
.append("jobTypes", getJobTypes())
.build();
}
public Optional<Long> getId() {
return Optional.ofNullable(id);
}
void setId(Optional<Long> id) {
this.id = id.orElse(null);
}
public Optional<Integer> getVersion() {
return Optional.ofNullable(version);
}
void setVersion(Optional<Integer> version) {
this.version = version.orElse(null);
}
public Provider getProvider() {
return provider;
}
public void setProvider(Provider provider) {
this.provider = requireNonNull(provider);
}
public Station getStation() {
return station;
}
public void setStation(Station station) {
this.station = requireNonNull(station);
}
public Boolean isActive() {
return active;
}
public void setActive(Boolean active) {
this.active = requireNonNull(active);
}
public Set<ProviderStationJobType> getJobTypes() {
return jobTypes;
}
}