package de.rwth.idsg.bikeman.domain;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Type;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Set;
@Entity
@Table(name = "T_STATION",
indexes = {
@Index(columnList="address_id", unique = true) })
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@TableGenerator(name="station_gen", initialValue=0, allocationSize=1)
@EqualsAndHashCode(callSuper = false, of = {"stationId", "manufacturerId"})
@ToString(includeFieldNames = true, exclude = {"stationSlots"})
@Getter
@Setter
public class Station extends AbstractTimestampClass implements Serializable {
private static final long serialVersionUID = 4263316848138899690L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "station_gen")
@Column(name = "station_id")
private long stationId;
@Column(name = "manufacturer_id", updatable = false)
private String manufacturerId;
@Column(name = "name")
private String name;
@Column(name = "endpoint_address")
private String endpointAddress;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id")
private Address address;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "station", orphanRemoval = true)
private Set<StationSlot> stationSlots;
@Column(name = "location_latitude", scale = 18, precision = 24)
private BigDecimal locationLatitude;
@Column(name = "location_longitude", scale = 18, precision = 24)
private BigDecimal locationLongitude;
@Lob
@Type(type = "org.hibernate.type.TextType")
@Column(name = "note")
private String note;
@Column(name = "state")
@Enumerated(EnumType.STRING)
private OperationState state = OperationState.INOPERATIVE;
@Column(name = "firmware_version")
private String firmwareVersion;
@Column(name = "error_code")
private String errorCode;
@Column(name = "error_info")
private String errorInfo;
}