/*
* Copyright (c) 2012. The Genome Analysis Centre, Norwich, UK
* MISO project contacts: Robert Davey, Mario Caccamo @ TGAC
* *********************************************************************
*
* This file is part of MISO.
*
* MISO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MISO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MISO. If not, see <http://www.gnu.org/licenses/>.
*
* *********************************************************************
*/
package uk.ac.bbsrc.tgac.miso.core.data.impl;
import com.eaglegenomics.simlims.core.User;
import uk.ac.bbsrc.tgac.miso.core.data.type.HealthType;
import uk.ac.bbsrc.tgac.miso.core.data.Status;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* uk.ac.bbsrc.tgac.miso.core.data.impl
* <p/>
* Info
*
* @author Rob Davey
* @since 0.0.2
*/
@Entity
@Table(name = "`Status`")
public class StatusImpl implements Status, Serializable {
public static final Long UNSAVED_ID = 0L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long statusId = StatusImpl.UNSAVED_ID;
@Enumerated(EnumType.STRING)
private HealthType health;
private Date startDate;
private Date completionDate;
private String instrumentName;
private String xml;
private String runName;
private Date lastUpdated;
/**
* Construct a new Status with HealthType.Unknown
*/
public StatusImpl() {
setHealth(HealthType.Unknown);
setStartDate(new Date());
}
/**
* Construct a new Status with HealthType.Unknown and a given run name
*
* @param runName of type String
*/
public StatusImpl(String runName) {
setRunName(runName);
setHealth(HealthType.Unknown);
setStartDate(new Date());
}
public Long getStatusId() {
return statusId;
}
public void setStatusId(Long statusId) {
this.statusId = statusId;
}
public String getXml() {
return xml;
}
public void setXml(String xml) {
this.xml = xml;
}
public HealthType getHealth() {
return health;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getCompletionDate() {
return completionDate;
}
public void setCompletionDate(Date completionDate) {
this.completionDate = completionDate;
}
public void setHealth(HealthType health) {
// if (this.health != null && !this.health.equals(health) && health.equals(HealthType.Completed)) {
// setCompletionDate(new Date());
// }
this.health = health;
}
public String getInstrumentName() {
return instrumentName;
}
public void setInstrumentName(String instrumentName) {
this.instrumentName = instrumentName;
}
public String getRunName() {
return runName;
}
public void setRunName(String runName) {
this.runName = runName;
}
public Date getLastUpdated() {
return lastUpdated;
}
public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
}
public boolean userCanRead(User user) {
return true;
}
public boolean userCanWrite(User user) {
return false;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof Status))
return false;
Status them = (Status) obj;
// If not saved, then compare resolved actual objects. Otherwise
// just compare IDs.
if (getStatusId().equals(StatusImpl.UNSAVED_ID)
|| them.getStatusId().equals(StatusImpl.UNSAVED_ID)) {
return getRunName().equals(them.getRunName());
}
else {
return getStatusId().equals(them.getStatusId()) &&
getHealth().equals(them.getHealth()) &&
getStartDate().equals(them.getStartDate()) &&
getCompletionDate().equals(them.getCompletionDate());
}
}
@Override
public int hashCode() {
if (getStatusId() != null && !getStatusId().equals(StatusImpl.UNSAVED_ID)) {
return getStatusId().hashCode();
}
else {
final int PRIME = 31;
int result = 1;
result = (result*PRIME) + (getRunName() == null ? 0 : getRunName().hashCode());
return result;
}
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append(getStatusId());
sb.append(" : ");
sb.append(getStartDate());
sb.append(" : ");
sb.append(getHealth());
sb.append(" : ");
sb.append(getInstrumentName());
return sb.toString();
}
}