package gov.nih.ncgc.bard.pcparser;
// $Id: AssayResults.java 2278 2008-05-29 22:27:45Z nguyenda $
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
public class AssayResults implements Constants, Serializable,
Comparable<AssayResults> {
private static final long serialVersionUID = 12242007;
/*
universal unique identifier identifying an instance of this class
*/
private long uid;
/*
external/source substance ID
*/
protected String sid;
/*
Data Annotation/Qualifier and URL to further Depositor Information
Annotation or qualifier for this Result
*/
protected String comment;
/*
inactive - Substance is considered Inactive
active - Substance is considered Active
inconclusive - Substance is Inconclusive
unspecified - Substance Outcome is Unspecified
*/
protected Outcome outcome = Outcome.Unspecified;
/*
Rank of Assay Outcome (for result ordering)
Note: Larger numbers are more active
*/
protected int rank = 0;
/*
Depositor provided URL for this Result
*/
protected String url;
/*
Assay Data Reported for this SID (vector)
*/
protected List<AssayData> data = new ArrayList<AssayData>();
public AssayResults () {}
public AssayResults (long uid) {
this.uid = uid;
}
public long getUID () { return uid; }
public void setUID (long uid) { this.uid = uid; }
public String getSID () { return sid; }
public void setSID (String sid) { this.sid = sid; }
public void setComment (String comment) { this.comment = comment; }
public String getComment () { return comment; }
public void setOutcome (Outcome outcome) { this.outcome = outcome; }
public Outcome getOutcome () { return outcome; }
public void setRank (int rank) { this.rank = rank; }
public int getRank () { return rank; }
public void setURL (String url) { this.url = url; }
public String getURL () { return url; }
public void addData (AssayData data) {
this.data.add(data);
}
public Enumeration<AssayData> getData () {
return Collections.enumeration(data);
}
public AssayData getData (int tid) {
for (AssayData d : data) {
if (d.getTID() == tid) {
return d;
}
}
return null;
}
public AssayData getDataAt (int pos) {
return data.get(pos);
}
public int getDataSize () { return data.size(); }
public int compareTo (AssayResults ar) {
if (ar == null) return 1;
return getRank () - ar.getRank();
}
private void writeObject (ObjectOutputStream out) throws IOException {
out.writeLong(uid);
out.writeObject(sid);
out.writeObject(comment);
out.writeInt(outcome.ordinal());
out.writeInt(rank);
out.writeObject(url);
out.writeInt(data.size());
for (AssayData ad : data) {
out.writeObject(ad);
}
}
private void readObject (ObjectInputStream in)
throws IOException, ClassNotFoundException {
uid = in.readLong();
sid = (String)in.readObject();
comment = (String)in.readObject();
int ord = in.readInt();
for (Outcome o : Outcome.values()) {
if (o.ordinal() == ord) {
outcome = o;
break;
}
}
rank = in.readInt();
url = (String)in.readObject();
int size = in.readInt();
data = new ArrayList<AssayData>();
for (int i = 0; i < size; ++i) {
AssayData ad = (AssayData)in.readObject();
data.add(ad);
}
}
public String toString () {
StringBuffer sb = new StringBuffer
("[UID="+uid+",SID="+sid+",Rank="+rank+",Outcome="
+outcome+",Comment="+comment+",Data="+data.size());
if (data.size() > 0) {
sb.append("[" + data.get(0));
for (int i = 1; i < data.size(); ++i) {
sb.append("," + data.get(i));
}
sb.append("]");
}
sb.append("]");
return sb.toString();
}
}