//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.uima.utils;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.gov.dstl.baleen.types.language.Interaction;
import uk.gov.dstl.baleen.types.semantic.Entity;
/**
* Helpers for working with spans.
*/
public final class ComparableEntitySpanUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(ComparableEntitySpanUtils.class);
/**
* Instantiates a new span utils.
*/
private ComparableEntitySpanUtils() {
// Singleton
}
/**
* Copy entity.
*
* @param jCas
* the j cas
* @param begin
* the begin
* @param end
* the end
* @param entity
* the entity
* @return the entity
*/
public static Entity copyEntity(JCas jCas, int begin, int end, Entity entity) {
// TODO: This could be better, but would suggest if better is need
try {
final Entity instance = entity.getClass().getConstructor(JCas.class).newInstance(jCas);
instance.setBegin(begin);
instance.setEnd(end);
instance.setReferent(entity.getReferent());
instance.setValue(entity.getValue());
return instance;
} catch (final Exception e) {
LOGGER.warn("Unable to copy entity", e);
return null;
}
}
/**
* Copy an annotation.
*
* @param jCas
* the j cas
* @param begin
* the begin
* @param end
* the end
* @param annotation
* the interaction
* @return the interaction
*/
public static Interaction copyInteraction(JCas jCas, int begin, int end, Interaction annotation) {
try {
final Interaction instance = annotation.getClass().getConstructor(JCas.class).newInstance(jCas);
instance.setBegin(begin);
instance.setEnd(end);
instance.setValue(annotation.getValue());
return instance;
} catch (final Exception e) {
LOGGER.warn("Unable to copy entity", e);
return null;
}
}
/**
* Overlaps.
*
* @param a
* the a
* @param b
* the b
* @return true, if successful
*/
public static boolean overlaps(Annotation a, Annotation b) {
return !(a.getEnd() < b.getBegin() || b.getEnd() < a.getBegin());
}
}