package edu.stanford.nlp.ie.machinereading.domains.ace.reader;
import java.util.List;
import java.util.ArrayList;
/**
* Stores one ACE relation
*/
public class AceRelation extends AceElement {
private String mType;
private String mSubtype;
private String mModality;
private String mTense;
/** The list of mentions for this event */
private List<AceRelationMention> mMentions;
public static final String NIL_LABEL = "nil";
public AceRelation(String id,
String type,
String subtype,
String modality,
String tense) {
super(id);
mType = type;
mSubtype = subtype;
mModality = modality;
mTense = tense;
mMentions = new ArrayList<>();
}
public void addMention(AceRelationMention m) {
mMentions.add(m);
m.setParent(this);
}
public AceRelationMention getMention(int which) {
return mMentions.get(which);
}
public int getMentionCount() { return mMentions.size(); }
public String getType() { return mType; }
public void setType(String s) { mType = s; }
public String getSubtype() { return mSubtype; }
public void setSubtype(String s) { mSubtype = s; }
public String toXml(int offset) {
StringBuffer buffer = new StringBuffer();
appendOffset(buffer, offset);
buffer.append("<relation ID=\"" + getId() + "\" TYPE =\"" + mType +
"\" SUBTYPE=\"" + mSubtype + "\" MODALITY=\"" + mModality +
"\" TENSE=\"" + mTense + "\">\n");
AceRelationMentionArgument arg1 = mMentions.get(0).getArgs()[0];
AceRelationMentionArgument arg2 = mMentions.get(0).getArgs()[1];
if(arg1.getRole().equals("Arg-1")){ // left to right
buffer.append(arg1.toXmlShort(offset + 2) + "\n");
buffer.append(arg2.toXmlShort(offset + 2) + "\n");
} else { // right to left
buffer.append(arg2.toXmlShort(offset + 2) + "\n");
buffer.append(arg1.toXmlShort(offset + 2) + "\n");
}
for(AceRelationMention m: mMentions){
buffer.append(m.toXml(offset + 2));
buffer.append("\n");
}
appendOffset(buffer, offset);
buffer.append("</relation>");
return buffer.toString();
}
}