package org.netomi.tracker.model; import java.io.Serializable; import java.sql.Timestamp; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Version; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; @Entity @NamedQueries({ @NamedQuery(name = Satellite.QUERY_ALL, query = "SELECT s FROM Satellite s"), @NamedQuery(name = Satellite.QUERY_BY_CATALOGID, query = "SELECT s FROM Satellite s WHERE s.catalogNumber = :catalogNumber") }) public class Satellite implements Serializable { /** The serializable UID. */ private static final long serialVersionUID = 20120321L; public static final String QUERY_ALL = "Satellite.queryAll"; public static final String QUERY_BY_CATALOGID = "Satellite.queryByCatalogId"; public enum SatelliteType { SpaceStation, Weather, GPS, } @Id @Column(name = "catalogNumber") private Long catalogNumber; @Column(name = "name", nullable = false) private String commonName; @Column(name = "type", nullable = false) @Enumerated(EnumType.STRING) private SatelliteType type; @Column(name = "designator", nullable = false) private String designator; @Column(name = "country", nullable = false) private String country; @Column(name = "launchDate", nullable = false) @Temporal(TemporalType.TIMESTAMP) private Date launchDate; @Column(name = "launchSite", nullable = false) private String launchSite; @Column(name = "decayDate", nullable = true) @Temporal(TemporalType.TIMESTAMP) private Date decayDate; @Column(name = "period", nullable = false) private double period; @Column(name = "inclination", nullable = false) private double inclination; @Column(name = "apogee", nullable = false) private double apogee; @Column(name = "perigee", nullable = false) private double perigee; @Column(name = "rcs", nullable = false) private double rcs; @Version private Timestamp version; // -------------------------------------------------------------------- // Constructor // -------------------------------------------------------------------- // -------------------------------------------------------------------- // Getter/Setter methods // -------------------------------------------------------------------- public Long getCatalogNumber() { return catalogNumber; } public void setCatalogNumber(Long catalogNumber) { this.catalogNumber = catalogNumber; } public String getCommonName() { return commonName; } public void setCommonName(String commonName) { this.commonName = commonName; } public SatelliteType getType() { return type; } public void setType(SatelliteType type) { this.type = type; } public String getDesignator() { return designator; } public void setDesignator(String designator) { this.designator = designator; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public Date getLaunchDate() { return launchDate; } public void setLaunchDate(Date launchDate) { this.launchDate = launchDate; } public String getLaunchSite() { return launchSite; } public void setLaunchSite(String launchSite) { this.launchSite = launchSite; } public Date getDecayDate() { return decayDate; } public void setDecayDate(Date decayDate) { this.decayDate = decayDate; } public double getPeriod() { return period; } public void setPeriod(double period) { this.period = period; } public double getInclination() { return inclination; } public void setInclination(double inclination) { this.inclination = inclination; } public double getApogee() { return apogee; } public void setApogee(double apogee) { this.apogee = apogee; } public double getPerigee() { return perigee; } public void setPerigee(double perigee) { this.perigee = perigee; } public double getRcs() { return rcs; } public void setRcs(double rcs) { this.rcs = rcs; } public Timestamp getVersion() { return version; } // -------------------------------------------------------------------- // Serialization methods // -------------------------------------------------------------------- // exclude the version field from equals and hashCode private static final String[] excludedFields = { "version" }; @Override public boolean equals(Object other) { return EqualsBuilder.reflectionEquals(this, other, excludedFields ); } @Override public int hashCode() { return new HashCodeBuilder().append(this.catalogNumber).toHashCode(); } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }