package com.digitalpebble.azazello;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Implementation of an Annotation. Has a type , metadata and start and end
* offsets referring to the position in the text of a @class BehemothDocument.
**/
public class Annotation implements Comparable<Annotation> {
private String type;
private int start;
private int end;
private Map<String, String> features;
public Annotation() {
type = "";
start = -1;
end = -1;
}
public int getFeatureNum() {
if (this.getFeatures() == null)
return 0;
return this.getFeatures().size();
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public Map<String, String> getFeatures() {
if (features == null)
features = new HashMap<String, String>();
return features;
}
public void setFeatures(Map<String, String> features) {
this.features = features;
}
// sort by start offset then type
public int compareTo(Annotation target) {
long diff = this.start - target.start;
if (diff != 0)
return (int) diff;
diff = this.type.compareTo(target.type);
if (diff != 0)
return (int) diff;
diff = this.end - target.end;
if (diff != 0)
return (int) diff;
// eventually compare based on the features
diff = this.getFeatureNum() - target.getFeatureNum();
if (diff != 0)
return (int) diff;
// TODO compare the features one by one?
return 0;
}
/** Returns a String representation of the Annotation **/
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(this.type).append("\t").append(start).append("\t")
.append(end);
if (features != null) {
Iterator<String> keysiter = features.keySet().iterator();
while (keysiter.hasNext()) {
String key = keysiter.next();
String value = features.get(key).toString();
buffer.append("\t").append(key).append("=").append(value);
}
}
return buffer.toString();
}
}