DelegatingSemanticAnnotationHelper.java
- /*
- * DelegatingSemanticAnnotationHelper.java
- *
- * Copyright (c) 2007-2011, The University of Sheffield.
- *
- * This file is part of GATE MÃmir (see http://gate.ac.uk/family/mimir.html),
- * and is free software, licenced under the GNU Lesser General Public License,
- * Version 3, June 2007 (also included with this distribution as file
- * LICENCE-LGPL3.html).
- *
- * Ian Roberts, 28 Mar 2011
- *
- * $Id: DelegatingSemanticAnnotationHelper.java 18571 2015-02-12 18:18:17Z ian_roberts $
- */
- package gate.mimir.util;
- import java.util.List;
- import java.util.Map;
- import gate.Annotation;
- import gate.Document;
- import gate.mimir.AbstractSemanticAnnotationHelper;
- import gate.mimir.Constraint;
- import gate.mimir.MimirIndex;
- import gate.mimir.SemanticAnnotationHelper;
- import gate.mimir.index.AtomicAnnotationIndex;
- import gate.mimir.index.Mention;
- import gate.mimir.search.QueryEngine;
- /**
- * <p>{@link SemanticAnnotationHelper} that simply delegates all method calls to
- * another helper object. Use this as a base class for helpers that provide
- * search enhancements (converting higher-level search expressions into
- * appropriate low-level constraints) on top of any generic helper.</p>
- *
- * <p>The default implementation of the "business" methods init/close,
- * documentStart/End and getMentions/getMentionUris is to simply call
- * the delegate's equivalent method.
- *
- * The logic for the "info" methods
- * getNominal/Integer/Float/Text/UriFeatureNames is:
- * <ul>
- * <li>if the required value is known locally (e.g. an explicit value was set
- * by a setter), then simply return it;</li>
- * <li>if no explicit value is set, and if the delegate helper is an instance
- * of {@link AbstractSemanticAnnotationHelper} (which can supply appropriate
- * information), then the value is obtained from the delegate, stored
- * locally, and returned. Future calls to the same method will use the locally
- * stored value.</li>
- * <li>if no local value exists, and the delegate cannot supply the
- * information, then <code>null</code> is returned.</li>
- * </ul>
- * This allows sub-classes of this class to override the appropriate getters so
- * that they change the set of supported features. This can be useful in order
- * to claim support for additional features not provided by the delegate, and/or
- * to hide features that the delegate supports if, at search time the helper
- * will be faking these features in terms of other features.
- *
- * <p><b>Note</b> this class does <b>not</b> override the convenience method
- * {@link AbstractSemanticAnnotationHelper#getMentions(String, Map, QueryEngine)},
- * so this method is implemented as a call to
- * <code>this.getMentions(String, List<Constraint>, QueryEngine)</code>,
- * not to <code>delegate.getMentions(String, Map, QueryEngine)</code>.
- */
- public abstract class DelegatingSemanticAnnotationHelper extends
- AbstractSemanticAnnotationHelper {
- private static final long serialVersionUID = 458089145672457600L;
- /**
- * Map key for the Groovy-friendly constructor in subclasses.
- */
- public static final String DELEGATE_KEY = "delegate";
- protected SemanticAnnotationHelper delegate;
- public SemanticAnnotationHelper getDelegate() {
- return delegate;
- }
- public void setDelegate(SemanticAnnotationHelper delegate) {
- this.delegate = delegate;
- this.mode = delegate.getMode();
- }
-
-
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#getAnnotationType()
- */
- @Override
- public String getAnnotationType() {
- if(annotationType == null) {
- // not explicitly set -> calculate it
- if(delegate instanceof AbstractSemanticAnnotationHelper) {
- annotationType =
- ((AbstractSemanticAnnotationHelper)delegate).getAnnotationType();
- }
- }
- return annotationType;
- }
-
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#getNominalFeatures()
- */
- @Override
- public String[] getNominalFeatures() {
- if(nominalFeatureNames == null) {
- // not explicitly set -> calculate the value
- if(delegate instanceof AbstractSemanticAnnotationHelper) {
- nominalFeatureNames =
- ((AbstractSemanticAnnotationHelper)delegate).getNominalFeatures();
- }
- }
- return nominalFeatureNames;
- }
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#getIntegerFeatures()
- */
- @Override
- public String[] getIntegerFeatures() {
- if(integerFeatureNames == null) {
- // not explicitly set -> calculate the value
- if(delegate instanceof AbstractSemanticAnnotationHelper) {
- integerFeatureNames =
- ((AbstractSemanticAnnotationHelper)delegate).getIntegerFeatures();
- }
- }
- return integerFeatureNames;
- }
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#getFloatFeatures()
- */
- @Override
- public String[] getFloatFeatures() {
- if(floatFeatureNames == null) {
- // not explicitly set -> calculate the value
- if(delegate instanceof AbstractSemanticAnnotationHelper) {
- floatFeatureNames =
- ((AbstractSemanticAnnotationHelper)delegate).getFloatFeatures();
- }
- }
- return floatFeatureNames;
- }
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#getTextFeatures()
- */
- @Override
- public String[] getTextFeatures() {
- if(textFeatureNames == null) {
- // not explicitly set -> calculate the value
- if(delegate instanceof AbstractSemanticAnnotationHelper) {
- textFeatureNames =
- ((AbstractSemanticAnnotationHelper)delegate).getTextFeatures();
- }
- }
- return textFeatureNames;
- }
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#getUriFeatures()
- */
- @Override
- public String[] getUriFeatures() {
- if(uriFeatureNames == null) {
- // not explicitly set -> calculate the value
- if(delegate instanceof AbstractSemanticAnnotationHelper) {
- uriFeatureNames =
- ((AbstractSemanticAnnotationHelper)delegate).getUriFeatures();
- }
- }
- return uriFeatureNames;
- }
-
- /**
- * Always return the delegate's mode, as it makes no sense for a delegating
- * helper to operate in a different mode from its underlying delegate.
- */
- @Override
- public Mode getMode() {
- return delegate.getMode();
- }
- @Override
- public void init(AtomicAnnotationIndex index) {
- super.init(index);
- delegate.init(index);
- }
- @Override
- public void documentStart(Document document) {
- delegate.documentStart(document);
- }
- @Override
- public String[] getMentionUris(Annotation annotation, int length,
- AtomicAnnotationIndex index) {
- return delegate.getMentionUris(annotation, length, index);
- }
- @Override
- public List<Mention> getMentions(String annotationType,
- List<Constraint> constraints, QueryEngine engine) {
- return delegate.getMentions(annotationType, constraints, engine);
- }
-
- /* (non-Javadoc)
- * @see gate.mimir.AbstractSemanticAnnotationHelper#describeMention(java.lang.String)
- */
- @Override
- public String describeMention(String mentionUri) {
- return delegate.describeMention(mentionUri);
- }
-
- /* (non-Javadoc)
- * @see gate.mimir.SemanticAnnotationHelper#isMentionUri(java.lang.String)
- */
- @Override
- public boolean isMentionUri(String mentionUri) {
- return delegate.isMentionUri(mentionUri);
- }
- @Override
- public void documentEnd() {
- delegate.documentEnd();
- }
- @Override
- public void close(AtomicAnnotationIndex index) {
- delegate.close(index);
- }
- @Override
- public void close(QueryEngine qEngine) {
- delegate.close(qEngine);
- }
-
- }