package com.cognitionis.timeml_basickit;
/**
* @author Hector Llorens
* @since 2011
*/
public class Link extends Element {
private String link_type; // TLINK(event-timex-ref, event-timex-DURATION-no-ref,event-dct,main-event,sub-event), ALINK, SLINK
private String id1;
private String id2;
private String link_category; // TLINK 13 allens, ALINKS, SLINK
/**
* Constructs a new Link object
*
* @param i the link id
* @param ex the expression (probably null)
* @param t the link type (tlink, slink, alink, or more specific: tlink-event-timex)
* @param c the link category (Allen's 13 temp. rels.)(aspectual or subordinate)
* @param i1 the id of the first element (event or timex)
* @param i2 the id of the second element (event or timex)
* @param di the id of the document
*
*/
public Link(String i,String t,String c, String i1, String i2, String di){
this.id=i;
this.expression=null;
this.num_tokens=1;
this.link_type=t;
this.link_category=c;
this.id1=i1;
this.id2=i2;
this.doc_id=di;
this.sent_num=0;
this.tok_num=0;
}
public String get_type(){
return link_type;
}
public String get_category(){
return link_category;
}
public String get_id1(){
return id1;
}
public String get_id2(){
return id2;
}
public void swapRelationElements(){
link_category=reverseRelationCategory(link_category);
String temp=id1;
id1=id2;
id2=temp;
}
public void set_category(String cat){
link_category=cat;
}
/**
* Given a relation name, return the inverse Allen-TimeML relation
* @param rel
* @return
*/
public static String reverseRelationCategory(String rel) {
try {
if (rel.equals("BEFORE")) {
return "AFTER";
}
if (rel.equals("AFTER")) {
return "BEFORE";
}
if (rel.equals("IBEFORE")) {
return "IAFTER";
}
if (rel.equals("IAFTER")) {
return "IBEFORE";
}
if (rel.equals("DURING")) {
return "DURING_INV";
}
if (rel.equals("BEGINS")) {
return "BEGUN_BY";
}
if (rel.equals("BEGUN_BY")) {
return "BEGINS";
}
if (rel.equals("ENDS")) {
return "ENDED_BY";
}
if (rel.equals("ENDED_BY")) {
return "ENDS";
}
if (rel.equals("OVERLAPS")) {
return "OVERLAPPED_BY";
}
if (rel.equals("OVERLAPPED_BY")) {
return "OVERLAPS";
}
if (rel.equals("INCLUDES")) {
return "IS_INCLUDED";
}
if (rel.equals("IS_INCLUDED")) {
return "INCLUDES";
}
if (rel.equals("IDENTITY") || rel.equals("SIMULTANEOUS")) {
return "SIMULTANEOUS";
}
// SPANISH
if (rel.equals("OVERLAP")) {
return "OVERLAP";
}
if (rel.equals("BEFORE-OR-OVERLAP")) {
return "OVERLAP-OR-AFTER";
}
if (rel.equals("OVERLAP-OR-AFTER")) {
return "BEFORE-OR-OVERLAP";
}
throw new Exception("Unknow relation: " + rel);
} catch (Exception e) {
System.err.println("Errors found (Link):\n\t" + e.toString() + "\n");
if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
e.printStackTrace(System.err);
System.exit(1);
}
return null;
}
}
}