package open.dolphin.infomodel;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.*;
/**
* KarteEntry
*
* @author Minagawa,Kazushi
*
*/
@MappedSuperclass
public class KarteEntryBean extends InfoModel implements Comparable {
// PK
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private long id;
// 確定日時
@Column(nullable=false)
@Temporal(value = TemporalType.TIMESTAMP)
private Date confirmed;
// 記録の有効開始日時(最初に確定した日)
@Column(nullable=false)
@Temporal(value = TemporalType.TIMESTAMP)
private Date started;
// 記録の終了日時(有効ではなくなった日)
@Temporal(value = TemporalType.TIMESTAMP)
private Date ended;
// 記録日時
@Column(nullable=false)
@Temporal(value = TemporalType.TIMESTAMP)
private Date recorded;
// 親エントリーの PK
private long linkId;
// 親エントリーとの関係
private String linkRelation;
// エントリーのステータス(Final,Modifyed等)
@Column(length=1, nullable=false)
private String status;
// 記録責任者(システムの利用者)
@ManyToOne
@JoinColumn(name="creator_id", nullable=false)
private UserModel creator;
// カルテへの外部参照
@ManyToOne
@JoinColumn(name="karte_id", nullable=false)
private KarteBean karte;
/**
* このエントリのIdを返す。
* @return Id
*/
public long getId() {
return id;
}
/**
* このエントリのIdを設定する。
* @param id エントリId
*/
public void setId(long id) {
this.id = id;
}
/**
* 確定日時を返す。
* @return 確定日時
*/
public Date getConfirmed() {
return confirmed;
}
/**
* 確定日時を設定する。
* @param confirmed 確定日時
*/
public void setConfirmed(Date confirmed) {
this.confirmed = confirmed;
}
/**
* 適合開始日を返す。
* @return 記録の適合開始日(TimeStamp)
*/
public Date getStarted() {
return started;
}
/**
* 適合開始日を設定する。
* @param started 記録の適合開始日(TimeStamp)
*/
public void setStarted(Date started) {
this.started = started;
}
/**
* 適合終了日を返す。
* @return この記録の適合終了日時
*/
public Date getEnded() {
return ended;
}
/**
* 適合終了日を設定する。
* @param ended この記録の適合終了日時
*/
public void setEnded(Date ended) {
this.ended = ended;
}
/**
* 記録日を返す。
* @return このエントリの記録日時
*/
public Date getRecorded() {
return recorded;
}
/**
* 記録日を設定する。
* @param recorded このエントリの記録日時
*/
public void setRecorded(Date recorded) {
this.recorded = recorded;
}
/**
* エントリのリンク先IDを返す。
* @return エントリのリンク先ID
*/
public long getLinkId() {
return linkId;
}
/**
* エントリのリンク先IDを設定する。
* @param linkId エントリのリンク先ID
*/
public void setLinkId(long linkId) {
this.linkId = linkId;
}
/**
* リンク先との関係を返す。
* @return リンク先との関係
*/
public String getLinkRelation() {
return linkRelation;
}
/**
* リンク先との関係を設定する。
* @param linkRelation リンク先との関係
*/
public void setLinkRelation(String linkRelation) {
this.linkRelation = linkRelation;
}
/**
* このエントリのステータスを返す。
* @return ステータス
*/
public String getStatus() {
return status;
}
/**
* このエントリのステータスを設定する。
* @param status ステータス
*/
public void setStatus(String status) {
this.status = status;
}
/**
* Creatorを返す。
* @return Creator (システムのユーザ)
*/
public UserModel getUserModel() {
return creator;
}
/**
* Creator を設定する。
* @param creator このエントリの記述者
*/
public void setUserModel(UserModel creator) {
this.creator = creator;
}
/**
* カルテを返す。
* @return Karte
*/
public KarteBean getKarteBean() {
return karte;
}
/**
* カルテを設定する。
* @param karte Karte
*/
public void setKarteBean(KarteBean karte) {
this.karte = karte;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + (int) (id ^ (id >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final KarteEntryBean other = (KarteEntryBean) obj;
if (id != other.id)
return false;
return true;
}
/**
* 適合開始日と確定日で比較する。
* @return Comparable の比較値
*/
@Override
public int compareTo(Object other) {
if (other != null && getClass() == other.getClass()) {
Date date1 = getStarted();
Date date2 = ((KarteEntryBean) other).getStarted();
int result = compareDate(date1, date2);
if (result == 0) {
date1 = getConfirmed();
date2 = ((KarteEntryBean) other).getConfirmed();
result = compareDate(date1, date2);
}
return result;
}
return -1;
}
private int compareDate(Date date1, Date date2) {
if (date1 != null && date2 == null) {
return -1;
} else if (date1 == null && date2 != null) {
return 1;
} else if (date1 == null && date2 == null) {
return 0;
} else {
return date1.compareTo(date2);
}
}
//
// 互換性用のプロキシコード
//
public Date getFirstConfirmed() {
return getStarted();
}
public void setFirstConfirmed(Date firstConfirmed) {
setStarted(firstConfirmed);
}
public String getFirstConfirmDate() {
return ModelUtils.getDateTimeAsString(getFirstConfirmed());
}
public void setFirstConfirmDate(String timeStamp) {
setFirstConfirmed(ModelUtils.getDateTimeAsObject(timeStamp));
}
public String getConfirmDate() {
return ModelUtils.getDateTimeAsString(getConfirmed());
}
public void setConfirmDate(String timeStamp) {
setConfirmed(ModelUtils.getDateTimeAsObject(timeStamp));
}
//
// 足場コード Date
//
public String firstConfirmDateAsString() {
return dateAsString(getFirstConfirmed());
}
public String confirmDateAsString() {
return dateAsString(getConfirmed());
}
public String startedDateAsString() {
return dateAsString(getStarted());
}
public String endedDateAsString() {
return dateAsString(getEnded());
}
public String recordedDateAsString() {
return dateAsString(getRecorded());
}
private String dateAsString(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_WITHOUT_TIME);
return sdf.format(date);
}
//
// 足場コード TimeStamp
//
public String confirmedTimeStampAsString() {
return timeStampAsString(getConfirmed());
}
public String startedTimeStampAsString() {
return timeStampAsString(getStarted());
}
public String endedTimeStampAsString() {
return timeStampAsString(getEnded());
}
public String recordedTimeStampAsString() {
return timeStampAsString(getRecorded());
}
private String timeStampAsString(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(ISO_8601_DATE_FORMAT);
return sdf.format(date);
}
//------------------------------------------------------------
public UserModel getCreator() {
return getUserModel();
}
public void setCreator(UserModel creator) {
setUserModel(creator);
}
public KarteBean getKarte() {
return getKarteBean();
}
public void setKarte(KarteBean karte) {
setKarteBean(karte);
}
//------------------------------------------------------------
}