/* * AnnotationsByOffset.java * Copyright: Copyright (c) 2005, Ontotext Lab. * Company: Ontotext Lab. * Krasimir Angelov 12/2005 */ package com.ontotext.gate.japec; import java.io.*; import java.util.*; import gate.*; import gate.jape.*; import gate.creole.ontology.Ontology; import gate.util.Strings; public abstract class RuleAction implements Comparable { int priority; int fileLine; long lastOffset; public Map bindings; public RuleAction(String ruleName, int priority, int fileLine, SinglePhaseTransducer.State state) { Annotation annotation = state.currentAnnotation(); this.bindings = state.getBindings(ruleName); this.priority = priority; this.fileLine = fileLine; this.lastOffset = annotation.getEndNode().getOffset().longValue(); } public void transduce(Document doc, AnnotationSet inputAS, AnnotationSet outputAS, Ontology ontology) throws JapeException { try { doit(doc, outputAS, inputAS, outputAS, ontology); } catch (Exception e) { StringWriter stackTraceWriter = new StringWriter(); e.printStackTrace(new PrintWriter(stackTraceWriter)); throw new JapeException( "Couldn't run RHS action: " + Strings.getNl() + stackTraceWriter.getBuffer().toString()); } } public abstract void doit(Document doc, AnnotationSet annotations, AnnotationSet inputAS, AnnotationSet outputAS, Ontology ontology); Map getBindings() { return bindings; } public int compareTo(Object obj) { if (obj instanceof RuleAction) { if(obj == this) return 0; RuleAction other = (RuleAction) obj; if (lastOffset < other.lastOffset) return -1; else if(lastOffset > other.lastOffset) return 1; //equal length else if(priority < other.priority) return -1; else if(priority > other.priority) return 1; //equal priority else if(other.fileLine < fileLine) return -1; else if(other.fileLine > fileLine) return 1; //equal fileLine else return 0; } else throw new ClassCastException( "Attempt to compare a KIMRhsAction object to an object " + "of type " + obj.getClass()+"!"); } }